August 19, 201312 yr can i see that ? (the code) also dont be afraid to debug a lot, println a lot maybe you cna stpo something weird how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 19, 201312 yr Author can i see that ? (the code) also dont be afraid to debug a lot, println a lot maybe you cna stpo something weird Wait I thought you meant in game, like "You actually put something in the bag didnt you?" anyway heres the code: @Override public void openChest() { if(bagpack.hasTagCompound()) { readFromNBT(bagpack.getTagCompound());//Bag pack has some info for the inventory System.out.println("call3"); } else { bagpack.stackTagCompound = new NBTTagCompound(); System.out.println("call2"); } } @Override public void closeChest() { if(! bagpack.hasTagCompound()) { //Should never be reached, since done when opening the first time bagpack.setTagCompound(writeToNBT(new NBTTagCompound())); System.out.println("call"); } else {//We made changes to the inventory, save them System.out.println("call4"); writeToNBT(bagpack.getTagCompound()); }
August 19, 201312 yr well ok so at some point you will set a new nbt to yout bagpack ... but nothign is ever set inside that :\ so what you have to do is something like this: ItemStack toStore ItemStack bagpack; toStore.writeToNBT(bagpack.getTagCompound()); that will take the first itemStack and write it inside the tagCompound of the bagpack. to read it from the nbt: ItemStack s; s.readFromNBT(bagpack.getTagCompound()); if you are dealing with a IInventory: utility method that go in your IInventory: public NBTTagList writeToNBT(NBTTagList par1NBTTagList) { int i; NBTTagCompound nbttagcompound; for (i = 0; i < this.equip.length; ++i) { if (this.equip[i] != null) { nbttagcompound = new NBTTagCompound(); nbttagcompound.setByte("Slot", (byte)(i)); this.equip[i].writeToNBT(nbttagcompound); par1NBTTagList.appendTag(nbttagcompound); } } return par1NBTTagList; } /** * Reads from the given tag list and fills the slots in the inventory with the correct items. */ public void readFromNBT(NBTTagList par1NBTTagList) { this.equip = new ItemStack[getSizeInventory()]; for (int i = 0; i < par1NBTTagList.tagCount(); ++i) { NBTTagCompound nbttagcompound = (NBTTagCompound)par1NBTTagList.tagAt(i); int j = nbttagcompound.getByte("Slot") & 255; ItemStack itemstack = ItemStack.loadItemStackFromNBT(nbttagcompound); if (itemstack != null) { if (j >= 0 && j < this.equip.length) { this.equip[j] = itemstack; } } } } now if you have a whole inventory: ItemStack bagpack; MyInventory inv; NBTTagList theInventory = new NBTTagList(); inv.writeToNbt(theInventory); bagpack.getTagCompound().setTag("theBagpackInventory", theInventory); and to read: ItemStack bagpack; MyInventory inv; NBTTagList theInventory = (NBTTagList)bagpack.getTagCompound.getTag("theBagpackInventory"); inv.readFromNbt(theInventory); //here inv contain the original inventory how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 19, 201312 yr well you have to place it where it makes sens, obviously this probably wont go inside a new mob you create. whats the goal of the bagpack, to store 1 item ? 20 item ? 500 items? i imagine you want the content to be updated in the bagpack when you close the gui, the Container class has a onContainerClosed method, might be a good idea to save there, maybe you should be loading when the container opens ? how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 19, 201312 yr Author Stores 27 items. " the Container class has a onContainerClosed method, might be a good idea to save there, maybe you should be loading when the container opens ?" Thats what Im currently doing. I meant which bits should I replace w/ your code
August 19, 201312 yr well i guess you could place that inside closechest suince your onContainerClosed calls this anyway, but basicly anywhere where it should make sens to do it. as long as it works how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 19, 201312 yr You are not using the code i gave you :'( You can add println for sure, but at least try it... Anyway, hydroflame suggestion to rework a bit the readFromNBT/ writeToNBT part, I guess is a valid point.
August 19, 201312 yr i have no idea do you understand what the code me n gotolink are talking about ? do you understand what it does ? if not which part are you still confused with ? how are your java skills? beginner intermediate advance ? because maybe its just a question of practice to know what to place where did you try anything ? println to see what placing the code at certain place does ? how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 19, 201312 yr Author i have no idea do you understand what the code me n gotolink are talking about ? do you understand what it does ? if not which part are you still confused with ? how are your java skills? beginner intermediate advance ? because maybe its just a question of practice to know what to place where did you try anything ? println to see what placing the code at certain place does ? "do you understand what the code me n gotolink are talking about ? do you understand what it does ?" Not enough to be able to implement it correctly "how are your java skills? beginner intermediate advance ?" Im pretty familiar w/ all the common stuff, so sorta of intermediate/high beginner "if not which part are you still confused with ?" Just where to put it really aha
August 19, 201312 yr put it in closeChest -> see what it does -> debug how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 19, 201312 yr well onChestClose would be the whole "save" part how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 19, 201312 yr Author You gave me a ton of code but I dont know what you want me to put in closeChest out of that section
August 19, 201312 yr well ok so at some point you will set a new nbt to yout bagpack ... but nothign is ever set inside that :\ so what you have to do is something like this: Code: [select] ItemStack toStore ItemStack bagpack; toStore.writeToNBT(bagpack.getTagCompound()); that will take the first itemStack and write it inside the tagCompound of the bagpack. how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 19, 201312 yr Author I already am if it dosent have a tagCompound though? if(! bagpack.hasTagCompound()) { bagpack.setTagCompound(writeToNBT(new NBTTagCompound())); System.out.println("call"); } else { System.out.println("call4"); writeToNBT(bagpack.getTagCompound()); }
August 19, 201312 yr if(!bagpack.hasTagCompound()){ bagpack.stackTagCompoud = new NBtTagCompound(); } toStore.writeToNBT(bagpack.getTagCompound()); the first if create the compound if needed, then you can write for sure as you KNOW theres one how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 19, 201312 yr to what ? how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 19, 201312 yr Author toStore.writeToNBT(bagpack.getTagCompound()); This line probably cause it didnt have anything to write but I cant write cos I cant access it
August 19, 201312 yr whats toStore in your case ? how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 19, 201312 yr Author o, its because tostore equals null.. But how can you get an instance of the full class but ensuring your variable is initialized? and the itemstack constructor is private
August 19, 201312 yr itemstack constructor isnt private, toStore was meant to be replaced with the itemstack you want to save :\ how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.