Zzyxz
Forge Modder-
Posts
33 -
Joined
-
Last visited
Everything posted by Zzyxz
-
setDefaultDirection: if u do something like a furnace. there is already a furnace in the game. just look at the code and copy it. mess with it around until u know how it works. taken from the BlockFurnace.class: private void func_149930_e(World p_149930_1_, int p_149930_2_, int p_149930_3_, int p_149930_4_) { if (!p_149930_1_.isRemote) { Block block = p_149930_1_.getBlock(p_149930_2_, p_149930_3_, p_149930_4_ - 1); Block block1 = p_149930_1_.getBlock(p_149930_2_, p_149930_3_, p_149930_4_ + 1); Block block2 = p_149930_1_.getBlock(p_149930_2_ - 1, p_149930_3_, p_149930_4_); Block block3 = p_149930_1_.getBlock(p_149930_2_ + 1, p_149930_3_, p_149930_4_); byte b0 = 3; if (block.func_149730_j() && !block1.func_149730_j()) { b0 = 3; } if (block1.func_149730_j() && !block.func_149730_j()) { b0 = 2; } if (block2.func_149730_j() && !block3.func_149730_j()) { b0 = 5; } if (block3.func_149730_j() && !block2.func_149730_j()) { b0 = 4; } p_149930_1_.setBlockMetadataWithNotify(p_149930_2_, p_149930_3_, p_149930_4_, b0, 2); } }
-
[1.7.2][SOLVED] unassigned blocks & items upon reenter the World
Zzyxz replied to Zzyxz's topic in Modder Support
I just tried to make a new mod which was one simple item, works fine when i start MC and enter the game, but again, when i hit esc -> save and quit to title -> load, i get this error. i tried to setupDevWorkspace --refresh-dependencies && eclipse --refresh-dependencies but it didn't help. Is that issue not known? -
Hello again, i got a very strange problem. When i start MC from IDE(I'm using forge 1.7.2-10.12.0.1034) and create/load my world, everything is fine and works. BUT! if i hit esc -> quit -> load my world, i get the screen that there are unassigned blocks & items in this save. any ideas? Edit: The mod is still loaded under Mods Console Starting up SoundSystem... [21:44:46] [Client thread/INFO] [FML]: Forge Mod Loader has successfully loaded 4 mods Initializing LWJGL OpenAL (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org) OpenAL initialized. [21:44:46] [sound Library Loader/INFO]: Sound engine started [21:44:47] [server thread/INFO]: Starting integrated minecraft server version 1.7.2 [21:44:47] [server thread/INFO]: Generating keypair [21:44:48] [server thread/INFO] [FML]: Injecting new block and item data into this server instance [21:44:48] [server thread/INFO] [FML]: Loading dimension 0 (New World) (net.minecraft.server.integrated.IntegratedServer@5d59cce) [21:44:48] [server thread/INFO] [FML]: Loading dimension 1 (New World) (net.minecraft.server.integrated.IntegratedServer@5d59cce) [21:44:48] [server thread/INFO] [FML]: Loading dimension -1 (New World) (net.minecraft.server.integrated.IntegratedServer@5d59cce) [21:44:48] [server thread/INFO]: Preparing start region for level 0 POKEE false [21:44:49] [Netty Client IO #0/INFO] [FML]: Server protocol version 1 [21:44:49] [Netty IO #1/INFO] [FML]: Client protocol version 1 [21:44:49] [Netty IO #1/INFO] [FML]: Client attempting to join with 4 mods : [email protected],[email protected],[email protected],[email protected] [21:44:49] [Netty IO #1/INFO] [FML]: Attempting connection with missing mods [] at CLIENT [21:44:49] [Netty Client IO #0/INFO] [FML]: Attempting connection with missing mods [] at SERVER [21:44:49] [server thread/INFO] [FML]: [server thread] Server side modded connection established [21:44:49] [server thread/INFO]: Zzyxzz[local:E:ae4181b7] logged in with entity id 398 at (-269.6201373845077, 71.0, 187.19922599934844) [21:44:49] [server thread/INFO]: Zzyxzz joined the game [21:44:49] [Client thread/INFO] [FML]: [Client thread] Client side modded connection established [21:45:00] [server thread/INFO]: Saving and pausing game... [21:45:00] [server thread/INFO]: Saving chunks for level 'New World'/Overworld [21:45:00] [server thread/INFO]: Saving chunks for level 'New World'/Nether [21:45:00] [server thread/INFO]: Saving chunks for level 'New World'/The End [21:45:00] [server thread/INFO]: Stopping server [21:45:00] [server thread/INFO]: Saving players [21:45:00] [server thread/INFO]: Saving worlds [21:45:00] [server thread/INFO]: Saving chunks for level 'New World'/Overworld [21:45:00] [server thread/INFO]: Saving chunks for level 'New World'/Nether [21:45:00] [server thread/INFO]: Saving chunks for level 'New World'/The End [21:45:00] [server thread/INFO] [FML]: Unloading dimension 0 [21:45:00] [server thread/INFO] [FML]: Unloading dimension -1 [21:45:00] [server thread/INFO] [FML]: Unloading dimension 1 [21:45:08] [server thread/INFO]: Starting integrated minecraft server version 1.7.2 [21:45:08] [server thread/INFO]: Generating keypair [21:45:08] [server thread/INFO] [FML]: Found a missing id from the world friedegg:betterFurnaceActive [21:45:08] [server thread/INFO] [FML]: Found a missing id from the world friedegg:betterFurnaceIdle [21:45:08] [server thread/INFO] [FML]: Found a missing id from the world friedegg:betterFurnaceIdle [21:45:08] [server thread/INFO] [FML]: Found a missing id from the world friedegg:betterFurnaceActive [21:45:08] [server thread/INFO] [FML]: Found a missing id from the world friedegg:friedEgg [21:45:08] [server thread/ERROR] [FML]: There are unidentified mappings in this world - we are going to attempt to process anyway [21:45:08] [server thread/ERROR] [FML]: This world contains blocks and items that refuse to be remapped. The world will not be loaded POKE [21:45:08] [server thread/ERROR]: Encountered an unexpected exception cpw.mods.fml.common.registry.GameRegistryException: Failed to load the world - there are fatal block and item id issues at cpw.mods.fml.common.FMLContainer.readData(FMLContainer.java:193) ~[FMLContainer.class:?] at cpw.mods.fml.common.FMLCommonHandler.handleWorldDataLoad(FMLCommonHandler.java:386) ~[FMLCommonHandler.class:?] at net.minecraft.world.storage.SaveHandler.loadWorldInfo(SaveHandler.java:149) ~[saveHandler.class:?] at net.minecraft.world.World.<init>(World.java:293) ~[World.class:?] at net.minecraft.world.WorldServer.<init>(WorldServer.java:111) ~[WorldServer.class:?] at net.minecraft.server.integrated.IntegratedServer.loadAllWorlds(IntegratedServer.java:65) ~[integratedServer.class:?] at net.minecraft.server.integrated.IntegratedServer.startServer(IntegratedServer.java:98) ~[integratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:490) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:788) [MinecraftServer$2.class:?] [21:45:08] [server thread/ERROR]: This crash report has been saved to: C:\Users\Thomas\workspace\run\.\crash-reports\crash-2014-03-04_21.45.08-server.txt [21:45:08] [server thread/INFO] [FML]: The state engine was in incorrect state SERVER_STARTING and forced into state SERVER_STOPPED. Errors may have been discarded. POKE POKEE false POKE server log ---- Minecraft Crash Report ---- // This doesn't make any sense! Time: 04.03.14 21:45 Description: Exception in server tick loop cpw.mods.fml.common.registry.GameRegistryException: Failed to load the world - there are fatal block and item id issues at cpw.mods.fml.common.FMLContainer.readData(FMLContainer.java:193) at cpw.mods.fml.common.FMLCommonHandler.handleWorldDataLoad(FMLCommonHandler.java:386) at net.minecraft.world.storage.SaveHandler.loadWorldInfo(SaveHandler.java:149) at net.minecraft.world.World.<init>(World.java:293) at net.minecraft.world.WorldServer.<init>(WorldServer.java:111) at net.minecraft.server.integrated.IntegratedServer.loadAllWorlds(IntegratedServer.java:65) at net.minecraft.server.integrated.IntegratedServer.startServer(IntegratedServer.java:98) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:490) at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:788) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- System Details -- Details: Minecraft Version: 1.7.2 Operating System: Windows 8 (amd64) version 6.2 Java Version: 1.7.0_51, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 575160816 bytes (548 MB) / 710934528 bytes (678 MB) up to 1899495424 bytes (1811 MB) JVM Flags: 0 total; AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95 FML: MCP v9.01-pre FML v7.2.125.1034 Minecraft Forge 10.12.0.1034 4 mods loaded, 4 mods active mcp{8.09} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available->Available->Available->Available FML{7.2.125.1034} [Forge Mod Loader] (forgeSrc-1.7.2-10.12.0.1034.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available->Available->Available->Available Forge{10.12.0.1034} [Minecraft Forge] (forgeSrc-1.7.2-10.12.0.1034.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available->Available->Available->Available friedegg{1.0} [Example Mod] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available->Available->Available->Available Profiler Position: N/A (disabled) Player Count: 0 / 8; [] Type: Integrated Server (map_client.txt) Is Modded: Definitely; Client brand changed to 'fml,forge' my mainclass package com.example.friedegg; import com.zzyxz.betterFurnace.BetterFurnace; import com.zzyxz.betterFurnace.BetterFurnaceGuiHandler; import com.zzyxz.betterFurnace.TileEntityBetterFurnace; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; 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.event.FMLInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; @Mod(modid = ExampleMod.MODID, version = ExampleMod.VERSION) public class ExampleMod { public static final String MODID = "friedegg"; public static final String VERSION = "1.0"; @Instance(MODID) public static ExampleMod instance; public static Item friedEgg; private BetterFurnaceGuiHandler guihandler = new BetterFurnaceGuiHandler(); public static Block betterFurnaceIdle; public static Block betterFurnaceActive; public static final int guiIdBetterFurnace = 0; @EventHandler public void preinit(FMLInitializationEvent event) { friedEgg = new FriedEgg(4, 2.0f, false); GameRegistry.registerItem(friedEgg, "friedEgg"); GameRegistry.addSmelting(new ItemStack(Items.egg,1), new ItemStack(friedEgg,5), 0); betterFurnaceIdle = new BetterFurnace(false).setCreativeTab(CreativeTabs.tabMisc).setBlockName("betterFurnaceIdle").setHardness(3.5f); betterFurnaceActive = new BetterFurnace(true).setBlockName("betterFurnaceActive").setHardness(3.5f).setLightLevel(0.9f); GameRegistry.registerBlock(betterFurnaceIdle, "betterFurnaceIdle"); GameRegistry.registerBlock(betterFurnaceActive, "betterFurnaceActive"); GameRegistry.registerTileEntity(TileEntityBetterFurnace.class, "BetterFurnace"); NetworkRegistry.INSTANCE.registerGuiHandler(this, guihandler); if (event.getSide() == Side.CLIENT) Minecraft.getMinecraft().refreshResources(); } @EventHandler public void init(FMLInitializationEvent event) { } }
-
onBlockActivated does not get called when i right click the block. Tried it with a System.out.print Works for onBlockAdded. So what could be a reason, that my onBlockActivated never gets called? did i forget something? EDIT: AW MAW GAWD I'm such an idiot, that is incredible, i wasnt overwriting.... they differ. thx to Mr @Override.... Now im sad.. /solved
-
well.... i dont get what u mean. what do u mean exactly? what should be changed? In every tutorial i found, they use this line, to open the gui. am i wrong? the second par is the modID, which is 0. i could also use ExampleMod.guiIdBetterFurnace, that would be the same.
-
Hello again, i've been working on my furnace now for a quite long time and it wont open the GUI, when i rightclick it. It will just place another Furnace. I've been watching tutorials and stuff. But i cant figure out, why it dont work. I appreciate every help. Edit: Forgot the Furnace class. Now added Furnace package com.zzyxz.betterFurnace; import java.util.Random; import com.example.friedegg.ExampleMod; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class BetterFurnace extends BlockContainer { /** * This flag is used to prevent the furnace inventory to be dropped upon block removal, is used internally when the * furnace block changes from idle to active and vice-versa. */ private final Random field_149933_a = new Random(); private final boolean field_149932_b; private static boolean keepInventory; @SideOnly(Side.CLIENT) private IIcon field_149935_N; @SideOnly(Side.CLIENT) private IIcon field_149936_O; public BetterFurnace(boolean p_i45407_1_) { super(Material.rock); this.field_149932_b = p_i45407_1_; } public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) { return Item.getItemFromBlock(ExampleMod.betterFurnaceIdle); } /** * Called whenever the block is added into the world. Args: world, x, y, z */ public void onBlockAdded(World p_149726_1_, int p_149726_2_, int p_149726_3_, int p_149726_4_) { super.onBlockAdded(p_149726_1_, p_149726_2_, p_149726_3_, p_149726_4_); this.func_149930_e(p_149726_1_, p_149726_2_, p_149726_3_, p_149726_4_); } private void func_149930_e(World p_149930_1_, int p_149930_2_, int p_149930_3_, int p_149930_4_) { if (!p_149930_1_.isRemote) { Block block = p_149930_1_.getBlock(p_149930_2_, p_149930_3_, p_149930_4_ - 1); Block block1 = p_149930_1_.getBlock(p_149930_2_, p_149930_3_, p_149930_4_ + 1); Block block2 = p_149930_1_.getBlock(p_149930_2_ - 1, p_149930_3_, p_149930_4_); Block block3 = p_149930_1_.getBlock(p_149930_2_ + 1, p_149930_3_, p_149930_4_); byte b0 = 3; if (block.func_149730_j() && !block1.func_149730_j()) { b0 = 3; } if (block1.func_149730_j() && !block.func_149730_j()) { b0 = 2; } if (block2.func_149730_j() && !block3.func_149730_j()) { b0 = 5; } if (block3.func_149730_j() && !block2.func_149730_j()) { b0 = 4; } p_149930_1_.setBlockMetadataWithNotify(p_149930_2_, p_149930_3_, p_149930_4_, b0, 2); } } /** * Gets the block's texture. Args: side, meta */ @SideOnly(Side.CLIENT) public IIcon getIcon(int p_149691_1_, int p_149691_2_) { return p_149691_1_ == 1 ? this.field_149935_N : (p_149691_1_ == 0 ? this.field_149935_N : (p_149691_1_ != p_149691_2_ ? this.blockIcon : this.field_149936_O)); } @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister p_149651_1_) { this.blockIcon = p_149651_1_.registerIcon("furnace_side"); this.field_149936_O = p_149651_1_.registerIcon(this.field_149932_b ? "furnace_front_on" : "furnace_front_off"); this.field_149935_N = p_149651_1_.registerIcon("furnace_top"); } /** * Called upon block activation (right click on the block.) */ public boolean onBlockActivated(World world, int x, int y,int z, EntityPlayer player, int side, float hitX, float hitY, int hitZ) { if (world.isRemote) { return true; } else if(!player.isSneaking()) { TileEntity entity = world.getTileEntity(x, y, z); if(entity!=null) { player.openGui(ExampleMod.instance, 0, world, x, y,z); } return true; }else { return false; } } /** * Update which block the furnace is using depending on whether or not it is burning */ public static void updateFurnaceBlockState(boolean b, World worldobj, int xCoord, int yCoord, int zCoord) { int l = worldobj.getBlockMetadata(xCoord, yCoord, zCoord); TileEntity tileentity = worldobj.getTileEntity(xCoord, yCoord, zCoord); keepInventory = true; if (b) { worldobj.setBlock(xCoord, yCoord, zCoord, ExampleMod.betterFurnaceActive); } else { worldobj.setBlock(xCoord, yCoord, zCoord, ExampleMod.betterFurnaceIdle); } keepInventory = false; worldobj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, l, 2); if (tileentity != null) { tileentity.validate(); worldobj.setTileEntity(xCoord, yCoord, zCoord, tileentity); } } /** * Returns a new instance of a block's tile entity class. Called on placing the block. */ public TileEntity createNewTileEntity(World world, int var2) { return new TileEntityBetterFurnace(); } /** * Called when the block is placed in the world. */ public void onBlockPlacedBy(World p_149689_1_, int p_149689_2_, int p_149689_3_, int p_149689_4_, EntityLivingBase p_149689_5_, ItemStack p_149689_6_) { int l = MathHelper.floor_double((double)(p_149689_5_.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; if (l == 0) { p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, 2, 2); } if (l == 1) { p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, 5, 2); } if (l == 2) { p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, 3, 2); } if (l == 3) { p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, 4, 2); } if (p_149689_6_.hasDisplayName()) { ((TileEntityBetterFurnace)p_149689_1_.getTileEntity(p_149689_2_, p_149689_3_, p_149689_4_)).setGuiDisplayName(p_149689_6_.getDisplayName()); } } public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_) { if (!keepInventory) { TileEntityBetterFurnace tileentityfurnace = (TileEntityBetterFurnace)p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_); if (tileentityfurnace != null) { for (int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) { ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); if (itemstack != null) { float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F; float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; while (itemstack.stackSize > 0) { int j1 = this.field_149933_a.nextInt(21) + 10; if (j1 > itemstack.stackSize) { j1 = itemstack.stackSize; } itemstack.stackSize -= j1; EntityItem entityitem = new EntityItem(p_149749_1_, (double)((float)p_149749_2_ + f), (double)((float)p_149749_3_ + f1), (double)((float)p_149749_4_ + f2), new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); if (itemstack.hasTagCompound()) { entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy()); } float f3 = 0.05F; entityitem.motionX = (double)((float)this.field_149933_a.nextGaussian() * f3); entityitem.motionY = (double)((float)this.field_149933_a.nextGaussian() * f3 + 0.2F); entityitem.motionZ = (double)((float)this.field_149933_a.nextGaussian() * f3); p_149749_1_.spawnEntityInWorld(entityitem); } } } p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_); } } super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); } /** * A randomly called display update to be able to add particles or other items for display */ @SideOnly(Side.CLIENT) public void randomDisplayTick(World p_149734_1_, int p_149734_2_, int p_149734_3_, int p_149734_4_, Random p_149734_5_) { if (this.field_149932_b) { int l = p_149734_1_.getBlockMetadata(p_149734_2_, p_149734_3_, p_149734_4_); float f = (float)p_149734_2_ + 0.5F; float f1 = (float)p_149734_3_ + 0.0F + p_149734_5_.nextFloat() * 6.0F / 16.0F; float f2 = (float)p_149734_4_ + 0.5F; float f3 = 0.52F; float f4 = p_149734_5_.nextFloat() * 0.6F - 0.3F; if (l == 4) { p_149734_1_.spawnParticle("smoke", (double)(f - f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D); p_149734_1_.spawnParticle("flame", (double)(f - f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D); } else if (l == 5) { p_149734_1_.spawnParticle("smoke", (double)(f + f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D); p_149734_1_.spawnParticle("flame", (double)(f + f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D); } else if (l == 2) { p_149734_1_.spawnParticle("smoke", (double)(f + f4), (double)f1, (double)(f2 - f3), 0.0D, 0.0D, 0.0D); p_149734_1_.spawnParticle("flame", (double)(f + f4), (double)f1, (double)(f2 - f3), 0.0D, 0.0D, 0.0D); } else if (l == 3) { p_149734_1_.spawnParticle("smoke", (double)(f + f4), (double)f1, (double)(f2 + f3), 0.0D, 0.0D, 0.0D); p_149734_1_.spawnParticle("flame", (double)(f + f4), (double)f1, (double)(f2 + f3), 0.0D, 0.0D, 0.0D); } } } /** * If this returns true, then comparators facing away from this block will use the value from * getComparatorInputOverride instead of the actual redstone signal strength. */ public boolean hasComparatorInputOverride() { return true; } /** * If hasComparatorInputOverride returns true, the return value from this is used instead of the redstone signal * strength when this block inputs to a comparator. */ public int getComparatorInputOverride(World world, int xCoord, int yCoord, int p_149736_4_, int zCoord) { return Container.calcRedstoneFromInventory((IInventory)world.getTileEntity(xCoord, yCoord, zCoord)); } /** * Gets an item for the block being called on. Args: world, x, y, z */ @SideOnly(Side.CLIENT) public Item getItem(World world, int xCoord, int yCoord, int zCoord) { return Item.getItemFromBlock(ExampleMod.betterFurnaceIdle); } } MainClass package com.example.friedegg; import com.zzyxz.betterFurnace.BetterFurnace; import com.zzyxz.betterFurnace.BetterFurnaceGuiHandler; import com.zzyxz.betterFurnace.TileEntityBetterFurnace; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; 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.event.FMLInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; @Mod(modid = ExampleMod.MODID, version = ExampleMod.VERSION) public class ExampleMod { public static final String MODID = "friedegg"; public static final String VERSION = "1.0"; @Instance(MODID) public static ExampleMod instance; public static Item friedEgg; private BetterFurnaceGuiHandler guihandler = new BetterFurnaceGuiHandler(); public static Block betterFurnaceIdle = new BetterFurnace(false).setCreativeTab(CreativeTabs.tabMisc).setBlockName("betterFurnaceIdle").setHardness(3.5f); public static Block betterFurnaceActive = new BetterFurnace(true).setBlockName("betterFurnaceActive").setHardness(3.5f).setLightLevel(0.9f); public static final int guiIdBetterFurnace = 0; @EventHandler public void preinit(FMLInitializationEvent event) { friedEgg = new FriedEgg(4, 2.0f, false); GameRegistry.registerItem(friedEgg, "friedEgg"); GameRegistry.addSmelting(new ItemStack(Items.egg,1), new ItemStack(friedEgg,5), 0); GameRegistry.registerBlock(betterFurnaceIdle, "betterFurnaceIdle"); GameRegistry.registerBlock(betterFurnaceActive, "betterFurnaceActive"); /** TODO Hack to get our textures for items and blocks to show, remove when the bug is * fixed in an update. If this is not done, then the player must manually refresh * the texture packs. */ if (event.getSide() == Side.CLIENT) Minecraft.getMinecraft().refreshResources(); } @EventHandler public void init(FMLInitializationEvent event) { GameRegistry.registerTileEntity(TileEntityBetterFurnace.class, "BetterFurnace"); NetworkRegistry.INSTANCE.registerGuiHandler(this, guihandler); } } GuiHandler package com.zzyxz.betterFurnace; import com.example.friedegg.ExampleMod; 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 BetterFurnaceGuiHandler implements IGuiHandler { public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity entity = world.getTileEntity(x, y, z); if (entity != null) { switch (ID) { case ExampleMod.guiIdBetterFurnace: if (entity instanceof TileEntityBetterFurnace) { return new ContainerBetterFurnace(player.inventory, (TileEntityBetterFurnace) entity); } } } return null; } public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity entity = world.getTileEntity(x, y, z); if (entity != null) { switch (ID) { case ExampleMod.guiIdBetterFurnace: if (entity instanceof TileEntityBetterFurnace) { return new BetterFurnaceGui(player.inventory, (TileEntityBetterFurnace) entity); } } } return null; } } Gui package com.zzyxz.betterFurnace; import org.lwjgl.opengl.GL11; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.util.ResourceLocation; public class BetterFurnaceGui extends GuiContainer { public TileEntityBetterFurnace entityBetterFurnace; public static final ResourceLocation texture = new ResourceLocation("/textures/gui/container/furnace.png"); public BetterFurnaceGui(InventoryPlayer inventoryPlayer, TileEntityBetterFurnace entity) { super(new ContainerBetterFurnace(inventoryPlayer, entity)); // TODO Auto-generated constructor stub this.entityBetterFurnace=entity; this.xSize = 176; this.ySize = 166; } public void drawGuiContainerForegroundLayer(float var1, int var2, int var3) { String name = this.entityBetterFurnace.isInvNameLocalized() ? this.entityBetterFurnace.getInvName() : "betterFurnace"; this.fontRendererObj.drawString(name, this.xSize/2 - this.fontRendererObj.getStringWidth(name)/2, 6, 4210752); this.fontRendererObj.drawString("betterFurnace", 8, this.ySize -96+2, 4210752); } @Override public void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(texture); int k = (this.width - this.xSize) / 2; int l = (this.height - this.ySize) / 2; this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); int i1; if (this.entityBetterFurnace.isBurning()) { i1 = this.entityBetterFurnace.getBurnTimeRemainingScaled(12); this.drawTexturedModalRect(k + 56, l + 36 + 12 - i1, 176, 12 - i1, 14, i1 + 2); } i1 = this.entityBetterFurnace.getCookProgressScaled(24); this.drawTexturedModalRect(k + 79, l + 34, 176, 14, i1 + 1, 16); } } Container package com.zzyxz.betterFurnace; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.Slot; import net.minecraft.inventory.SlotFurnace; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; public class ContainerBetterFurnace extends Container { private TileEntityBetterFurnace betterFurnace; /** Time left*/ public int lastBurnTime; /** fuel value time*/ public int lastItemBurnTime; public int lastCookTime; public ContainerBetterFurnace(InventoryPlayer inventoryPlayer, TileEntityBetterFurnace entity) { this.betterFurnace = entity; this.addSlotToContainer(new Slot(entity, 0, 56, 17)); this.addSlotToContainer(new Slot(entity, 1, 56, 53)); this.addSlotToContainer(new SlotFurnace(inventoryPlayer.player,entity,2 ,116,35)); int i; for (i = 0; i < 3; ++i) { for (int j = 0; j < 9; ++j) { this.addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); } } for (i = 0; i < 9; ++i) { this.addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 142)); } } public void addCraftingToCrafters(ICrafting par1ICrafting) { super.addCraftingToCrafters(par1ICrafting); par1ICrafting.sendProgressBarUpdate(this, 0, this.betterFurnace.cookTime); par1ICrafting.sendProgressBarUpdate(this, 1, this.betterFurnace.burnTime); par1ICrafting.sendProgressBarUpdate(this, 2, this.betterFurnace.currentItemBurnTime); } public void detectAndSendChanges() { super.detectAndSendChanges(); for (int i = 0; i < this.crafters.size(); ++i) { ICrafting icrafting = (ICrafting)this.crafters.get(i); if (this.lastCookTime != this.betterFurnace.cookTime) { icrafting.sendProgressBarUpdate(this, 0, this.betterFurnace.cookTime); } if (this.lastBurnTime != this.betterFurnace.burnTime) { icrafting.sendProgressBarUpdate(this, 1, this.betterFurnace.burnTime); } if (this.lastItemBurnTime != this.betterFurnace.currentItemBurnTime) { icrafting.sendProgressBarUpdate(this, 2, this.betterFurnace.currentItemBurnTime); } } this.lastCookTime = this.betterFurnace.cookTime; this.lastBurnTime = this.betterFurnace.burnTime; this.lastItemBurnTime = this.betterFurnace.currentItemBurnTime; } @SideOnly(Side.CLIENT) public void updateProgressBar(int par1, int par2) { if (par1 == 0) { this.betterFurnace.cookTime = par2; } if (par1 == 1) { this.betterFurnace.cookTime = par2; } if (par1 == 2) { this.betterFurnace.currentItemBurnTime = par2; } } public boolean canInteractWith(EntityPlayer var1) { return this.betterFurnace.isUseableByPlayer(var1); } public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2) { ItemStack itemstack = null; Slot slot = (Slot)this.inventorySlots.get(par2); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); if (par2 == 2) { if (!this.mergeItemStack(itemstack1, 3, 39, true)) { return null; } slot.onSlotChange(itemstack1, itemstack); } else if (par2 != 1 && par2 != 0) { if (FurnaceRecipes.smelting().getSmeltingResult(itemstack1) != null) { if (!this.mergeItemStack(itemstack1, 0, 1, false)) { return null; } } else if (TileEntityBetterFurnace.isItemFuel(itemstack1)) { if (!this.mergeItemStack(itemstack1, 1, 2, false)) { return null; } } else if (par2 >= 3 && par2 < 30) { if (!this.mergeItemStack(itemstack1, 30, 39, false)) { return null; } } else if (par2 >= 30 && par2 < 39 && !this.mergeItemStack(itemstack1, 3, 30, false)) { return null; } } else if (!this.mergeItemStack(itemstack1, 3, 39, false)) { return null; } if (itemstack1.stackSize == 0) { slot.putStack((ItemStack)null); } else { slot.onSlotChanged(); } if (itemstack1.stackSize == itemstack.stackSize) { return null; } slot.onPickupFromSlot(par1EntityPlayer, itemstack1); } return itemstack; } } TileEntity package com.zzyxz.betterFurnace; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; import net.minecraft.block.BlockFurnace; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemHoe; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; import net.minecraft.item.ItemTool; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; public class TileEntityBetterFurnace extends TileEntity implements ISidedInventory { private String localizedName; private static final int[] slots_top = new int[]{0}; private static final int[] slots_bottom = new int[]{2,1}; private static final int[] slots_sides = new int[]{1}; private ItemStack[] slots = new ItemStack[3]; /** Furnace Speed*/ public int furnaceSpeed = 200; /** Time left*/ public int burnTime; /** fuel value time*/ public int currentItemBurnTime; public int cookTime; public int getSizeInventory() { return this.slots.length; } public String getInvName() { return this.isInvNameLocalized() ? this.localizedName : "betterFurnace"; } public void setGuiDisplayName(String Displayname) { this.localizedName=Displayname; } public boolean isInvNameLocalized() { return this.localizedName !=null && this.localizedName.length()>0; } public ItemStack getStackInSlot(int var1) { return this.slots[var1]; } public ItemStack decrStackSize(int var1, int var2) { if (this.slots[var1] != null) { ItemStack itemstack; if (this.slots[var1].stackSize <= var1) { itemstack = this.slots[var1]; this.slots[var1] = null; return itemstack; } else { itemstack = this.slots[var1].splitStack(var1); if (this.slots[var1].stackSize == 0) { this.slots[var1] = null; } return itemstack; } } else { return null; } } public ItemStack getStackInSlotOnClosing(int var1) { if (this.slots[var1] != null) { ItemStack itemstack = this.slots[var1]; this.slots[var1] = null; return itemstack; } else { return null; } } public void setInventorySlotContents(int var1, ItemStack var2) { this.slots[var1] = var2; if (var2 != null && var2.stackSize > this.getInventoryStackLimit()) { var2.stackSize = this.getInventoryStackLimit(); } } public String getInventoryName() { return this.hasCustomInventoryName() ? this.localizedName : "betterFurnace"; } public boolean hasCustomInventoryName() { // TODO Auto-generated method stub return false; } public void readFromNBT(NBTTagCompound p_145839_1_) { super.readFromNBT(p_145839_1_); NBTTagList nbttaglist = p_145839_1_.getTagList("Items", 10); this.slots = new ItemStack[this.getSizeInventory()]; for (int i = 0; i < nbttaglist.tagCount(); ++i) { NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); byte b0 = nbttagcompound1.getByte("Slot"); if (b0 >= 0 && b0 < this.slots.length) { this.slots[b0] = ItemStack.loadItemStackFromNBT(nbttagcompound1); } } this.burnTime = p_145839_1_.getShort("BurnTime"); this.cookTime = p_145839_1_.getShort("CookTime"); this.currentItemBurnTime = getItemBurnTime(this.slots[1]); if (p_145839_1_.hasKey("CustomName", ) { this.localizedName = p_145839_1_.getString("CustomName"); } } public void writeToNBT(NBTTagCompound p_145841_1_) { super.writeToNBT(p_145841_1_); p_145841_1_.setShort("BurnTime", (short)this.burnTime); p_145841_1_.setShort("CookTime", (short)this.cookTime); NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i < this.slots.length; ++i) { if (this.slots[i] != null) { NBTTagCompound nbttagcompound1 = new NBTTagCompound(); nbttagcompound1.setByte("Slot", (byte)i); this.slots[i].writeToNBT(nbttagcompound1); nbttaglist.appendTag(nbttagcompound1); } } p_145841_1_.setTag("Items", nbttaglist); if (this.hasCustomInventoryName()) { p_145841_1_.setString("CustomName", this.localizedName); } } public int getInventoryStackLimit() { return 64; } public boolean isUseableByPlayer(EntityPlayer var1) { return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : var1.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; } public void openInventory() { // TODO Auto-generated method stub } public void closeInventory() { // TODO Auto-generated method stub } public boolean isBurning() { return this.burnTime > 0; } public void updateEntity() { boolean flag = this.burnTime > 0; boolean flag1 = false; if (this.burnTime > 0) { --this.burnTime; } if (!this.worldObj.isRemote) { if (this.burnTime == 0 && this.canSmelt()) { this.currentItemBurnTime = this.burnTime = getItemBurnTime(this.slots[1]); if (this.burnTime > 0) { flag1 = true; if (this.slots[1] != null) { --this.slots[1].stackSize; if (this.slots[1].stackSize == 0) { this.slots[1] = slots[1].getItem().getContainerItem(slots[1]); } } } } if (this.isBurning() && this.canSmelt()) { ++this.cookTime; if (this.cookTime == 200) { this.cookTime = 0; this.smeltItem(); flag1 = true; } } else { this.cookTime = 0; } if (flag != this.burnTime > 0) { flag1 = true; BetterFurnace.updateFurnaceBlockState(this.burnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord); } } if (flag1) { this.markDirty(); } } private void smeltItem() { if (this.canSmelt()) { ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]); if (this.slots[2] == null) { this.slots[2] = itemstack.copy(); } else if (this.slots[2].getItem() == itemstack.getItem()) { this.slots[2].stackSize += itemstack.stackSize; // Forge BugFix: Results may have multiple items } --this.slots[0].stackSize; if (this.slots[0].stackSize <= 0) { this.slots[0] = null; } } } private boolean canSmelt() { if (this.slots[0] == null) { return false; } else { ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]); if (itemstack == null) return false; if (this.slots[2] == null) return true; if (!this.slots[2].isItemEqual(itemstack)) return false; int result = slots[2].stackSize + itemstack.stackSize; return result <= getInventoryStackLimit() && result <= this.slots[2].getMaxStackSize(); //Forge BugFix: Make it respect stack sizes properly. } } public static int getItemBurnTime(ItemStack itemstack) { if(itemstack == null) { return 0; } else{ Item item = itemstack.getItem(); if (item instanceof ItemBlock && Block.getBlockFromItem(item) != Blocks.air) { Block block = Block.getBlockFromItem(item); if (block == Blocks.wooden_slab) { return 150; } if (block.getMaterial() == Material.wood) { return 300; } if (block == Blocks.coal_block) { return 16000; } } if (item instanceof ItemTool && ((ItemTool)item).getToolMaterialName().equals("WOOD")) return 200; if (item instanceof ItemSword && ((ItemSword)item).getToolMaterialName().equals("WOOD")) return 200; if (item instanceof ItemHoe && ((ItemHoe)item).getToolMaterialName().equals("WOOD")) return 200; if (item == Items.stick) return 100; if (item == Items.coal) return 1600; if (item == Items.lava_bucket) return 20000; if (item == Item.getItemFromBlock(Blocks.sapling)) return 100; if (item == Items.blaze_rod) return 2400; return GameRegistry.getFuelValue(itemstack); } } public static boolean isItemFuel(ItemStack itemstack) { return getItemBurnTime(itemstack) > 0; } public boolean isItemValidForSlot(int var1, ItemStack var2) { return var1 == 2 ? false : (var1 == 1 ? isItemFuel(var2) : true); } public int[] getAccessibleSlotsFromSide(int var1) { return var1 == 0 ? slots_bottom : (var1 == 1 ? slots_top : slots_sides); } public boolean canInsertItem(int var1, ItemStack var2, int var3) { return this.isItemValidForSlot(var1, var2); } public boolean canExtractItem(int var1, ItemStack var2, int var3) { return var3 != 0 || var1 != 1 || var2.getItem() == Items.bucket; } public int getBurnTimeRemainingScaled(int i) { if (this.currentItemBurnTime == 0) { this.currentItemBurnTime = 200; } return this.burnTime * i / this.currentItemBurnTime; } public int getCookProgressScaled(int i) { return this.cookTime * i / 200; } }
-
yea, thats something, i already noticed. Well then i need to extend and overwrite the Vanilla Furnace. Now i need to figure out, how i can add this to the furnace class... If someone has a great tutorial which explains that, that would be nice. Otherwise i'll just try my luck
-
Hello, i tried to figure out, how i can modify the input consumption of itemStacks in the furnace. i.e.: input Stones 64 and output Better Stones 32 i tried it with: GameRegistry.addSmelting(new ItemStack(Block.stone,2), new ItemStack(betterStone,1), 0); But the input consumption does not change. I still get 64 Better Stones instead of 32. Would be nice if someone could help me with that, i already invested about 10h with researches, through the whole internet. I'm pretty desperate.