Jump to content

Saving data w/ items [Solved]


Lua

Recommended Posts

  • Replies 51
  • Created
  • Last Reply

Top Posters In This Topic

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());
	}

Link to comment
Share on other sites

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-

Link to comment
Share on other sites

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-

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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-

Link to comment
Share on other sites

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-

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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-

Link to comment
Share on other sites

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());
	}

Link to comment
Share on other sites

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-

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements




×
×
  • Create New...

Important Information

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