Code/net/minecraft/world/inventory/DispenserMenu.java

80 lines
2.6 KiB
Java
Raw Permalink Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.world.inventory;
import net.minecraft.world.Container;
import net.minecraft.world.SimpleContainer;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
public class DispenserMenu extends AbstractContainerMenu {
private static final int SLOT_COUNT = 9;
private static final int INV_SLOT_START = 9;
private static final int INV_SLOT_END = 36;
private static final int USE_ROW_SLOT_START = 36;
private static final int USE_ROW_SLOT_END = 45;
private final Container dispenser;
public DispenserMenu(int p_39433_, Inventory p_39434_) {
this(p_39433_, p_39434_, new SimpleContainer(9));
}
public DispenserMenu(int p_39436_, Inventory p_39437_, Container p_39438_) {
super(MenuType.GENERIC_3x3, p_39436_);
checkContainerSize(p_39438_, 9);
this.dispenser = p_39438_;
p_39438_.startOpen(p_39437_.player);
this.add3x3GridSlots(p_39438_, 62, 17);
this.addStandardInventorySlots(p_39437_, 8, 84);
}
protected void add3x3GridSlots(Container p_363126_, int p_368501_, int p_366608_) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
int k = j + i * 3;
this.addSlot(new Slot(p_363126_, k, p_368501_ + j * 18, p_366608_ + i * 18));
}
}
}
@Override
public boolean stillValid(Player p_39440_) {
return this.dispenser.stillValid(p_39440_);
}
@Override
public ItemStack quickMoveStack(Player p_39444_, int p_39445_) {
ItemStack itemstack = ItemStack.EMPTY;
Slot slot = this.slots.get(p_39445_);
if (slot != null && slot.hasItem()) {
ItemStack itemstack1 = slot.getItem();
itemstack = itemstack1.copy();
if (p_39445_ < 9) {
if (!this.moveItemStackTo(itemstack1, 9, 45, true)) {
return ItemStack.EMPTY;
}
} else if (!this.moveItemStackTo(itemstack1, 0, 9, false)) {
return ItemStack.EMPTY;
}
if (itemstack1.isEmpty()) {
slot.setByPlayer(ItemStack.EMPTY);
} else {
slot.setChanged();
}
if (itemstack1.getCount() == itemstack.getCount()) {
return ItemStack.EMPTY;
}
slot.onTake(p_39444_, itemstack1);
}
return itemstack;
}
@Override
public void removed(Player p_39442_) {
super.removed(p_39442_);
this.dispenser.stopOpen(p_39442_);
}
}