public class FloatingChest extends Item {
public FloatingChest() {
super(new Item.Properties().group(RandomAdditions.CUSTOMITEMGROUP));
setRegistryName(ModRegistries.location("floating_chest"));
}
@Override
public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
NetworkHooks.openGui((ServerPlayerEntity) playerIn, new FloatingChestCapability());
return super.onItemRightClick(worldIn, playerIn, handIn);
}
}
public class FloatingChestContainer extends Container {
private IItemHandler playerInventory;
public FloatingChestContainer(int windowId, PlayerInventory playerInventory, PlayerEntity player) {
super(ModItems.floating_chest_container, windowId);
this.playerInventory = new InvWrapper(playerInventory);
addSlotBox(new InvWrapper(player.getInventoryEnderChest()), 0, 8, 18, 9, 18, 3, 18);
layoutPlayerInventorySlots(8, 86);
}
@Override
public boolean canInteractWith(PlayerEntity playerIn) {
return true;
}
private int addSlotRange(IItemHandler handler, int index, int x, int y, int amount, int dx) {
for (int i = 0 ; i < amount ; i++) {
addSlot(new SlotItemHandler(handler, index, x, y));
x += dx;
index++;
}
return index;
}
private int addSlotBox(IItemHandler handler, int index, int x, int y, int horAmount, int dx, int verAmount, int dy) {
for (int j = 0 ; j < verAmount ; j++) {
index = addSlotRange(handler, index, x, y, horAmount, dx);
y += dy;
}
return index;
}
private void layoutPlayerInventorySlots(int leftCol, int topRow) {
// Player inventory
addSlotBox(playerInventory, 9, leftCol, topRow, 9, 18, 3, 18);
// Hotbar
topRow += 58;
addSlotRange(playerInventory, 0, leftCol, topRow, 9, 18);
}
public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) {
ItemStack itemstack = ItemStack.EMPTY;
Slot slot = this.inventorySlots.get(index);
if (slot != null && slot.getHasStack()) {
ItemStack itemstack1 = slot.getStack();
itemstack = itemstack1.copy();
if (index < 3 * 9) {
if (!this.mergeItemStack(itemstack1, 3 * 9, this.inventorySlots.size(), true)) {
return ItemStack.EMPTY;
}
} else if (!this.mergeItemStack(itemstack1, 0, 3 * 9, false)) {
return ItemStack.EMPTY;
}
if (itemstack1.isEmpty()) {
slot.putStack(ItemStack.EMPTY);
} else {
slot.onSlotChanged();
}
}
return itemstack;
}
}
public class FloatingChestScreen extends ContainerScreen<FloatingChestContainer> {
private ResourceLocation GUI = ModRegistries.location("textures/gui/floating_chest_gui.png");
private final int inventoryRows;
public FloatingChestScreen(FloatingChestContainer screenContainer, PlayerInventory inv, ITextComponent titleIn) {
super(screenContainer, inv, titleIn);
this.inventoryRows = 3;
this.ySize = 114 + this.inventoryRows * 18;
}
@Override
public void render(int mouseX, int mouseY, float partialTicks) {
this.renderBackground();
super.render(mouseX, mouseY, partialTicks);
this.renderHoveredToolTip(mouseX, mouseY);
}
@Override
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
this.font.drawString("Floating Chest", 8.0F, 6.0F, 4210752);
this.font.drawString(this.playerInventory.getDisplayName().getFormattedText(), 8.0F,(float) this.ySize - 96 + 2, 4210752);
}
@Override
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
this.minecraft.getTextureManager().bindTexture(GUI);
int relX = (this.width - this.xSize) / 2;
int relY = (this.height - this.ySize) / 2;
this.blit(relX, relY, 0, 0, this.xSize, this.inventoryRows * 18 + 17);
this.blit(relX, relY + this.inventoryRows * 18 + 17, 0, 126, this.xSize, 96);
}
}
public class FloatingChestCapability implements INamedContainerProvider {
@Override
public Container createMenu(int i, PlayerInventory playerInventory, PlayerEntity playerEntity) {
return new FloatingChestContainer(i, playerInventory, playerEntity);
}
@Override
public ITextComponent getDisplayName() {
return new StringTextComponent("");
}
//add capability later
}