Jump to content

Recommended Posts

Posted

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-

  • Replies 51
  • Created
  • Last Reply

Top Posters In This Topic

Posted

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

Posted

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-

Posted

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-

Posted

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

Posted

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-

Posted

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.

Posted
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-

Posted

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

Posted

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-

Posted

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

Posted

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-

Posted

toStore.writeToNBT(bagpack.getTagCompound());

This line probably cause it didnt have anything to write but I cant write cos I cant access it

Posted

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

Posted

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.

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.