Everything posted by StefanDeSterke
-
[1.14.4] [SOLVED] Gui Slots Behave Weird
I kind of know, but then I need to use NetworkHooks.openGui(), and I need an INamedContainerProvider, and I don't know how to use that and where to implement that.
-
[1.14.4] [SOLVED] Gui Slots Behave Weird
Changed Container Class: private final IItemHandler 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 ItemStackHandler(3); this.world = worldIn; this.blockPos = pos; this.addSlot(new SlotItemHandler(this.inventory, 0, 39, 35)); this.addSlot(new SlotItemHandler(this.inventory, 1, 57, 35)); this.addSlot(new SlotItemHandler(this.inventory, 2, 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)); } } I open the GUI in my custom Stone Furnace Class in the onBlockActivated method: @SuppressWarnings("deprecation") @Override public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { Minecraft.getInstance().displayGuiScreen(new StoneFurnaceGUI(new ContainerFurnace(guiId, player.inventory, worldIn, pos), player.inventory, new StringTextComponent("Stone Furnace"))); return super.onBlockActivated(state, worldIn, pos, player, handIn, hit); }
-
[1.14.4] [SOLVED] Gui Slots Behave Weird
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); } }
IPS spam blocked by CleanTalk.