Posted May 2, 201411 yr comment_95849 I have a problem in my gui, where everytime I try to lift items from the gui, it just puts it back in. I just cant pickup items in my gui. Please help, I have been looking for a solution for the past week! I am really sorry but i am new to this forum, and for some reason all the other spoilers are in the main class spoiler MainClass: package ChemistryMod; //Package directory import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; /* * Basic importing */ import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; //Sets Up The Basic Things For The Mod @Mod(modid="ChemMod",name="Chemistry Mod",version="v1") @NetworkMod(clientSideRequired = true, serverSideRequired = false) public class MainClass { //Server Side Stuff @SidedProxy(clientSide = "ChemistryMod.ChemClient", serverSide = "ChemistryMod.ChemProxy") public static ChemProxy proxy; @Instance("ChemMod") public static MainClass instance; //Gui IDs public static final int CombinatorGUIID = 0; // Register Items public static Item GlueBucket = new ChemBucket(20400).setUnlocalizedName("bucket_glue"); public static Item PeriodicTableRecord = new PeriodicTableRecord("ChemMod:POT_record").setUnlocalizedName("Music Disk").setCreativeTab(CreativeTabs.tabMisc); // Register Blocks public static Block CombinatorIdle = new Combinator(2103, false).setUnlocalizedName("CombinatorIdle").setHardness(3.5F); public static Block CombinatorActive = new Combinator(2104, true).setUnlocalizedName("CombinatorActive").setHardness(3.5F); GuiHandler guiHandler = new GuiHandler();//Puts The Gui Handler In A Variable //Registrys Go Into The Constructor public MainClass(){ //Register Blocks GameRegistry.registerBlock(CombinatorIdle, "Combinator Idle"); GameRegistry.registerBlock(CombinatorActive, "Combinator Active"); GameRegistry.registerTileEntity(TileEntityCombinator.class, "tileEntityCombinator"); NetworkRegistry.instance().registerGuiHandler(this, guiHandler);//Registers The GUI Handler Into The Game LanguageRegistry.addName(CombinatorIdle, "Combinator"); } } [/spoiler] GuiHandler: package ChemistryMod; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.network.NetworkRegistry; public class GuiHandler implements IGuiHandler{ @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity entity = world.getBlockTileEntity(x, y, z); if(entity != null){ switch(ID){ case MainClass.CombinatorGUIID: if(entity instanceof TileEntityCombinator){ //The container is the slots return new ContainerCombinator(player.inventory, (TileEntityCombinator) entity); } } } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity entity = world.getBlockTileEntity(x, y, z); if(entity != null){ switch(ID){ case MainClass.CombinatorGUIID: if(entity instanceof TileEntityCombinator){ return new GuiCombinator(player.inventory, (TileEntityCombinator) entity); } } } return null; } }[/spoiler] GuiClass: package ChemistryMod; import org.lwjgl.opengl.GL11; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.minecraft.client.resources.I18n; public class GuiCombinator extends GuiContainer{ public static final ResourceLocation texture = new ResourceLocation("chemmod", "textures/gui/combinator.png"); public TileEntityCombinator combinator; public static String string; public GuiCombinator(InventoryPlayer inventoryPlayer, TileEntityCombinator entity) { super(new ContainerCombinator(inventoryPlayer, entity)); this.combinator = (TileEntityCombinator) entity; this.xSize = 176; this.ySize = 166; } public void drawGuiContainerForegroundLayer(int par1, int par2){ this.fontRenderer.drawString(this.string, this.xSize / 2 - this.fontRenderer.getStringWidth(this.string) / 2, 6, 4210752); this.fontRenderer.drawString(I18n.getString("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } @Override public void drawGuiContainerBackgroundLayer(float f, int i, int j) { GL11.glColor4f(1F, 1F, 1F, 1F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture);; drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); } }[/spoiler] ContainerClass: package ChemistryMod; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.inventory.SlotFurnace; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; public class ContainerCombinator extends Container { //Combinator Speed public int lastfurnaceSpeed = 300; //Start time for this item public int lastcurrentItemBurnTime; //Time left before the thing is mix public int mixTime; private TileEntityCombinator combinator; public ContainerCombinator(InventoryPlayer inventory, TileEntityCombinator tileEntity){ this.addSlotToContainer(new SlotFurnace(inventory.player, tileEntity, 1, 78, 33)); this.addSlotToContainer(new Slot(tileEntity, 2, 14, 17)); this.addSlotToContainer(new Slot(tileEntity, 3, 14, 38)); this.addSlotToContainer(new Slot(tileEntity, 4, 14, 59)); this.addSlotToContainer(new Slot(tileEntity, 5, 149, 17)); this.addSlotToContainer(new Slot(tileEntity, 6, 149, 38)); this.addSlotToContainer(new Slot(tileEntity, 7, 149, 59)); for (int i = 0; i < 3; i++) { for (int k = 0; k < 9; k++) { this.addSlotToContainer(new Slot(inventory, k + i * 9 + 9, 8 + k * 18, 84 + i * 18)); } } for (int j = 0; j < 9; j++) { this.addSlotToContainer(new Slot(inventory, j, 8 + j * 18, 142)); } } public boolean canInteractWith(EntityPlayer entityplayer) { return true; } }[/spoiler] BlockClass: package ChemistryMod; import java.util.Random; import cpw.mods.fml.common.network.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Icon; import net.minecraft.util.MathHelper; import net.minecraft.world.World; public class Combinator extends BlockContainer{ private final boolean isActive; @SideOnly(Side.CLIENT) private Icon iconFront; public Combinator(int id, boolean isActive) { super(id, Material.rock); this.setCreativeTab(CreativeTabs.tabMaterials); this.isActive = isActive; } public void registerIcons(IconRegister par1IconRegister) { this.blockIcon = par1IconRegister.registerIcon("ChemMod:" + "combinator_side"); this.iconFront = par1IconRegister.registerIcon("ChemMod:" + (this.isActive ? "combinator_active_front" : "combinator_idle_front")); } @SideOnly(Side.CLIENT) public Icon getIcon(int side, int metadata){ return side == metadata ? this.iconFront : this.blockIcon; } public int idDropped(int par1, Random random, int par3){ return MainClass.CombinatorIdle.blockID; } public void onBlockAdded(World world, int x, int y, int z){ super.onBlockAdded(world, x, y, z); this.setDefaultDirection(world, x, y, z); } private void setDefaultDirection(World world, int x, int y, int z){ if(!world.isRemote){ int l = world.getBlockId(x, y, z - 1); int il = world.getBlockId(x, y, z + 1); int jl = world.getBlockId(x - 1, y, z); int kl = world.getBlockId(x + 1, y, z); byte b0 = 3; if(Block.opaqueCubeLookup[1] && ! Block.opaqueCubeLookup[il]){ b0 = 3; } if(Block.opaqueCubeLookup[il] && ! Block.opaqueCubeLookup[l]){ b0 = 2; } if(Block.opaqueCubeLookup[kl] && !Block.opaqueCubeLookup[jl]){ b0 = 5; } if(Block.opaqueCubeLookup[jl] && !Block.opaqueCubeLookup[kl]){ b0 = 4; } world.setBlockMetadataWithNotify(x, y, z, b0, 2); } } public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) { par5EntityPlayer.openGui(MainClass.instance, 0, par1World, par2, par3, par4); return true; } @Override public TileEntity createNewTileEntity(World world) { return new TileEntityCombinator(); } public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityLivingBase, ItemStack itemstack){ int l = MathHelper.floor_double((double)(entityLivingBase.rotationYaw * 4.0F / 360.0F)+0.5D) & 3; if(l == 0){ world.setBlockMetadataWithNotify(x, y, z, 2, 2); } if(l == 1){ world.setBlockMetadataWithNotify(x, y, z, 5, 2); } if(l == 2){ world.setBlockMetadataWithNotify(x, y, z, 3, 2); } if(l == 3){ world.setBlockMetadataWithNotify(x, y, z, 4, 2); } if(itemstack.hasDisplayName()){ ((TileEntityCombinator)world.getBlockTileEntity(x, y, z)).setGuiDisplayName(itemstack.getDisplayName()); } } } TileEntity: package ChemistryMod; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; public class TileEntityCombinator extends TileEntity implements ISidedInventory{ private static final ItemStack[] slotsamount = new ItemStack[7]; private static final int[] slots_middle = new int[]{1}; private static final int[] slots_side_1 = new int[]{2, 1}; private static final int[] slots_side_2 = new int[]{2, 1}; private static final int[] slots_side_3 = new int[]{2, 1}; private static final int[] slots_side_4 = new int[]{2, 1}; private static final int[] slots_side_5 = new int[]{2, 1}; private static final int[] slots_side_6 = new int[]{2, 1}; private static final int[][] slots_sides = { slots_side_1, slots_side_2, slots_side_3, slots_side_4, slots_side_5, slots_side_6, slots_middle}; //Combinator Speed public int combinatorSpeed = 300; //Start time for this item public int currentItemBurnTime; //Time left before the thing is mix public int mixTime; public static String customName; private ItemStack[] combinatorContents = new ItemStack[7]; public int getSizeInventory(){ return 7; } private String localizedName; public ItemStack getStackInSlot(int i) { return this.slotsamount[i]; } /** * Removes from an inventory slot (first arg) up to a specified number (second arg) of items and returns them in a * new stack. */ public ItemStack decrStackSize(int i, int j) { if(this.slotsamount[i] != null){ ItemStack itemstack; if(this.slotsamount[i].stackSize <= j){ itemstack = this.slotsamount[i]; this.slotsamount[i] = null; return itemstack; }else{ itemstack = this.slotsamount[i].splitStack(j); if(this.slotsamount[i].stackSize == 0){ this.slotsamount[i] = null; } return itemstack; } } return null; } @Override public ItemStack getStackInSlotOnClosing(int i) { if (this.combinatorContents[i] != null) { ItemStack itemstack = this.combinatorContents[i]; this.combinatorContents[i] = null; return itemstack; } else { return null; } } @Override public void setInventorySlotContents(int i, ItemStack itemstack) { this.combinatorContents[i] = itemstack; if (itemstack != null && itemstack.stackSize > this.getInventoryStackLimit()) { itemstack.stackSize = this.getInventoryStackLimit(); } this.onInventoryChanged(); } @Override public String getInvName() { return this.isInvNameLocalized() ? this.customName : "Combinator"; } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : entityplayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; } @Override public void openChest() { } @Override public void closeChest() { // TODO Auto-generated method stub } @Override public boolean isItemValidForSlot(int i, ItemStack itemstack) { return true; } private boolean isItemBucket(ItemStack itemstack) { return itemstack.itemID == Item.bucketEmpty.itemID; } @Override public int[] getAccessibleSlotsFromSide(int var1) { return slots_middle; } @Override public boolean canInsertItem(int i, ItemStack itemstack, int j) { return this.isItemValidForSlot(i, itemstack); } @Override public boolean canExtractItem(int i, ItemStack itemstack, int j) { return j != 0 || i != 1 || itemstack.itemID == Item.bucketEmpty.itemID; } @Override public boolean isInvNameLocalized() { // TODO Auto-generated method stub return false; } public void setGuiDisplayName(String displayName) { this.localizedName = displayName; } }
May 2, 201411 yr comment_95858 In your container class, you have 7 slots using ids 1-7. You need to use ids 0-6. Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
May 2, 201411 yr Author comment_95870 In your container class, you have 7 slots using ids 1-7. You need to use ids 0-6. I tried that and nothing changed?
May 2, 201411 yr comment_95872 Could you please post the code for the TileEntity? I think your problem is in there. if (user.hasKnowledgeOfJava) { if (user.question.hasCode) { return interpetHelpfulResponse(user.getQuestion()); } else { return "Could you post your code please?"; } } else { return "Learn some freaking Java!"; }
May 2, 201411 yr Author comment_95873 Could you please post the code for the TileEntity? I think your problem is in there. Oh, just added it
May 2, 201411 yr comment_95884 @Override public ItemStack getStackInSlot(int i) { return null; } @Override public ItemStack decrStackSize(int i, int j) { return null; } You need to properly implement those methods to make it work (use TileEntityFurnace.java as a example). Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
May 2, 201411 yr comment_95901 If you read the javadoc for the decrStackSize, you'll see that it handles removing items from slots. Think about it: what would you think happen when you return null for a decreasing stack size method? Exactly, the stack won't be decreased, and thus your frustration about not being able to remove items. Tip: please read Forge's amazing javadoc. It wasn't written just for kicks and giggles, it was meant to be a help.
May 3, 201411 yr Author comment_95930 I have updated my two methods and nothing has changed. I've updated my TileEntity code to show you.
May 3, 201411 yr comment_95997 You have to override several methods of Container. see this tutorial: http://www.minecraftforge.net/wiki/Containers_and_GUIs I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP) II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.
May 3, 201411 yr comment_96062 I made a 1.6.4 mod a little bit ago dealing with simple inventories. This: https://github.com/DiabolusNeil/MoreStorage/tree/master/common/diabolusneil/morestorage should help you greatly. if (user.hasKnowledgeOfJava) { if (user.question.hasCode) { return interpetHelpfulResponse(user.getQuestion()); } else { return "Could you post your code please?"; } } else { return "Learn some freaking Java!"; }
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.