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

112 lines
3.9 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 ChestMenu extends AbstractContainerMenu {
private final Container container;
private final int containerRows;
private ChestMenu(MenuType<?> p_39224_, int p_39225_, Inventory p_39226_, int p_39227_) {
this(p_39224_, p_39225_, p_39226_, new SimpleContainer(9 * p_39227_), p_39227_);
}
public static ChestMenu oneRow(int p_39235_, Inventory p_39236_) {
return new ChestMenu(MenuType.GENERIC_9x1, p_39235_, p_39236_, 1);
}
public static ChestMenu twoRows(int p_39244_, Inventory p_39245_) {
return new ChestMenu(MenuType.GENERIC_9x2, p_39244_, p_39245_, 2);
}
public static ChestMenu threeRows(int p_39256_, Inventory p_39257_) {
return new ChestMenu(MenuType.GENERIC_9x3, p_39256_, p_39257_, 3);
}
public static ChestMenu fourRows(int p_39259_, Inventory p_39260_) {
return new ChestMenu(MenuType.GENERIC_9x4, p_39259_, p_39260_, 4);
}
public static ChestMenu fiveRows(int p_39263_, Inventory p_39264_) {
return new ChestMenu(MenuType.GENERIC_9x5, p_39263_, p_39264_, 5);
}
public static ChestMenu sixRows(int p_39267_, Inventory p_39268_) {
return new ChestMenu(MenuType.GENERIC_9x6, p_39267_, p_39268_, 6);
}
public static ChestMenu threeRows(int p_39238_, Inventory p_39239_, Container p_39240_) {
return new ChestMenu(MenuType.GENERIC_9x3, p_39238_, p_39239_, p_39240_, 3);
}
public static ChestMenu sixRows(int p_39247_, Inventory p_39248_, Container p_39249_) {
return new ChestMenu(MenuType.GENERIC_9x6, p_39247_, p_39248_, p_39249_, 6);
}
public ChestMenu(MenuType<?> p_39229_, int p_39230_, Inventory p_39231_, Container p_39232_, int p_39233_) {
super(p_39229_, p_39230_);
checkContainerSize(p_39232_, p_39233_ * 9);
this.container = p_39232_;
this.containerRows = p_39233_;
p_39232_.startOpen(p_39231_.player);
int i = 18;
this.addChestGrid(p_39232_, 8, 18);
int j = 18 + this.containerRows * 18 + 13;
this.addStandardInventorySlots(p_39231_, 8, j);
}
private void addChestGrid(Container p_364722_, int p_368076_, int p_363773_) {
for (int i = 0; i < this.containerRows; i++) {
for (int j = 0; j < 9; j++) {
this.addSlot(new Slot(p_364722_, j + i * 9, p_368076_ + j * 18, p_363773_ + i * 18));
}
}
}
@Override
public boolean stillValid(Player p_39242_) {
return this.container.stillValid(p_39242_);
}
@Override
public ItemStack quickMoveStack(Player p_39253_, int p_39254_) {
ItemStack itemstack = ItemStack.EMPTY;
Slot slot = this.slots.get(p_39254_);
if (slot != null && slot.hasItem()) {
ItemStack itemstack1 = slot.getItem();
itemstack = itemstack1.copy();
if (p_39254_ < this.containerRows * 9) {
if (!this.moveItemStackTo(itemstack1, this.containerRows * 9, this.slots.size(), true)) {
return ItemStack.EMPTY;
}
} else if (!this.moveItemStackTo(itemstack1, 0, this.containerRows * 9, false)) {
return ItemStack.EMPTY;
}
if (itemstack1.isEmpty()) {
slot.setByPlayer(ItemStack.EMPTY);
} else {
slot.setChanged();
}
}
return itemstack;
}
@Override
public void removed(Player p_39251_) {
super.removed(p_39251_);
this.container.stopOpen(p_39251_);
}
public Container getContainer() {
return this.container;
}
public int getRowCount() {
return this.containerRows;
}
}