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.

Zzyxz

Forge Modder
  • Joined

  • Last visited

Everything posted by Zzyxz

  1. Zzyxz replied to Z@Nka's topic in Modder Support
    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); } }
  2. 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?
  3. 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) { } }
  4. 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
  5. 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.
  6. 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; } }
  7. 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
  8. 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.

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.