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.

fred4106

Members
  • Joined

  • Last visited

  1. I am attempting to follow the tutorial http://www.minecraftforge.net/wiki/Containers_and_GUIs here for tileentitys and GUI's without any luck. The two problems i have are that when i run my mod and save then reload the world, my tileentity (tinyBlock) blocks wont save. The other problem is that i cant get GUis to open. When i right click my block (tinyBlock), the java console tells me that "A mod tried to open a gui on the server without being a NetworkMod" Thanks for the help in advance:) Here is my code: MageCraft_Main.java package mageCraft.common; import mageCraft.client.Client_MageCraftProxy; import net.minecraft.src.Block; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; @Mod(modid = "Fred4106_MageCraft", name = "MageCraft", version = "0.1 alpha") @NetworkMod(clientSideRequired = true, serverSideRequired = true) public class MageCraft_Main { @SidedProxy(clientSide = "mageCraft.client.Client_MageCraftProxy", serverSide = "mageCraft.common.Common_MageCraftProxy") public static Common_MageCraftProxy proxy; MageCraftGuiHandler guiHandler = new MageCraftGuiHandler(); //Blocks public static Block veriniteOreBlock; public static Block veriniteIngotBlock; public static Block blockTinyBlock; //rarity public static int veriniteOreRarity = 4; //Items public static Item veriniteChunkItem; public static Item veriniteIngotItem; public static Item veriniteEssenceItem; @Init public void load(FMLInitializationEvent event) { //Textures and other network things //"this" is an instance of the mod class NetworkRegistry.instance().registerGuiHandler(this, guiHandler); proxy.registerRenderThings(); //Blocks veriniteOreBlock = new BlockVeriniteOre(230, 0).setStepSound(Block.soundStoneFootstep).setHardness(3F).setResistance(1.0F).setBlockName("VeriniteOreBlock"); veriniteIngotBlock = new BlockVeriniteIngot(231,1).setStepSound(Block.soundMetalFootstep).setHardness(5F).setResistance(1.0F).setBlockName("VeriniteIngotBlock"); blockTinyBlock = new BlockTiny(232, 1); //Register Blocks GameRegistry.registerBlock(veriniteOreBlock); GameRegistry.registerBlock(veriniteIngotBlock); GameRegistry.registerBlock(blockTinyBlock); LanguageRegistry.addName(veriniteOreBlock, "Verinite Ore"); LanguageRegistry.addName(veriniteIngotBlock, "Verinite Block"); LanguageRegistry.addName(blockTinyBlock, "Test Container"); //Items veriniteChunkItem = new ItemVeriniteChunk(550).setIconIndex(0).setItemName("VeriniteChunkItem"); veriniteIngotItem = new ItemVeriniteIngot(551).setIconIndex(1).setItemName("VeriniteIngotItem"); veriniteEssenceItem = new ItemVeriniteEssence(552).setIconIndex(2).setItemName("VeriniteEssenceItem"); //Register Items LanguageRegistry.addName(veriniteChunkItem, "Verinite Chunk"); LanguageRegistry.addName(veriniteIngotItem, "Verinite Ingot"); LanguageRegistry.addName(veriniteEssenceItem, "Verinite Essence"); //World Generation GameRegistry.registerWorldGenerator(new WorldGen()); //Recipes GameRegistry.addRecipe(new ItemStack(veriniteIngotBlock), new Object[] { "XXX", "X X", "XXX", 'X', veriniteIngotItem }); GameRegistry.addRecipe(new ItemStack(blockTinyBlock), new Object[] { "X ", " ", " ", 'X', veriniteIngotBlock }); //Smelting GameRegistry.addSmelting(veriniteChunkItem.shiftedIndex, new ItemStack(veriniteIngotItem), 0.1F); } } MageCraftGuiHandler.java package mageCraft.common; import net.minecraft.src.*; import cpw.mods.fml.common.network.IGuiHandler; public class MageCraftGuiHandler implements IGuiHandler{ //returns an instance of the Container you made earlier @Override public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { TileEntity tileEntity = world.getBlockTileEntity(x, y, z); if(tileEntity instanceof TileEntityImbuener){ return new ContainerTiny(player.inventory, (TileEntityImbuener) tileEntity); } return null; } //returns an instance of the Gui you made earlier @Override public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { TileEntity tileEntity = world.getBlockTileEntity(x, y, z); if(tileEntity instanceof TileEntityImbuener){ return new GuiTiny(player.inventory, (TileEntityImbuener) tileEntity); } return null; } } TileEntityImbuener.java package mageCraft.common; import net.minecraft.src.*; public class TileEntityImbuener extends TileEntity implements IInventory { private ItemStack[] toInbue; public TileEntityImbuener() { toInbue = new ItemStack[1]; } @Override public int getSizeInventory() { return toInbue.length; } @Override public ItemStack getStackInSlot(int slot) { return toInbue[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) { toInbue[slot] = stack; if (stack != null && stack.stackSize > getInventoryStackLimit()) { stack.stackSize = getInventoryStackLimit(); } } @Override public String getInvName() { // TODO Auto-generated method stub return null; } @Override public int getInventoryStackLimit() { return 64; } @Override public void onInventoryChanged() { // TODO Auto-generated method stub } @Override public boolean isUseableByPlayer(EntityPlayer player) { return worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) == this && player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64; } @Override public void openChest() { // TODO Auto-generated method stub } @Override public void closeChest() { // TODO Auto-generated method stub } @Override public void readFromNBT(NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); NBTTagList tagList = tagCompound.getTagList("Inventory"); for (int i = 0; i < tagList.tagCount(); i++) { NBTTagCompound tag = (NBTTagCompound) tagList.tagAt(i); byte slot = tag.getByte("Slot"); if (slot >= 0 && slot < toInbue.length) { toInbue[slot] = ItemStack.loadItemStackFromNBT(tag); } } } @Override public void writeToNBT(NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); NBTTagList itemList = new NBTTagList(); for (int i = 0; i < toInbue.length; i++) { ItemStack stack = toInbue[i]; if (stack != null) { NBTTagCompound tag = new NBTTagCompound(); tag.setByte("Slot", (byte) i); stack.writeToNBT(tag); itemList.appendTag(tag); } } tagCompound.setTag("Inventory", itemList); } } WorldGen.java package mageCraft.common; import java.util.Random; import net.minecraft.src.IChunkProvider; import net.minecraft.src.World; import net.minecraft.src.WorldGenMinable; import cpw.mods.fml.common.IWorldGenerator; public class WorldGen implements IWorldGenerator { public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) { switch (world.provider.worldType) { case -1: generateNether(world, random, chunkX*16, chunkZ*16); case 0: generateSurface(world, random, chunkX*16, chunkZ*16); } } private void generateSurface(World world, Random random, int blockX, int blockZ) { int Xcoord; int Ycoord; int Zcoord; for(int i = 0; i < MageCraft_Main.veriniteOreRarity; i++) { Xcoord = blockX + random.nextInt(16); Ycoord = random.nextInt(20)+40; Zcoord = blockZ + random.nextInt(16); System.out.println("X: "+Xcoord+" Z: "+Zcoord); (new WorldGenMinable(MageCraft_Main.veriniteOreBlock.blockID, 9)).generate(world, random, Xcoord, Ycoord, Zcoord); } } private void generateNether(World world, Random random, int i, int j) { // TODO Auto-generated method stub } } BlockTiny.java package mageCraft.common; import java.util.Random; import net.minecraft.src.*; public class BlockTiny extends BlockContainer { protected BlockTiny (int id, int spriteIndex) { super(id, spriteIndex, Material.wood); setHardness(2.0F); setResistance(5.0F); setBlockName("BlockTinyBlock"); } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int idk, float what, float these, float are) { TileEntity tileEntity = world.getBlockTileEntity(x, y, z); if (tileEntity == null || player.isSneaking()) { return false; } //opens gui, to be implemented later player.openGui(MageCraft_Main.class, 0, world, x, y, z); return true; } @Override public void breakBlock(World world, int x, int y, int z, int par5, int par6) { dropItems(world, x, y, z); super.breakBlock(world, x, y, z, par5, par6); } private void dropItems(World world, int x, int y, int z){ Random rand = new Random(); TileEntity tileEntity = world.getBlockTileEntity(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.itemID, item.stackSize, item.getItemDamage())); if (item.hasTagCompound()) { entityItem.item.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; } } } @Override public TileEntity createNewTileEntity(World world) { return new TileEntityImbuener(); } } BlockVeriniteIngot.java package mageCraft.common; import net.minecraft.src.Block; import net.minecraft.src.CreativeTabs; import net.minecraft.src.Material; public class BlockVeriniteIngot extends Block { public BlockVeriniteIngot(int par1, int par2) { super(par1, par2, Material.iron); this.setCreativeTab(CreativeTabs.tabBlock); } public String getTextureFile() { return "/MageCraft_Resources/BlockTextureSheet.png"; } } BlockVeriniteOre.java package mageCraft.common; import java.util.Random; import net.minecraft.src.CreativeTabs; import net.minecraft.src.Material; import net.minecraft.src.Block; public class BlockVeriniteOre extends Block { private int whatToDrop; public BlockVeriniteOre(int par1, int par2) { super(par1, par2, Material.rock); this.setCreativeTab(CreativeTabs.tabBlock); } public String getTextureFile() { return "/MageCraft_Resources/BlockTextureSheet.png"; } public int idDropped(int par1, Random par2Random, int par3) { return whatToDrop; } public int quantityDropped(Random par1Random) { if((par1Random.nextInt(10)+1) > 3) { whatToDrop = MageCraft_Main.veriniteEssenceItem.shiftedIndex; return par1Random.nextInt(+1; } else { whatToDrop = MageCraft_Main.veriniteChunkItem.shiftedIndex; return 1; } } } Common_MageCraftProxy.java package mageCraft.common; public class Common_MageCraftProxy { public void registerRenderThings() { } } ContainerTiny.java package mageCraft.common; import net.minecraft.src.*; public class ContainerTiny extends Container { protected TileEntityImbuener tileEntity; public ContainerTiny (InventoryPlayer inventoryPlayer,TileEntityImbuener te){ tileEntity = te; System.out.println("Created container"); //the Slot constructor takes the IInventory and the slot number in that it binds to //and the x-y coordinates it resides on-screen addSlotToContainer(new Slot(tileEntity, 0, 76, 37)); //commonly used vanilla code that adds the player's inventory bindPlayerInventory(inventoryPlayer); } @Override public boolean canInteractWith(EntityPlayer player) { return tileEntity.isUseableByPlayer(player); } 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)); } } @Override public ItemStack transferStackInSlot(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 == 0) { if (!mergeItemStack(stackInSlot, 1, inventorySlots.size(), true)) { return null; } //places it into the tileEntity is possible since its in the player inventory } else if (!mergeItemStack(stackInSlot, 0, 1, false)) { return null; } if (stackInSlot.stackSize == 0) { slotObject.putStack(null); } else { slotObject.onSlotChanged(); } } return stack; } } GuiTiny.java package mageCraft.common; import net.minecraft.src.*; import org.lwjgl.opengl.GL11; public class GuiTiny extends GuiContainer { public GuiTiny (InventoryPlayer inventoryPlayer, TileEntityImbuener tileEntity) { //the container is instantiated and passed to the superclass for handling super(new ContainerTiny(inventoryPlayer, tileEntity)); } @Override protected void drawGuiContainerForegroundLayer() { //draw text and stuff here //the parameters for drawString are: string, x, y, color fontRenderer.drawString("Tiny", 8, 6, 4210752); //draws "Inventory" or your regional equivalent fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752); } @Override protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { //draw your Gui here, only thing you need to change is the path int texture = mc.renderEngine.getTexture("/your/texture/path/here.png"); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.renderEngine.bindTexture(texture); int x = (width - xSize) / 2; int y = (height - ySize) / 2; this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize); } } ItemVeriniteChunk.java package mageCraft.common; import net.minecraft.src.CreativeTabs; import net.minecraft.src.Item; public class ItemVeriniteChunk extends Item { public ItemVeriniteChunk(int par1) { super(par1); maxStackSize = 64; this.setTabToDisplayOn(CreativeTabs.tabMaterials); } public String getTextureFile() { return "/MageCraft_Resources/ItemTextureSheet.png"; } } ItemVeriniteEssence.java package mageCraft.common; import net.minecraft.src.CreativeTabs; import net.minecraft.src.Item; public class ItemVeriniteEssence extends Item{ public ItemVeriniteEssence(int par1) { super(par1); maxStackSize = 64; this.setTabToDisplayOn(CreativeTabs.tabMaterials); } public String getTextureFile() { return "/MageCraft_Resources/ItemTextureSheet.png"; } } ItemVeriniteIngot.java package mageCraft.common; import net.minecraft.src.CreativeTabs; import net.minecraft.src.Item; public class ItemVeriniteIngot extends Item{ public ItemVeriniteIngot(int par1) { super(par1); maxStackSize = 64; this.setTabToDisplayOn(CreativeTabs.tabMaterials); } public String getTextureFile() { return "/MageCraft_Resources/ItemTextureSheet.png"; } } Client_MageCraftProxy.java package mageCraft.client; import mageCraft.common.Common_MageCraftProxy; import net.minecraftforge.client.MinecraftForgeClient; public class Client_MageCraftProxy extends Common_MageCraftProxy { @Override public void registerRenderThings() { MinecraftForgeClient.preloadTexture("/MageCraft_Resources/BlockTextureSheet.png"); MinecraftForgeClient.preloadTexture("/MageCraft_Resources/ItemTextureSheet.png"); } } Thanks for the help.
  2. Could not figure out how to edit the post. Please note that i also tried running updatemcp.cmd before running mcp/forge/install.cmd Thanks
  3. Hey, So i tried following several different tutorials to use mcp to make a forge compatible mod. I'm on windows xp if that makes a difference. The steps i did in order: Download and extract mcp put the 100% clean bin and resource folders in the mcp/jars folder download the latest forge src and extract it in the mcp folder it creates a mcp/forge folder go into the mcp/forge folder and run install.cmd It runs for a while and then comes up with several errors 18:45:50 - !! Updates available. Please run updatemcp to get them. !! 18:47:41 - !! renaming disabled !! 18:47:41 - !! Missing server jar file. Aborting !! 18:48:25 - '"C:\Program Files\Java\jdk1.6.0\bin\javac" -Xlint:-options -deprecation -g -source 1.6 -target 1.6 -...' failed : 1 18:48:25 - 18:48:25 - == ERRORS FOUND == 18:48:25 - 18:48:25 - src\minecraft\net\minecraft\src\RenderBlocks.java:3209: missing return statement 18:48:25 - } 18:48:25 - ^ 18:48:25 - 18:48:25 - src\minecraft\net\minecraft\src\ModLoader.java:387: type parameters of <T>T cannot be determined; no unique maximal instance exists for type variable T with upper bounds T,java.lang.Object 18:48:25 - return ReflectionHelper.getPrivateValue(instanceclass, instance, fieldindex); 18:48:25 - ^ 18:48:25 - 18:48:25 - src\minecraft\net\minecraft\src\ModLoader.java:401: type parameters of <T>T cannot be determined; no unique maximal instance exists for type variable T with upper bounds T,java.lang.Object 18:48:25 - return ReflectionHelper.getPrivateValue(instanceclass, instance, field); 18:48:25 - ^ 18:48:25 - 18:48:25 - 3 errors 18:48:25 - ================== 18:48:25 - 18:48:25 - Client recompile failed, correct source then rerun updatemd5 18:48:25 - !! Can not find server sources, try decompiling !! If someone can help me it would be much appreciated. Thanks

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.