Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

n1ghtk1n9

Members
  • Joined

  • Last visited

Everything posted by n1ghtk1n9

  1. No I mean the Block that I was talking about above
  2. Do I replace the return new BasicGui(player.inventory, (BasicTileEntity) tileEntity) with the thing I suggested? because I can only return one or the other Also, if I wanted to say create a backpack, how on right click with the backpack item, it would open a chest inventory and store the contents in the item, would I only need a IGuiHandler and a GuiContainer, or those 2 and a container? That's the line you need to replace. I haven't done anything with backpack type stuff, but i know what you need: Something with IInventory A GuiContainer class A Container class A GuiHandler (you already got one) Now when I right-click the block, it opens the gui then immediately closes it. Any suggestions?
  3. Do I replace the return new BasicGui(player.inventory, (BasicTileEntity) tileEntity) with the thing I suggested? because I can only return one or the other Also, if I wanted to say create a backpack, how on right click with the backpack item, it would open a chest inventory and store the contents in the item, would I only need a IGuiHandler and a GuiContainer, or those 2 and a container?
  4. So should I do something like return new BasicContainer(player.inventory, (BasicTileEntity) tileEntity); in the getServerGuiElemet method?
  5. I've just started learning modding for Minecraft(have been for 3 days). I'd say I'm close to intermediate when it comes to Java(been programming w/ it for about 8 months constantly). I have been trying to create, basically, a chest, from an outdated tutorial(which also didn't really explain the code). I got all of the error part out of the code(as in there is no red squiggle under the code), and when I click on the block to open it, it quickly displays the GUI, then the game immediately crashes. Sorry if this seems like a "noob" question or anything, I am pretty beginner at this EDIT: Can a mod help me out with this format? It's messing up for me Stack trace: My code: Main Class import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; 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.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid="Basic", name="Basic", version="0.0.1") public class Basic { public static Block basicOre = new BasicBlock(Material.ground); public static Item basicDust = new BasicDust(); public static Block basicContainer = new BasicContainerBlock(Material.rock); @Instance(value = "Basic") public static Basic instance; @SidedProxy(clientSide = "tutorial.basic.ClientProxy", serverSide = "tutorial.basic.CommonProxy") public static CommonProxy proxy; @EventHandler public void preInit(FMLPreInitializationEvent event) { proxy.registerRenderers(); GameRegistry.registerBlock(basicOre, "basicOre"); GameRegistry.registerItem(basicDust, "basicDust"); GameRegistry.registerBlock(basicContainer, ItemBlock.class, "basicContainer"); GameRegistry.registerTileEntity(BasicTileEntity.class, "basicContainer"); NetworkRegistry.INSTANCE.registerGuiHandler(this, new BasicGuiHandler()); } @EventHandler public void load(FMLInitializationEvent event) { } @EventHandler public void postInit(FMLPostInitializationEvent event) { } } BasicContainer import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public class BasicContainer extends Container { protected BasicTileEntity tileEntity; public BasicContainer(InventoryPlayer inventoryPlayer, BasicTileEntity te) { tileEntity = te; for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { addSlotToContainer(new Slot(tileEntity, j + i * 3, 62 + j * 18, 17 + i * 18)); } } bindPlayerInventory(inventoryPlayer); } @Override public boolean canInteractWith(EntityPlayer var1) { return false; } protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) { for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) { addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); } } for(int i = 0; i < 9; i++) { addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 142)); } } //For shift-clicking, without this, it would cause massive errors @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot) { ItemStack stack = null; Slot slotObject = (Slot) inventorySlots.get(slot); //null checks and checks if the item can be stacked (maxStackSize > 1) if(slotObject != null && slotObject.getHasStack()) { ItemStack stackInSlot = slotObject.getStack(); stack = stackInSlot.copy(); //Merges the item into player inventory since its in the tileEntity if(slot < 9) { if(!this.mergeItemStack(stackInSlot, 0, 35, true)) { return null; } //places it into the tileEntity is possible since its in the player inventory } else if(!this.mergeItemStack(stackInSlot, 0, 9, false)) { return null; } if(stackInSlot.stackSize == 0) { slotObject.putStack(null); } else { slotObject.onSlotChanged(); } if(stackInSlot.stackSize == stack.stackSize) { return null; } slotObject.onPickupFromSlot(player, stackInSlot); } return stack; } } BasicContainerBlock import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class BasicContainerBlock extends BlockContainer { protected BasicContainerBlock(Material material) { super(material); setHardness(2.0f); setResistance(5.0f); setBlockName("basicContainer"); setCreativeTab(CreativeTabs.tabDecorations); } @Override public TileEntity createNewTileEntity(World var1, int var2) { return new BasicTileEntity(); } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int metadata, float what, float these, float are) { TileEntity tileEntity = world.getTileEntity(x, y, z); if(tileEntity == null || player.isSneaking()) { return false; } player.openGui(Basic.instance, 0, world, x, y, z); return true; } @Override public void breakBlock(World world, int x, int y, int z, Block block, int par6) { dropItems(world, x, y, z); super.breakBlock(world, x, y, z, block, par6); } private void dropItems(World world, int x, int y, int z) { Random rand = new Random(); TileEntity tileEntity = world.getTileEntity(x, y, z); if(!(tileEntity instanceof IInventory)) { return; } IInventory inventory = (IInventory) tileEntity; for(int i = 0; i < inventory.getSizeInventory(); i++) { ItemStack item = inventory.getStackInSlot(i); if(item != null && item.stackSize > 0) { float rx = rand.nextFloat() * 0.8f + 0.1f; float ry = rand.nextFloat() * 0.8f + 0.1f; float rz = rand.nextFloat() * 0.8f + 0.1f; EntityItem entityItem = new EntityItem(world, x + rx, y + ry, z + rz, new ItemStack(item.getItem(), item.stackSize, item.getItemDamage())); if(item.hasTagCompound()) { entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); } float factor = 0.05f; entityItem.motionX = rand.nextGaussian() * factor; entityItem.motionY = rand.nextGaussian() * factor + 0.2F; entityItem.motionZ = rand.nextGaussian() * factor; world.spawnEntityInWorld(entityItem); item.stackSize = 0; } } } } BasicGui import org.lwjgl.opengl.GL11; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.texture.ITextureObject; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; public class BasicGui extends GuiContainer { public BasicGui(InventoryPlayer inventoryPlayer, BasicTileEntity tileEntity) { super(new BasicContainer(inventoryPlayer, tileEntity)); } @Override protected void drawGuiContainerForegroundLayer(int param1, int param2) { //Draw text and stuff here fontRendererObj.drawString("Basic", 8, 6, 4210752); //params are string, x, y, color fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752); //draws "Inventory } @Override protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); this.mc.renderEngine.bindTexture(new ResourceLocation("basic:textures/gui/basicGui.png")); int x = (width - xSize) /2; int y = (height - ySize) /2; this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize); } } BasicGuiHandler [/size] import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import cpw.mods.fml.common.network.IGuiHandler; public class BasicGuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); if(tileEntity instanceof BasicTileEntity) { return new BasicGui(player.inventory, (BasicTileEntity) tileEntity); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); if(tileEntity instanceof BasicTileEntity) { return new BasicGui(player.inventory, (BasicTileEntity) tileEntity); } return null; } } [/size] BasicTileEntity import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; public class BasicTileEntity extends TileEntity implements IInventory{ public int customField; private ItemStack[] inv; public BasicTileEntity() { inv = new ItemStack[9]; } @Override public void writeToNBT(NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); NBTTagList itemList = new NBTTagList(); for(int i = 0; i < inv.length; i++) { ItemStack stack = inv[i]; if(stack != null) { NBTTagCompound tag = new NBTTagCompound(); tag.setByte("Slot", (byte) i); stack.writeToNBT(tag); itemList.appendTag(tag); } } tagCompound.setTag("Inventory", itemList); } @Override public void readFromNBT(NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); NBTTagList tagList = tagCompound.getTagList("Inventory", 0); for(int i = 0; i < tagList.tagCount(); i++) { NBTTagCompound tag = tagList.getCompoundTagAt(i); byte slot = tag.getByte("Slot"); if(slot >= 0 && slot < inv.length) { inv[slot] = ItemStack.loadItemStackFromNBT(tag); } } } @Override public int getSizeInventory() { return inv.length; } @Override public ItemStack getStackInSlot(int slot) { return inv[slot]; } @Override public ItemStack decrStackSize(int slot, int amt) { ItemStack stack = getStackInSlot(slot); if(stack != null) { if(stack.stackSize <= amt) { setInventorySlotContents(slot, null); } else { stack = stack.splitStack(amt); if(stack.stackSize == 0) { setInventorySlotContents(slot, null); } } } return stack; } @Override public ItemStack getStackInSlotOnClosing(int slot) { ItemStack stack = getStackInSlot(slot); if(stack != null) { setInventorySlotContents(slot, null); } return stack; } @Override public void setInventorySlotContents(int slot, ItemStack stack) { inv[slot] = stack; if(stack != null && stack.stackSize > getInventoryStackLimit()) { stack.stackSize = getInventoryStackLimit(); } } @Override public String getInventoryName() { return "basic.BasicTileEntity"; } @Override public boolean hasCustomInventoryName() { return false; } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer player) { return worldObj.getTileEntity(xCoord, yCoord, zCoord) == this && player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64; } @Override public void openInventory() { } @Override public void closeInventory() { } @Override public boolean isItemValidForSlot(int var1, ItemStack var2) { return false; } }

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.