minecraft-src/net/minecraft/client/gui/BundleMouseActions.java
2025-07-04 02:49:36 +03:00

74 lines
2.4 KiB
Java

package net.minecraft.client.gui;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.Minecraft;
import net.minecraft.client.ScrollWheelHandler;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.network.protocol.game.ServerboundSelectBundleItemPacket;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.inventory.ClickType;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.item.BundleItem;
import net.minecraft.world.item.ItemStack;
import org.joml.Vector2i;
@Environment(EnvType.CLIENT)
public class BundleMouseActions implements ItemSlotMouseAction {
private final Minecraft minecraft;
private final ScrollWheelHandler scrollWheelHandler;
public BundleMouseActions(Minecraft minecraft) {
this.minecraft = minecraft;
this.scrollWheelHandler = new ScrollWheelHandler();
}
@Override
public boolean matches(Slot slot) {
return slot.getItem().is(ItemTags.BUNDLES);
}
@Override
public boolean onMouseScrolled(double xOffset, double yOffset, int hoveredSlotIndex, ItemStack hoveredSlotItem) {
int i = BundleItem.getNumberOfItemsToShow(hoveredSlotItem);
if (i == 0) {
return false;
} else {
Vector2i vector2i = this.scrollWheelHandler.onMouseScroll(xOffset, yOffset);
int j = vector2i.y == 0 ? -vector2i.x : vector2i.y;
if (j != 0) {
int k = BundleItem.getSelectedItem(hoveredSlotItem);
int l = ScrollWheelHandler.getNextScrollWheelSelection(j, k, i);
if (k != l) {
this.toggleSelectedBundleItem(hoveredSlotItem, hoveredSlotIndex, l);
}
}
return true;
}
}
@Override
public void onStopHovering(Slot slot) {
this.unselectedBundleItem(slot.getItem(), slot.index);
}
@Override
public void onSlotClicked(Slot slot, ClickType clickType) {
if (clickType == ClickType.QUICK_MOVE || clickType == ClickType.SWAP) {
this.unselectedBundleItem(slot.getItem(), slot.index);
}
}
private void toggleSelectedBundleItem(ItemStack stack, int index, int nextIndex) {
if (this.minecraft.getConnection() != null && nextIndex < BundleItem.getNumberOfItemsToShow(stack)) {
ClientPacketListener clientPacketListener = this.minecraft.getConnection();
BundleItem.toggleSelectedItem(stack, nextIndex);
clientPacketListener.send(new ServerboundSelectBundleItemPacket(index, nextIndex));
}
}
public void unselectedBundleItem(ItemStack bundle, int slotIndex) {
this.toggleSelectedBundleItem(bundle, slotIndex, -1);
}
}