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

    • Hey man,    i have only been modding Minecraft for a few days but maybe I can help you. First of all make sure to follow every step of Kaupenjoe's tutorial, I found it to been very helpful and complete. The game uses the raw translation key for the item (in your case "item.testmod.alexandrite") if it can't find the correct lang file. Make sure it's name is "en_us.json" and it is saved under "ressources" -> "assets" -> "testmod".
    • whenever I try to get this item to render into the game it appears with the not texture purple and black squares and calls itself by the lang translation file path instead of the name i gave it.   { "item.testmod.alexandrite": "Alexandrite" } this is the lang json file package net.Hurst.testmod.item; import net.Hurst.testmod.TestMod; import net.minecraft.world.item.Item; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; public class ModItems { public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, TestMod.MOD_ID); public static final RegistryObject<Item> ALEXANDRITE = ITEMS.register("alexandrite", () -> new Item(new Item.Properties())); public static void register(IEventBus eventBus){ ITEMS.register(eventBus); } } this is my ModItems.java file package net.Hurst.testmod; import com.mojang.logging.LogUtils; import net.Hurst.testmod.item.ModItems; import net.minecraft.world.item.CreativeModeTabs; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import org.slf4j.Logger; // The value here should match an entry in the META-INF/mods.toml file @Mod(TestMod.MOD_ID) public class TestMod { public static final String MOD_ID = "testmod"; private static final Logger LOGGER = LogUtils.getLogger(); public TestMod() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); modEventBus.addListener(this::commonSetup); ModItems.register(modEventBus); MinecraftForge.EVENT_BUS.register(this); modEventBus.addListener(this::addCreative); ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, Config.SPEC); } private void commonSetup(final FMLCommonSetupEvent event) { } // Add the example block item to the building blocks tab private void addCreative(BuildCreativeModeTabContentsEvent event) { if(event.getTabKey() == CreativeModeTabs.INGREDIENTS){ event.accept(ModItems.ALEXANDRITE); } } // You can use SubscribeEvent and let the Event Bus discover methods to call @SubscribeEvent public void onServerStarting(ServerStartingEvent event) { } // You can use EventBusSubscriber to automatically register all static methods in the class annotated with @SubscribeEvent @Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public static class ClientModEvents { @SubscribeEvent public static void onClientSetup(FMLClientSetupEvent event) { } } } this is my TestMod.java file { "parent": "minecraft:item/generated", "textures": { "layer0": "testmod:item/generated" } } this is my model file for the item. I am using intellij 2025.1.2 with fdk 1.21 and java 21 I would appreciate the help.
    • Also remove VS Create Armor, createbigcannons and The Factory Must Grow
    • Add the latest.log (logs-folder) with sites like https://mclo.gs/ and paste the link to it here  
  • Topics

×
×
  • Create New...

Important Information

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