Jump to content

fred4106

Members
  • Posts

    3
  • Joined

  • Last visited

Converted

  • Gender
    Undisclosed
  • Personal Text
    I am new!

fred4106's Achievements

Tree Puncher

Tree Puncher (2/8)

0

Reputation

  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
×
×
  • Create New...

Important Information

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