Jump to content

Recommended Posts

Posted

Okay Im trying to save the items in container item based gui. This is what ive got so far but I cant seem to get it to work:

 

ItemBagpackInventory(Ive written some comments on some bits which I think is the problem

 

  Reveal hidden contents

 

 

Container Bagpack:

 

  Reveal hidden contents

 

 

GuBagpack:

package simplecamping;

import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.ResourceLocation;

import org.lwjgl.opengl.GL11;

import cpw.mods.fml.client.FMLClientHandler;

public class GuiBagpack extends GuiContainer
{
    public ItemBagpackInventory bagpack;

    public GuiBagpack(InventoryPlayer par1InventoryPlayer, ItemBagpackInventory bgInv)
    {
        super(new ContainerBagpack(par1InventoryPlayer, bgInv));
        this.bagpack = bgInv;
    }

    /**
     * Draw the foreground layer for the GuiContainer (everything in front of the items)
     */
    protected void drawGuiContainerForegroundLayer(int par1, int par2)
    {
        String s = this.bagpack.isInvNameLocalized() ? this.bagpack.getInvName() : I18n.func_135053_a(this.bagpack.getInvName());
        this.fontRenderer.drawString(s,  8, 6, 4210752);
        this.fontRenderer.drawString(I18n.func_135053_a("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
    }

    /**
     * Draw the background layer for the GuiContainer (everything behind the items)
     */
    protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
    {
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
	FMLClientHandler.instance().getClient().renderEngine.func_110577_a(new ResourceLocation(Strings.MOD_ID, "/textures/gui/bagpack.png"));
        int k = this.guiLeft;
	int l = this.guiTop;
	this.drawTexturedModalRect(k, l, 0, 0, 256, 256);
    }
}

 

GuiHandler:

 

  Reveal hidden contents

 

  • Replies 51
  • Created
  • Last Reply

Top Posters In This Topic

Posted

You can't use an item like you would a tile entity (which is what you're doing as you've implemented IInventory) since items are static. Everything will need to be written to the ItemStack's NBTTagCompound.

Posted

@Guff

It doesn't matter where you implement IInventory. TileEntity is only one of the possible implementation.

 

@Lua

You only need to call

 

writeToNBT(stack.getTagCompound());//To save

readFromNBT(stack.getTagCompound());//To load

 

Posted

@GotoLink Okay this is what i tried and it didnt work:

 

@Override
public void openChest()
{
	NBTTagCompound compound = new NBTTagCompound();
	ItemStack stack = ItemStack.loadItemStackFromNBT(compound);
	if(bagpack.hasTagCompound())
	{
		System.out.println("hastag");//never gets printed
		//readFromNBT(bagpack.getTagCompound());
		readFromNBT(stack.getTagCompound());
	}
}

@Override
public void closeChest()
{
	NBTTagCompound compound = new NBTTagCompound();
	ItemStack stack = ItemStack.loadItemStackFromNBT(compound);
		System.out.println("writing without tag compound"); //Prints all the time, even after its set and it should be false
		//bagpack.setTagCompound(new NBTTagCompound());
		if(stack != null)
		{
		writeToNBT(stack.getTagCompound());
		}
}

Posted

No, those methods don't give you the ItemStack as a variable.

 

Use your code inside a method which gives you the player or item in your container class or item.

If necessary, send packets from your gui.

Posted

I have no idea, I know most people dont work like this, but can some one just give me the code? Ive tried to do myself but no avail

Posted

I stand corrected, I didn't read all of your code. This should work :

@Override
public void openChest()
{
		if(bagpack.hasTagCompound())
	 {
  			readFromNBT(bagpack.getTagCompound());//Bag pack has some info for the inventory
	 }
                else
                {
                        bagpack.setTagCompound(writeToNBT(new NBTTagCompound()));//this is a "new" bagpack
                }
}

@Override
public void closeChest()
{
	if(! bagpack.hasTagCompound())
	 {
                        //Should never be reached, since done when opening the first time
		 bagpack.setTagCompound(writeToNBT(new NBTTagCompound()));
	}
                else
                {//We made changes to the inventory, save them
	        bagpack.setTagCompound(writeToNBT(bagpack.getTagCompound()));
                }

}

Posted
  On 8/19/2013 at 2:02 PM, Lua said:

I give up.

this, its someting simple but you "give up" ... oh well one less mod on the market...

how to debug 101:http://www.minecraftforge.net/wiki/Debug_101

-hydroflame, author of the forge revolution-

Posted
  On 8/19/2013 at 2:19 PM, hydroflame said:

  Quote

I give up.

this, its someting simple but you "give up" ... oh well one less mod on the market...

I couldnt figure out what was wrong w/ my saving code and neither could anyone else it seemed

Posted

well what you are trying to do is obviously possible, did you even debug at all?? try to check where it was saving/not saving

 

System.out.println("text");

System.out.println("the value of derp is: "+derp);

 

or even

 

try{

throw new Exception("weird thing happenning here !");

}catch(Exception e{

e.printStackTrace();

}

 

if you really need ?

 

i dont knwo just by looking at it whats wrong, but i know what you are trying to do is not impossible

how to debug 101:http://www.minecraftforge.net/wiki/Debug_101

-hydroflame, author of the forge revolution-

Posted

Yes I have

@Override
public void openChest()
{
	if(bagpack.hasTagCompound())
	{
		System.out.println("hastag");//never gets printed
		readFromNBT(bagpack.getTagCompound());
	}
}

@Override
public void closeChest()
{
	if(! bagpack.hasTagCompound())
	{

		System.out.println("writing without tag compound"); //Prints all the time, even after its set and it should be false
		bagpack.setTagCompound(new NBTTagCompound());
	}

	NBTTagCompound tag = bagpack.getTagCompound();
	writeToNBT(tag);

}

 

It seems that the tag never gets properly because it always seems to get set everytime and always goes through the if statement. But the hasCompound never gets printed

Posted

public void openChest()
{
	if(bagpack.hasTagCompound())
	{
		System.out.println("hastag");//never gets printed
		readFromNBT(bagpack.getTagCompound());
	}
}

well this code alone will not make bagpack magicly have a tagCompount

 

you should have a else then set a new tag compound like gotolink said in his post

 

public void openChest()
{
	if(bagpack.hasTagCompound())
	{
		System.out.println("hastag");//never gets printed
		readFromNBT(bagpack.getTagCompound());
	}else{
                    bagpack.stackTagCompound = new NBTTagCompound();//im assuming that bagpack is an instance of ItemStack .. ?? ?
                }
}

how to debug 101:http://www.minecraftforge.net/wiki/Debug_101

-hydroflame, author of the forge revolution-

Posted

Okay, after some more testing, it seems that it writes to nbt when opened to according to the console. And its trying to read the nbt but it looks like nothing is there. Also yeah bagpack is an instance of itemstack

Posted

after setting the new nbt, did you write anythign to it? because if not thats kindof normal

 

public class vec3{
public float x = 0, y = 0, z = 0;
}


in program:
vec3 = new vec3();
println(vec3.x);

"oh its 0 :\"
"yeah thats normal"

 

or are you legitimatelly writing to it and its not apparing :P

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




  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Update ColdSweat to the latest build: https://www.curseforge.com/minecraft/mc-mods/cold-sweat/files/6450271
    • Veuillez lire la FAQ (le lien est en haut de la page) et les journaux de publication tels que décrits ici. Cela aidera à déterminer ce qui se passe. Ce sont des forums anglais, j'ai utilisé un traducteur pour essayer de vous aider, j'espère que ça se retrouve bien.
    • I tried adding the Create (6.0.4) mod to my modpack which causes it to crash before it finishes loading. I tried removing the mod Cold Sweat because the error said it failed to load due to something in Create but when I removed it, it kept crashing; and I also tried downgrading Create, but nothing helped. I assume there's an incompatible mod that's causing Create to not load correctly, but I can't find it. launcher_log.txt: https://mclo.gs/kn5Qkk2 debug.log: https://mclo.gs/zIKoAaB crash report: https://mclo.gs/j86C10Y The part of debug.log that I think is the crash (after Create mod already loaded incorrectly): [02May2025 14:52:36.813] [Worker-ResourceReload-2/ERROR] [net.minecraftforge.fml.javafmlmod.FMLModContainer/]: Exception caught during firing event: com/simibubi/create/content/redstone/displayLink/DisplayBehaviour Index: 3 Listeners: 0: NORMAL 1: net.minecraftforge.eventbus.EventBus$$Lambda$1770/0x00000008009bc8a0@70223c71 2: ASM: class com.momosoftworks.coldsweat.core.event.PotionRecipes register(Lnet/minecraftforge/fml/event/lifecycle/FMLCommonSetupEvent;)V 3: ASM: class com.momosoftworks.coldsweat.compat.CompatManager$ModEvents setupModEvents(Lnet/minecraftforge/fml/event/lifecycle/FMLCommonSetupEvent;)V java.lang.NoClassDefFoundError: com/simibubi/create/content/redstone/displayLink/DisplayBehaviour at TRANSFORMER/cold_sweat@2.3.12/com.momosoftworks.coldsweat.compat.CompatManager$ModEvents.setupModEvents(CompatManager.java:501) at TRANSFORMER/cold_sweat@2.3.12/com.momosoftworks.coldsweat.compat.__ModEvents_setupModEvents_FMLCommonSetupEvent.invoke(.dynamic) at MC-BOOTSTRAP/net.minecraftforge.eventbus/net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:73) at MC-BOOTSTRAP/net.minecraftforge.eventbus/net.minecraftforge.eventbus.EventBus.post(EventBus.java:315) at MC-BOOTSTRAP/net.minecraftforge.eventbus/net.minecraftforge.eventbus.EventBus.post(EventBus.java:296) at LAYER PLUGIN/javafmllanguage@1.20.1-47.4.0/net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:121) at LAYER PLUGIN/fmlcore@1.20.1-47.4.0/net.minecraftforge.fml.ModContainer.lambda$buildTransitionHandler$5(ModContainer.java:127) at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) at java.base/java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1796) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) Caused by: java.lang.ClassNotFoundException: com.simibubi.create.content.redstone.displayLink.DisplayBehaviour at cpw.mods.securejarhandler/cpw.mods.cl.ModuleClassLoader.loadClass(ModuleClassLoader.java:141) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ... 14 more [02May2025 14:52:36.972] [Worker-ResourceReload-2/ERROR] [net.minecraftforge.fml.javafmlmod.FMLModContainer/LOADING]: Caught exception during event FMLCommonSetupEvent dispatch for modid cold_sweat java.lang.NoClassDefFoundError: com/simibubi/create/content/redstone/displayLink/DisplayBehaviour at com.momosoftworks.coldsweat.compat.CompatManager$ModEvents.setupModEvents(CompatManager.java:501) ~[ColdSweat-2.3.12.jar%23537!/:2.3.12] at com.momosoftworks.coldsweat.compat.__ModEvents_setupModEvents_FMLCommonSetupEvent.invoke(.dynamic) ~[ColdSweat-2.3.12.jar%23537!/:2.3.12] at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:73) ~[eventbus-6.0.5.jar%2387!/:?] at net.minecraftforge.eventbus.EventBus.post(EventBus.java:315) ~[eventbus-6.0.5.jar%2387!/:?] at net.minecraftforge.eventbus.EventBus.post(EventBus.java:296) ~[eventbus-6.0.5.jar%2387!/:?] at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:121) ~[javafmllanguage-1.20.1-47.4.0.jar%23784!/:?] at net.minecraftforge.fml.ModContainer.lambda$buildTransitionHandler$5(ModContainer.java:127) ~[fmlcore-1.20.1-47.4.0.jar%23783!/:?] at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?] at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1796) ~[?:?] at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[?:?] at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) ~[?:?] at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[?:?] at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[?:?] at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[?:?] Caused by: java.lang.ClassNotFoundException: com.simibubi.create.content.redstone.displayLink.DisplayBehaviour at cpw.mods.cl.ModuleClassLoader.loadClass(ModuleClassLoader.java:141) ~[securejarhandler-2.1.10.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[?:?] ... 14 more
    • You would probably be better served looking for support where NeoForge support is given, I believe their discord server.
    • If you copy and paste the java commandline into the terminal, what happens? as in trying to launch it without using the .bat file.
  • Topics

×
×
  • Create New...

Important Information

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