Hi, I have this weird bug where I can't move items properly around in my custom Gui. I'm trying to create a Gui with a container without the block being used being a TileEntity. Something like a crafting table. However, as I just said, I can't move the inventory items properly around. Here's a video of me trying to do something in the gui:
Container Class:
package mod.sds.terrariamod.containers;
import org.apache.logging.log4j.LogManager;
import mod.sds.terrariamod.TerrariaMod;
import mod.sds.terrariamod.containers.slots.ResultSlot;
import mod.sds.terrariamod.inventories.FurnaceInventory;
import mod.sds.terrariamod.lists.BlockList;
import mod.sds.terrariamod.lists.ContainerList;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IWorldPosCallable;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class ContainerFurnace extends Container
{
private final FurnaceInventory inventory;
private final World world;
private final BlockPos blockPos;
public ContainerFurnace(int id, PlayerInventory playerInv, World worldIn, BlockPos pos)
{
super(ContainerList.furnace, id);
this.inventory = new FurnaceInventory(this);
this.world = worldIn;
this.blockPos = pos;
this.addSlot(new Slot(this.inventory, 30, 39, 35));
this.addSlot(new Slot(this.inventory, 31, 57, 35));
this.addSlot(new ResultSlot(this.inventory, 32, 124, 35));
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 9; j++) {
this.addSlot(new Slot(playerInv, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
}
}
for (int i = 0; i < 9; i++) {
this.addSlot(new Slot(playerInv, i, 8 + i * 18, 142));
}
}
@Override
public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, PlayerEntity player) {
LogManager.getLogger(TerrariaMod.modid).info("Slot: " + slotId + ", Item: " + this.getSlot(slotId).getStack().getItem().getName());
System.out.println("Slot: " + slotId + ", Item: " + this.getSlot(slotId).getStack().getItem().getName());
return super.slotClick(slotId, dragType, clickTypeIn, player);
}
@Override
public ItemStack transferStackInSlot(final PlayerEntity player, final int fromSlot) {
ItemStack item = ItemStack.EMPTY;
final Slot fromSlotS = this.inventorySlots.get(fromSlot);
if (fromSlotS != null && fromSlotS.getHasStack()) {
final ItemStack fromSlotItem = fromSlotS.getStack();
item = fromSlotItem.copy();
if (fromSlot == 0) {
IWorldPosCallable.of(this.world, this.blockPos).consume((p_217067_2_, p_217067_3_) -> fromSlotItem.getItem().onCreated(fromSlotItem, p_217067_2_, player));
if (!this.mergeItemStack(fromSlotItem, 10, 46, true)) {
return ItemStack.EMPTY;
}
fromSlotS.onSlotChange(fromSlotItem, item);
}
else if (fromSlot >= 10 && fromSlot < 37) {
if (!this.mergeItemStack(fromSlotItem, 37, 46, false)) {
return ItemStack.EMPTY;
}
}
else if (fromSlot >= 37 && fromSlot < 46) {
if (!this.mergeItemStack(fromSlotItem, 10, 37, false)) {
return ItemStack.EMPTY;
}
}
else if (!this.mergeItemStack(fromSlotItem, 10, 46, false)) {
return ItemStack.EMPTY;
}
if (fromSlotItem.isEmpty()) {
fromSlotS.putStack(ItemStack.EMPTY);
}
else {
fromSlotS.onSlotChanged();
}
if (fromSlotItem.getCount() == item.getCount()) {
return ItemStack.EMPTY;
}
final ItemStack dropItem = fromSlotS.onTake(player, fromSlotItem);
if (fromSlot == 0) {
player.dropItem(dropItem, false);
}
}
return item;
}
@Override
public void onContainerClosed(PlayerEntity playerIn) {
super.onContainerClosed(playerIn);
IWorldPosCallable.of(this.world, this.blockPos).consume((world, blockPos) -> this.clearContainer(playerIn, world, this.inventory));
}
@Override
public boolean canInteractWith(PlayerEntity playerIn)
{
return isWithinUsableDistance(IWorldPosCallable.of(world, blockPos), playerIn, BlockList.stone_furnace);
}
}
Gui Class:
package mod.sds.terrariamod.guis;
import com.mojang.blaze3d.platform.GlStateManager;
import mod.sds.terrariamod.TerrariaMod;
import mod.sds.terrariamod.containers.ContainerFurnace;
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.ITextComponent;
public class StoneFurnaceGUI extends ContainerScreen<ContainerFurnace>
{
private static final ResourceLocation TEXTURES = new ResourceLocation(TerrariaMod.modid, "textures/gui/container/furnace.png");
@SuppressWarnings("unused")
private ContainerFurnace container;
public StoneFurnaceGUI(ContainerFurnace screenContainer, PlayerInventory inv, ITextComponent titleIn)
{
super(screenContainer, inv, titleIn);
this.container = screenContainer;
}
@Override
public void render(int p_render_1_, int p_render_2_, float p_render_3_) {
this.renderBackground();
super.render(p_render_1_, p_render_2_, p_render_3_);
this.renderHoveredToolTip(p_render_1_, p_render_2_);
}
@Override
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
super.drawGuiContainerForegroundLayer(mouseX, mouseY);
}
@Override
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY)
{
GlStateManager.color4f(1f, 1f, 1f, 1f);
this.getMinecraft().getTextureManager().bindTexture(TEXTURES);
final int width = this.guiLeft;
final int height = (this.height - this.ySize) / 2;
this.blit(width, height, 0, 0, this.xSize, this.ySize);
}
}