Jump to content

SirFroggie

Members
  • Posts

    6
  • Joined

  • Last visited

Converted

  • Gender
    Undisclosed
  • Personal Text
    I am new!

SirFroggie's Achievements

Tree Puncher

Tree Puncher (2/8)

0

Reputation

  1. Thank you very much, that solved the problem!
  2. Thanks for the quick responses GoTo. Yes that seems blatantly obvious that - that is the problem. I have that number set to 5 because I only want my gui to display 5 rows. The chest I am playing with has 24 rows. How do I add the remaining 19 rows, but only display 5?
  3. Alright, a little update. I completely erased my gui and container code and started over. I have ridden myself of the null pointer exception and my gui does finally scroll through the entire container. Which is a plus I suppose. However, now I am facing a couple new problems. First, I can manually place and extract items from the inventory only if there is room within the first 5 rows. If the first 5 rows are completely filled when I try to place an item in the 6th (first slot) the container tries to replace the item I am inserting with the current item in row 1 slot 1. The second problem I am facing is the gui not updating until I log off and then back in. This is an easy fix with a packet handler so I am not too concerned with that issue at the moment. For the first issue, I believe the problems lies in the container --specifically when I am adding the 45 new slots. below is my updated code, I apologize for the mess, but hopefully it's readable. gui: @SideOnly(Side.CLIENT) public class GuiInfinityChest extends GuiContainer { private boolean needsScrollBars = true; private float currentScroll; private boolean isScrolling; private boolean wasClicking; private boolean mouseClicked; private boolean hasScrollBar = true; private List itemList = new ArrayList(); public static TileEntityInfinityChest chestInv; private ContainerInfinityChest containerChest; private int x, y, z; public GuiInfinityChest(InventoryPlayer playerInv, TileEntityInfinityChest chest, int x, int y, int z) { super(new ContainerInfinityChest(playerInv, chest)); this.xSize = 195; this.ySize = 198; this.chestInv = chest; this.allowUserInput = true; this.x = x; this.y = y; this.z = z; } @Override public void initGui() { super.initGui(); int p = 0; ICPacketHandler.sendInfinityGui(p, x, y, z); this.containerChest = ((ContainerInfinityChest)this.inventorySlots); for (int i = 0; i < this.chestInv.getSizeInventory(); ++i) { ItemStack is = this.chestInv.getStackInSlot(i); if (is == null) { } else { } this.itemList.add(is); containerChest.itemList = this.itemList; } } @Override public void updateScreen() { super.updateScreen(); } public void onGuiClosed() { super.onGuiClosed(); } /**public void handleMouseInput() { super.handleMouseInput(); int i = Mouse.getEventDWheel(); if (i != 0 && this.needsScrollBars()) { //int j = ((ContainerInfinityChest)this.inventorySlots).itemList.size() / 9 - 5 + 1; int j = 45; if (i > 0) { i = 1; } if (i < 0) { i = -1; } this.currentScroll = (float)((double)this.currentScroll - (double)i / (double)j); if (this.currentScroll < 0.0F); { this.currentScroll = 0.0F; } if (this.currentScroll > 1.0F) { this.currentScroll = 1.0F; } this.containerChest.scrollTo(this.currentScroll); } }*/ public void drawScreen(int par1, int par2, float par3) { boolean flag = Mouse.isButtonDown(0); int k = this.guiLeft; int l = this.guiTop; int i1 = k + 175; int j1 = l + 18; int k1 = i1 + 12; int l1 = j1 + 90; if (!this.wasClicking && flag && par1 >= i1 && par2 >= j1 && par1 < k1 && par2 < l1) { this.isScrolling = this.needsScrollBars; } if (!flag) { this.isScrolling = false; } this.wasClicking = flag; if (this.isScrolling) { this.currentScroll = ((float)(par2 - j1) - 7.5F) / ((float)(l1 - j1) - 15.0F); if (this.currentScroll < 0.0F) { this.currentScroll = 0.0F; } if (this.currentScroll > 1.0F) { this.currentScroll = 1.0F; } this.containerChest.scrollTo(this.currentScroll); } this.updateScreen(); super.drawScreen(par1, par2, par3); } private boolean needsScrollBars() { if (containerChest.hasMoreThan1PageOfItemsInList()) { this.needsScrollBars = true; return true; } else { this.needsScrollBars = false; return false; } } @Override protected void drawGuiContainerBackgroundLayer(float f, int i, int j) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.renderEngine.func_110577_a(Textures.EntityTileChest); int var5 = (this.width - this.xSize) / 2; int var6 = (this.height - this.ySize) / 2; this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); int i1 = this.guiLeft + 175; int k = this.guiTop + 18; int l = k + 90; if (this.displayScrollBar()) { this.drawTexturedModalRect(i1, k + (int)((float)(l - k - 17) * this.currentScroll), 0,198, 12, 15); } else { this.drawTexturedModalRect(i1, k, 12, 198, 12, 15); } } public boolean displayScrollBar() { return this.hasScrollBar; } public boolean doesGuiPauseGame() { return false; } public static void setInventorySlotContents(int i, ItemStack itemStack) { chestInv.chestContents[i] = itemStack; if (itemStack != null && itemStack.stackSize > chestInv.getInventoryStackLimit()) { itemStack.stackSize = chestInv.getInventoryStackLimit(); } chestInv.onInventoryChanged(); } } container: @SideOnly(Side.CLIENT) public class ContainerInfinityChest extends Container { private TileEntityInfinityChest chestInv; private int numRows; public List itemList = new ArrayList(); public ContainerInfinityChest(InventoryPlayer playerInv, TileEntityInfinityChest tileChest) { tileChest.openChest(); this.chestInv = tileChest; this.numRows = 5; int i = (this.numRows - 4) * 18; int j; int k; for (j = 0; j < this.numRows; ++j) { for (k = 0; k < 9; ++k) { this.addSlotToContainer(new Slot(tileChest, k + j * 9, 9 + k * 18, 18 + j * 18)); //<---- this is where I believe the problem lies, I'm not sure how to fix it } } for (j = 0; j < 3; ++j) { for (k = 0; k < 9; ++k) { this.addSlotToContainer(new Slot(playerInv, k + j * 9 + 9, 9 + k * 18, 98 + j * 18 + i)); } } for (j = 0; j < 9; ++j) { this.addSlotToContainer(new Slot(playerInv, j, 9 + j * 18, 156 + i)); } } public boolean hasMoreThan1PageOfItemsInList() { return this.itemList.size() > 45; } @Override public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int i) { ItemStack itemstack = null; Slot slot = (Slot)this.inventorySlots.get(i); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); if (i < this.numRows * 9) { if (!this.mergeItemStack(itemstack1, this.numRows * 9, this.inventorySlots.size(), true)) { return null; } } else if (!this.mergeItemStack(itemstack1, 0, this.numRows * 9, false)) { return null; } if (itemstack1.stackSize == 0) { slot.putStack((ItemStack)null); } else { slot.onSlotChanged(); } } return itemstack; } @Override public void onContainerClosed(EntityPlayer player) { super.onContainerClosed(player); chestInv.closeChest(); } @Override public boolean canInteractWith(EntityPlayer entityplayer) { return this.chestInv.isUseableByPlayer(entityplayer); } public IInventory getChestInv() { return this.chestInv; } public void scrollTo(float scroll) { int i = this.itemList.size() / 9 - 5 + 1; int j = (int)((double)(scroll * (float)i) + 0.5D); if (j < 0) { j = 0; } for (int k = 0; k < 5; ++k) { for (int l = 0; l < 9; ++l) { int i1 = l + (k + j) * 9; if (i1 >= 0 && i1 < this.itemList.size()) { GuiInfinityChest.setInventorySlotContents(l + k * 9, (ItemStack)this.itemList.get(i1)); } else { GuiInfinityChest.setInventorySlotContents(l + k * 9, (ItemStack)null); } } } } }
  4. Yeah as far as learning java, I have mostly been referring to the java trails, which has been extremely helpful. Here is the crash log as well as my GuiHandler. crash log: 2013-08-30 11:35:44 [iNFO] [sTDOUT] java.lang.NullPointerException 2013-08-30 11:35:44 [iNFO] [sTDOUT] at ic.container.ContainerInfinityChest.scrollTo(ContainerInfinityChest.java:85) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at ic.container.ContainerInfinityChest.<init>(ContainerInfinityChest.java:60) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at ic.handler.ICGuiHandler.getServerGuiElement(ICGuiHandler.java:22) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at cpw.mods.fml.common.network.NetworkRegistry.openRemoteGui(NetworkRegistry.java:308) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at cpw.mods.fml.common.network.FMLNetworkHandler.openGui(FMLNetworkHandler.java:352) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2461) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at ic.block.BlockInfinityChest.onBlockActivated(BlockInfinityChest.java:99) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at net.minecraft.item.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:416) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at net.minecraft.network.NetServerHandler.handlePlace(NetServerHandler.java:554) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at net.minecraft.network.packet.Packet15Place.processPacket(Packet15Place.java:79) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at net.minecraft.network.MemoryConnection.processReadPackets(MemoryConnection.java:89) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at net.minecraft.network.NetServerHandler.networkTick(NetServerHandler.java:141) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at net.minecraft.network.NetworkListenThread.networkTick(NetworkListenThread.java:54) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at net.minecraft.server.integrated.IntegratedServerListenThread.networkTick(IntegratedServerListenThread.java:109) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:689) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:585) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:129) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:482) 2013-08-30 11:35:44 [iNFO] [sTDOUT] at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16) gui handler: public class ICGuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getBlockTileEntity(x, y, z); if (te != null && te instanceof TileEntityInfinityChest) { TileEntityInfinityChest wcte = (TileEntityInfinityChest) te; return new ContainerInfinityChest(player.inventory, wcte); //<------- line 22 is here. } else { return null; } } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getBlockTileEntity(x, y, z); if (te != null && te instanceof TileEntityInfinityChest) { return new GuiInfinityChest(player.inventory, (TileEntityInfinityChest) te); } else return null; } }
  5. Hello everyone, I have come to a brick wall with creating a scrollable gui. I have created a new chest tile entity, and it holds 270 slots. The goal I am trying to achieve is allowing the user to use a scroll bar to navigate the inventory(similar to creative inventory). The problem that I am facing is acquiring the items from the tile entity. I have gone off of ContainerCreative and GuiContainerCreative. However, when I try to access the tile entity's inventory I am receiving a null pointer. I think I understand what I am needing to do to accomplish this, but I have not been successful. I have, however, been able to add all items from the game to my gui- again similar to creative. With using the code I have now all the items in the game appear on my gui and I can successfully remove items. I understand that using InventoryBasic is not what I am needing, I believe that just creates an infinite list. I have commented out my attempt to acquire the chest's inventory. Please note, if it is not obvious, that I am new to java programming. I am just using modding as a way to learn the language. If you have any suggestions I am all ears. Finally, I have attempted to use google to acquire my answer but I have come up short. If you recall a tutorial or another post similar a link to that would suffice. Thank you in advance. Gui Code: package ic.client; import java.util.ArrayList; import java.util.List; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import ic.container.ContainerInfinityChest; import ic.lib.InfiniChestType; import ic.lib.Textures; import ic.tileentity.TileEntityInfinityChest; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.InventoryEffectRenderer; import net.minecraft.client.settings.GameSettings; import net.minecraft.enchantment.EnumEnchantmentType; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryBasic; import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @SideOnly(Side.CLIENT) public class GuiInfinityChest extends InventoryEffectRenderer { private boolean needsScrollBars; private float currentScroll; private boolean isScrolling; private boolean wasClicking; private boolean mouseClicked; private ArrayList invList; private boolean hasScrollBar = true; private static InventoryBasic chestInv = new InventoryBasic("tmp", true, 45); //private static IInventory chestInv; public GuiInfinityChest(IInventory thePlayer, TileEntityInfinityChest chest) { super(new ContainerInfinityChest(thePlayer, chest)); this.xSize = 195; this.ySize = 198; //this.chestInv = chest; this.allowUserInput = true; } public void initGui() { super.initGui(); this.setCurrentInv();//this is resetting the inventory - need to add a if statement Keyboard.enableRepeatEvents(true); } public void onGuiClosed() { super.onGuiClosed(); Keyboard.enableRepeatEvents(false); } public void drawScreen(int par1, int par2, float par3) { boolean flag = Mouse.isButtonDown(0); int k = this.guiLeft; int l = this.guiTop; int i1 = k + 175; int j1 = l + 18; int k1 = i1 + 12; int l1 = j1 + 90; if (!this.wasClicking && flag && par1 >= i1 && par2 >= j1 && par1 < k1 && par2 < l1) { this.isScrolling = this.needsScrollBars; } if (!flag) { this.isScrolling = false; } this.wasClicking = flag; if (this.isScrolling) { this.currentScroll = ((float)(par2 - j1) - 7.5F) / ((float)(l1 - j1) - 15.0F); if (this.currentScroll < 0.0F) { this.currentScroll = 0.0F; } if (this.currentScroll > 1.0F) { this.currentScroll = 1.0F; } ((ContainerInfinityChest)this.inventorySlots).scrollTo(this.currentScroll); } super.drawScreen(par1, par2, par3); } public void handleMouseInput() { super.handleMouseInput(); int i = Mouse.getEventDWheel(); int m = Mouse.getEventButton(); if (i != 0 && this.needsScrollBars()) { int j = ((ContainerInfinityChest)this.inventorySlots).itemList.size() / 9 - 5 + 1; if (i > 0) i = 1; if (i < 0) i = -1; this.currentScroll = (float)((double)this.currentScroll - (double)i / (double)j); if (this.currentScroll < 0.0F) { this.currentScroll = 0.0F; } if (this.currentScroll > 1.0F) { this.currentScroll = 1.0F; } ((ContainerInfinityChest)this.inventorySlots).scrollTo(this.currentScroll); } } private boolean needsScrollBars() { if (((ContainerInfinityChest)this.inventorySlots).hasMoreThan1PageOfItemsInList()) this.needsScrollBars = true; else this.needsScrollBars = false; return this.needsScrollBars; } private void setCurrentInv() { ContainerInfinityChest containerChest = (ContainerInfinityChest)this.inventorySlots; containerChest.itemList.clear(); Item[] aitem = Item.itemsList; int i = aitem.length; int j; for (j = 0; j < aitem.length; ++j) { Item item = aitem[j]; if (item != null) { item.getSubItems(item.itemID, null, containerChest.itemList); } } } private boolean updateInv() { return true; } @Override protected void drawGuiContainerBackgroundLayer(float f, int i, int j) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.renderEngine.func_110577_a(Textures.EntityTileChest); int var5 = (this.width - this.xSize) / 2; int var6 = (this.height - this.ySize) / 2; this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); int i1 = this.guiLeft + 175; int k = this.guiTop + 18; int l = k + 90; if (this.needsScrollBars) { this.drawTexturedModalRect(i1, k + (int)((float)(l - k - 17) * this.currentScroll), 0,198, 12, 15); } else { this.drawTexturedModalRect(i1, k, 12, 198, 12, 15); } } public boolean displayScrollBar() { return this.hasScrollBar; } public boolean doesGuiPauseGame() { return false; } public static InventoryBasic getInventory() { return chestInv; } } Container Code: package ic.container; import java.util.ArrayList; import java.util.List; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import ic.client.GuiInfinityChest; import ic.lib.InfiniChestType; import ic.tileentity.TileEntityInfinityChest; import net.minecraft.client.gui.inventory.GuiContainerCreative; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryBasic; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; @SideOnly(Side.CLIENT) public class ContainerInfinityChest extends Container { private IInventory chestInv; private int numRows; public List itemList = new ArrayList(); public ContainerInfinityChest(IInventory player, TileEntityInfinityChest chest) { this.chestInv = chest; chest.openChest(); this.numRows = 5; int i = (this.numRows - 4) * 18; int j; int k; for (j = 0; j < this.numRows; ++j) { for (k = 0; k < 9; ++k) { this.addSlotToContainer(new Slot(GuiInfinityChest.getInventory(), k + j * 9, 9 + k * 18, 18 + j * 18)); } } for (j = 0; j < 3; ++j) { for (k = 0; k < 9; ++k) { this.addSlotToContainer(new Slot(player, k + j * 9 + 9, 9 + k * 18, 98 + j * 18 + i)); } } for (j = 0; j < 9; ++j) { this.addSlotToContainer(new Slot(player, j, 9 + j * 18, 156 + i)); } this.scrollTo(0.0F); } public void scrollTo(float par1) { int i = this.itemList.size() / 9 - 5 + 1; int j = (int)((double)(par1 * (float)i) + 0.5D); if (j < 0) { j = 0; } for (int k = 0; k < 5; ++k) { for (int l = 0; l < 9; ++l) { int i1 = l + (k + j) * 9; if (i1 >= 0 && i1 < this.itemList.size()) { GuiInfinityChest.getInventory().setInventorySlotContents(l + k * 9, (ItemStack)this.itemList.get(i1)); } else { GuiInfinityChest.getInventory().setInventorySlotContents(l + k * 9, (ItemStack)null); } } } } public boolean hasMoreThan1PageOfItemsInList() { //System.out.println(itemList.size()); return this.itemList.size() > 45; } @Override public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int i) { ItemStack itemstack = null; Slot slot = (Slot)this.inventorySlots.get(i); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); if (i < this.numRows * 9) { if (!this.mergeItemStack(itemstack1, this.numRows * 9, this.inventorySlots.size(), true)) { return null; } } else if (!this.mergeItemStack(itemstack1, 0, this.numRows * 9, false)) { return null; } if (itemstack1.stackSize == 0) { slot.putStack((ItemStack)null); } else { slot.onSlotChanged(); } } return itemstack; } @Override public void onContainerClosed(EntityPlayer player) { super.onContainerClosed(player); chestInv.closeChest(); } @Override public boolean canInteractWith(EntityPlayer entityplayer) { return chestInv.isUseableByPlayer(entityplayer); } public IInventory getChestInv() { return this.chestInv; } }
  6. Hello everyone, first of all, thank you to everyone who has contributed to this forum... without these contributions I would not have gotten as far as I have with my modding of minecraft. Today I fell into a problem, I'm creating an item similar to Ice, but I'm wanting it to disappear if it is placed inside a different storage container than I select (I have created a cryo-fridge to store it). First, is this possible? If so, a nudge in the right direction would be greatly appreciated! Thank you in advance!
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.