Jump to content

Recommended Posts

Posted

Hello, I'm new here, so please excuse me, if I do something wrong. Also I can made som grammar mistakes, becouse I'm not from English.

I've updated Forge for MCP few hours ago and now GUI that I've created not working.

Console and log writing only this : A mod tried to open a gui on the server without being a NetworkMod.

Before update it worked without problems. I've tried Minecraftforge-src-4.1.1.251 and 4.1.4.287.

Here is source code of mod_ class :

 

 

 

mod_Technical.java

 

 

package Technicraft;

 

import java.util.Random;

import net.minecraftforge.common.Configuration;

 

import net.minecraft.src.*;

import net.minecraftforge.client.MinecraftForgeClient;

import net.minecraftforge.common.MinecraftForge;

 

import cpw.mods.fml.common.Mod;

import cpw.mods.fml.common.Mod.Instance;

import cpw.mods.fml.common.event.FMLInitializationEvent;

import cpw.mods.fml.common.event.FMLPreInitializationEvent;

import cpw.mods.fml.common.network.NetworkMod;

import cpw.mods.fml.common.network.NetworkMod.SidedPacketHandler;

import cpw.mods.fml.common.network.NetworkRegistry;

import cpw.mods.fml.common.registry.GameRegistry;

import cpw.mods.fml.common.Mod.Init;

import cpw.mods.fml.common.Mod.PreInit;

import cpw.mods.fml.common.Mod.PostInit;

import cpw.mods.fml.common.SidedProxy;

import cpw.mods.fml.common.TickType;

 

@Mod(modid = "mod_Technicraft", name = "Technicraft", version = "0.0.1")

@NetworkMod(clientSideRequired=true, serverSideRequired=false, clientPacketHandlerSpec = @SidedPacketHandler(channels = {"Technicraft" }, packetHandler = ClientPacketHandler.class), serverPacketHandlerSpec = @SidedPacketHandler(channels = {"Technicraft" }, packetHandler = ServerPacketHandler.class))

 

public class mod_Technicraft

{

@SidedProxy(clientSide = "Technicraft.Technical_ClientProxy" , serverSide = "Technicraft.Technical_Proxy")

public static Technical_Proxy proxy;

 

@Instance("Technical")

public static mod_Technicraft instance = new mod_Technicraft();

 

static public TechnicalGuiHandler guiHandler = new TechnicalGuiHandler();

static public Block copperOre;

static public Block copperFurnace;

static public Block copperFurnaceActive;

static public Block copperCrusher;

static public Block copperCrusherActive;

static public Item itemCopperIngot;

static public Item itemCopperDust;

static public Item itemIronDust;

static public Item itemGoldDust;

static public TechnicalWorldGeneration generator = new TechnicalWorldGeneration();

static public String local[] = new String[7];

Configuration config;

 

@PreInit

public void preInit(FMLPreInitializationEvent event)

{

config = new Configuration(event.getSuggestedConfigurationFile());

}

 

 

 

@Init

public void Init(FMLInitializationEvent event){

config.load();

local[0] = config.getOrCreateProperty("copperOre_" + StringTranslate.getInstance().currentLanguage, Configuration.CATEGORY_GENERAL, "Copper Ore").value;

local[1] = config.getOrCreateProperty("copperFurnace_" + StringTranslate.getInstance().currentLanguage, Configuration.CATEGORY_GENERAL, "Copper Furnace").value;

local[2] = config.getOrCreateProperty("copperIngot_" + StringTranslate.getInstance().currentLanguage, Configuration.CATEGORY_GENERAL, "Copper Ingot").value;

local[3] = config.getOrCreateProperty("copperCrusher_" + StringTranslate.getInstance().currentLanguage, Configuration.CATEGORY_GENERAL, "Copper Crushing Machine").value;

local[4] = config.getOrCreateProperty("copperDust_" + StringTranslate.getInstance().currentLanguage, Configuration.CATEGORY_GENERAL, "Copper Dust").value;

local[5] = config.getOrCreateProperty("ironDust_" + StringTranslate.getInstance().currentLanguage, Configuration.CATEGORY_GENERAL, "Iron Dust").value;

local[6] = config.getOrCreateProperty("goldDust_" + StringTranslate.getInstance().currentLanguage, Configuration.CATEGORY_GENERAL, "Gold Dust").value;

copperOre = new TechnicalBlockCopperOre(config.getOrCreateIntProperty("copperOre",Configuration.CATEGORY_BLOCK, 1300).getInt(),0,Material.iron).setBlockName(local[0]).setCreativeTab(CreativeTabs.tabBlock).setStepSound(Block.soundStoneFootstep);

itemCopperIngot = new TechnicalItemCopperIngot(config.getOrCreateIntProperty("itemCopperIngot",Configuration.CATEGORY_ITEM, 1500).getInt()).setIconIndex(0).setItemName(local[1]).setCreativeTab(CreativeTabs.tabMaterials);

copperFurnace = new TechnicalBlockFurnaceCopper(config.getOrCreateIntProperty("copperFurnace",Configuration.CATEGORY_BLOCK, 1301).getInt(),false).setRequiresSelfNotify().setBlockName(local[2]).setCreativeTab(CreativeTabs.tabDecorations);

copperFurnaceActive = new TechnicalBlockFurnaceCopper(config.getOrCreateIntProperty("copperFurnaceActive",Configuration.CATEGORY_BLOCK, 1302).getInt(),true).setRequiresSelfNotify().setBlockName(local[2]).setCreativeTab(CreativeTabs.tabDecorations);

copperCrusher = new TechnicalBlockCrusherCopper(config.getOrCreateIntProperty("copperCrusher",Configuration.CATEGORY_BLOCK, 1303).getInt(),false).setRequiresSelfNotify().setBlockName(local[3]).setCreativeTab(CreativeTabs.tabDecorations);

copperCrusherActive = new TechnicalBlockCrusherCopper(config.getOrCreateIntProperty("copperCrusherActive",Configuration.CATEGORY_BLOCK, 1304).getInt(),true).setRequiresSelfNotify().setBlockName(local[3]).setCreativeTab(CreativeTabs.tabDecorations);

itemCopperDust = new TechnicalItemCopperDust(config.getOrCreateIntProperty("itemCopperDust",Configuration.CATEGORY_ITEM, 1501).getInt()).setIconIndex(1).setItemName(local[4]).setCreativeTab(CreativeTabs.tabMaterials);

itemIronDust = new TechnicalItemCopperDust(config.getOrCreateIntProperty("itemIronDust",Configuration.CATEGORY_ITEM, 1502).getInt()).setIconIndex(2).setItemName(local[5]).setCreativeTab(CreativeTabs.tabMaterials);

itemGoldDust = new TechnicalItemCopperDust(config.getOrCreateIntProperty("itemGoldDust",Configuration.CATEGORY_ITEM, 1503).getInt()).setIconIndex(3).setItemName(local[6]).setCreativeTab(CreativeTabs.tabMaterials);

NetworkRegistry.instance().registerGuiHandler(this, guiHandler);

GameRegistry.registerBlock(copperOre);

GameRegistry.registerBlock(copperFurnace);

GameRegistry.registerBlock(copperCrusher);

GameRegistry.registerWorldGenerator(generator);

ModLoader.addName(copperOre, local[0]);

ModLoader.addName(copperFurnace, local[1]);

ModLoader.addName(copperFurnaceActive, local[1]);

ModLoader.addName(itemCopperIngot, local[2]);

ModLoader.addName(copperCrusher, local[3]);

ModLoader.addName(copperCrusherActive, local[3]);

ModLoader.addName(itemCopperDust, local[4]);

ModLoader.addName(itemIronDust, local[5]);

ModLoader.addName(itemGoldDust, local[6]);

GameRegistry.registerTileEntity(TechnicalEntityFurnaceCopper.class, "TechnicalEntityFurnaceCopper");

GameRegistry.registerTileEntity(TechnicalEntityCrusherCopper.class, "TechnicalEntityCrusherCopper");

GameRegistry.addSmelting(copperOre.blockID, new ItemStack(itemCopperIngot),1);

GameRegistry.addSmelting(new ItemStack(itemCopperDust).itemID , new ItemStack(itemCopperIngot),1);

GameRegistry.addSmelting(new ItemStack(itemIronDust).itemID , new ItemStack(Item.ingotIron),1);

GameRegistry.addSmelting(new ItemStack(itemGoldDust).itemID , new ItemStack(Item.ingotGold),1);

GameRegistry.addRecipe(new ItemStack(copperFurnace), new Object[]{"###","#Y#","###",'#',itemCopperIngot,'Y',Block.stoneOvenIdle});

GameRegistry.addRecipe(new ItemStack(copperFurnace), new Object[]{"#Y#","#X#","###",'#',itemCopperIngot,'X',copperFurnace,'Y',Item.pickaxeSteel});

CrusherRecipes.crushing().addRecipe(new ItemStack(copperOre), new ItemStack(itemCopperDust,2));

CrusherRecipes.crushing().addRecipe(new ItemStack(Block.oreIron), new ItemStack(itemIronDust,2));

CrusherRecipes.crushing().addRecipe(new ItemStack(Block.oreGold), new ItemStack(itemGoldDust,2));

CrusherRecipes.crushing().addRecipe(new ItemStack(itemCopperIngot), new ItemStack(itemCopperDust));

CrusherRecipes.crushing().addRecipe(new ItemStack(Item.ingotIron), new ItemStack(itemIronDust));

CrusherRecipes.crushing().addRecipe(new ItemStack(Item.ingotGold), new ItemStack(itemGoldDust));

CrusherRecipes.crushing().addRecipe(new ItemStack(Block.stone), new ItemStack(Block.cobblestone));

CrusherRecipes.crushing().addRecipe(new ItemStack(Block.cobblestone), new ItemStack(Block.sand));

CrusherRecipes.crushing().addRecipe(new ItemStack(Block.gravel), new ItemStack(Item.flint));

copperOre.setTextureFile("/Technicraft/terrain.png");

itemCopperIngot.setTextureFile("/Technicraft/gui/items.png");

itemCopperDust.setTextureFile("/Technicraft/gui/items.png");

itemIronDust.setTextureFile("/Technicraft/gui/items.png");

itemGoldDust.setTextureFile("/Technicraft/gui/items.png");

config.save();

}

}

 

 

 

 

TechnicalBlockFurnaceCopper.java

 

 

package Technicraft;

 

import java.util.Random;

import net.minecraft.src.*;

 

import cpw.mods.fml.common.Side;

import cpw.mods.fml.common.asm.SideOnly;

 

public class TechnicalBlockFurnaceCopper  extends BlockContainer

{

/**

    * Is the random generator used by furnace to drop the inventory contents in random directions.

    */

 

@Override

public Block setRequiresSelfNotify()

    {

        requiresSelfNotify[this.blockID] = true;

        return this;

    }

 

    private Random furnaceRand = new Random();

 

    /** True if this is an active furnace, false if idle */

    private final boolean isActive;

 

    /**

    * 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 static boolean keepFurnaceInventory = false;

 

    protected TechnicalBlockFurnaceCopper(int par1, boolean par2)

    {

        super(par1, Material.rock);

        this.isActive = par2;

        this.blockIndexInTexture = 2;

    }

 

    /**

    * Returns the ID of the items to drop on destruction.

    */

    public int idDropped(int par1, Random par2Random, int par3)

    {

        return mod_Technicraft.copperFurnace.blockID;

    }

 

    /**

    * Called whenever the block is added into the world. Args: world, x, y, z

    */

    public void onBlockAdded(World par1World, int par2, int par3, int par4)

    {

        super.onBlockAdded(par1World, par2, par3, par4);

        this.setDefaultDirection(par1World, par2, par3, par4);

    }

 

    /**

    * set a blocks direction

    */

    private void setDefaultDirection(World par1World, int par2, int par3, int par4)

    {

        if (!par1World.isRemote)

        {

            int var5 = par1World.getBlockId(par2, par3, par4 - 1);

            int var6 = par1World.getBlockId(par2, par3, par4 + 1);

            int var7 = par1World.getBlockId(par2 - 1, par3, par4);

            int var8 = par1World.getBlockId(par2 + 1, par3, par4);

            byte var9 = 3;

 

            if (Block.opaqueCubeLookup[var5] && !Block.opaqueCubeLookup[var6])

            {

                var9 = 3;

            }

 

            if (Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var5])

            {

                var9 = 2;

            }

 

            if (Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var8])

            {

                var9 = 5;

            }

 

            if (Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var7])

            {

                var9 = 4;

            }

 

            par1World.setBlockMetadataWithNotify(par2, par3, par4, var9);

        }

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * Retrieves the block texture to use based on the display side. Args: iBlockAccess, x, y, z, side

    */

    public int getBlockTexture(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)

    {

        if (par5 == 1)

        {

            return this.blockIndexInTexture + 17;

        }

        else if (par5 == 0)

        {

            return this.blockIndexInTexture + 17;

        }

        else

        {

            int var6 = par1IBlockAccess.getBlockMetadata(par2, par3, par4);

            return par5 != var6 ? this.blockIndexInTexture : (this.isActive ? this.blockIndexInTexture + 16: this.blockIndexInTexture - 1);

        }

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * A randomly called display update to be able to add particles or other items for display

    */

    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)

    {

        if (this.isActive)

        {

            int var6 = par1World.getBlockMetadata(par2, par3, par4);

            float var7 = (float)par2 + 0.5F;

            float var8 = (float)par3 + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F;

            float var9 = (float)par4 + 0.5F;

            float var10 = 0.52F;

            float var11 = par5Random.nextFloat() * 0.6F - 0.3F;

 

            if (var6 == 4)

            {

                par1World.spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);

                par1World.spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);

            }

            else if (var6 == 5)

            {

                par1World.spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);

                par1World.spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);

            }

            else if (var6 == 2)

            {

                par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D);

                par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D);

            }

            else if (var6 == 3)

            {

                par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D);

                par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D);

            }

        }

    }

 

    /**

    * Returns the block texture based on the side being looked at.  Args: side

    */

    public int getBlockTextureFromSide(int par1)

    {

        return par1 == 1 ? this.blockIndexInTexture + 17 : (par1 == 0 ? this.blockIndexInTexture + 17 : (par1 == 3 ? this.blockIndexInTexture - 1 : this.blockIndexInTexture));

    }

 

    /**

    * Called upon block activation (right click on the block.)

    */

    public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)

    {

        if (par1World.isRemote)

        {

            return true;

        }

        else

        {

        TechnicalEntityFurnaceCopper var10 = (TechnicalEntityFurnaceCopper)par1World.getBlockTileEntity(par2, par3, par4);

            if (var10 != null)

            {

                //par5EntityPlayer.displayGUIFurnace(var10);

                //ModLoader.openGUI(par5EntityPlayer, new TechnicalGuiFurnaceCopper(par5EntityPlayer.inventory, var10));

                par5EntityPlayer.openGui(mod_Technicraft.instance,0,par1World,par2,par3,par4);

            }

 

            return true;

        }

    }

 

    /**

    * Update which block ID the furnace is using depending on whether or not it is burning

    */

   

    public static void updateFurnaceBlockState(boolean par0, World par1World, int par2, int par3, int par4)

    {

        int var5 = par1World.getBlockMetadata(par2, par3, par4);

        TileEntity var6 = par1World.getBlockTileEntity(par2, par3, par4);

        keepFurnaceInventory = true;

 

        if (par0)

        {

            par1World.setBlockWithNotify(par2, par3, par4, mod_Technicraft.copperFurnaceActive.blockID);

        }

        else

        {

            par1World.setBlockWithNotify(par2, par3, par4, mod_Technicraft.copperFurnace.blockID);

        }

 

        keepFurnaceInventory = false;

        par1World.setBlockMetadataWithNotify(par2, par3, par4, var5);

 

        if (var6 != null)

        {

            var6.validate();

            par1World.setBlockTileEntity(par2, par3, par4, var6);

        }

    }

 

    @Override

    public String getTextureFile() {

    return "/Technicraft/terrain.png";

    }

   

    /**

    * each class overrdies this to return a new <className>

    */

    public TileEntity createNewTileEntity(World par1World)

    {

        return new TechnicalEntityFurnaceCopper();

    }

 

    public TileEntity getBlockEntity()

    {

    return new TechnicalEntityFurnaceCopper();

    }

    /**

    * Called when the block is placed in the world.

    */

    public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving)

    {

        int var6 = MathHelper.floor_double((double)(par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;

 

        if (var6 == 0)

        {

            par1World.setBlockMetadataWithNotify(par2, par3, par4, 2);

        }

 

        if (var6 == 1)

        {

            par1World.setBlockMetadataWithNotify(par2, par3, par4, 5);

        }

 

        if (var6 == 2)

        {

            par1World.setBlockMetadataWithNotify(par2, par3, par4, 3);

        }

 

        if (var6 == 3)

        {

            par1World.setBlockMetadataWithNotify(par2, par3, par4, 4);

        }

    }

 

   

    /**

    * ejects contained items into the world, and notifies neighbours of an update, as appropriate

    */

    public void breakBlock(World par1World, int par2, int par3, int par4, int par5, int par6)

    {

        if (!keepFurnaceInventory)

        {

        TechnicalEntityFurnaceCopper var7 = (TechnicalEntityFurnaceCopper)par1World.getBlockTileEntity(par2, par3, par4);

 

            if (var7 != null)

            {

                for (int var8 = 0; var8 < var7.getSizeInventory(); ++var8)

                {

                    ItemStack var9 = var7.getStackInSlot(var8);

 

                    if (var9 != null)

                    {

                        float var10 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;

                        float var11 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;

                        float var12 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;

 

                        while (var9.stackSize > 0)

                        {

                            int var13 = this.furnaceRand.nextInt(21) + 10;

 

                            if (var13 > var9.stackSize)

                            {

                                var13 = var9.stackSize;

                            }

 

                            var9.stackSize -= var13;

                            EntityItem var14 = new EntityItem(par1World, (double)((float)par2 + var10), (double)((float)par3 + var11), (double)((float)par4 + var12), new ItemStack(var9.itemID, var13, var9.getItemDamage()));

 

                            if (var9.hasTagCompound())

                            {

                                var14.item.setTagCompound((NBTTagCompound)var9.getTagCompound().copy());

                            }

 

                            float var15 = 0.05F;

                            var14.motionX = (double)((float)this.furnaceRand.nextGaussian() * var15);

                            var14.motionY = (double)((float)this.furnaceRand.nextGaussian() * var15 + 0.2F);

                            var14.motionZ = (double)((float)this.furnaceRand.nextGaussian() * var15);

                            par1World.spawnEntityInWorld(var14);

                        }

                    }

                }

            }

        }

 

        super.breakBlock(par1World, par2, par3, par4, par5, par6);

    }

}

 

 

 

TechnicalEntityFurnaceCopper.java

 

 

package Technicraft;

 

import net.minecraftforge.common.ForgeDirection;

import net.minecraft.src.*;

import net.minecraftforge.common.ISidedInventory;

import cpw.mods.fml.common.Side;

import cpw.mods.fml.common.asm.SideOnly;

import cpw.mods.fml.common.registry.GameRegistry;

 

public class TechnicalEntityFurnaceCopper  extends TileEntity implements IInventory, ISidedInventory

{

    /**

    * The ItemStacks that hold the items currently being used in the furnace

    */

    private ItemStack[] furnaceItemStacks = new ItemStack[3];

 

    /** The number of ticks that the furnace will keep burning */

    public int furnaceBurnTime = 0;

 

    /**

    * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for

    */

    public int currentItemBurnTime = 0;

 

    /** The number of ticks that the current item has been cooking for */

    public int furnaceCookTime = 0;

 

    /** Furnace temperature */

    public int temperature = 0;

   

    /**

    * Returns the number of slots in the inventory.

    */

    public int getSizeInventory()

    {

        return this.furnaceItemStacks.length;

    }

 

    /**

    * Returns the stack in slot i

    */

    public ItemStack getStackInSlot(int par1)

    {

        return this.furnaceItemStacks[par1];

    }

 

    public int getTemperatureScaled(int par1)

    {

    return this.temperature * par1 / 500;

    }

   

    /**

    * Removes from an inventory slot (first arg) up to a specified number (second arg) of items and returns them in a

    * new stack.

    */

    public ItemStack decrStackSize(int par1, int par2)

    {

        if (this.furnaceItemStacks[par1] != null)

        {

            ItemStack var3;

 

            if (this.furnaceItemStacks[par1].stackSize <= par2)

            {

                var3 = this.furnaceItemStacks[par1];

                this.furnaceItemStacks[par1] = null;

                return var3;

            }

            else

            {

                var3 = this.furnaceItemStacks[par1].splitStack(par2);

 

                if (this.furnaceItemStacks[par1].stackSize == 0)

                {

                    this.furnaceItemStacks[par1] = null;

                }

 

                return var3;

            }

        }

        else

        {

            return null;

        }

    }

 

    /**

    * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem -

    * like when you close a workbench GUI.

    */

    public ItemStack getStackInSlotOnClosing(int par1)

    {

        if (this.furnaceItemStacks[par1] != null)

        {

            ItemStack var2 = this.furnaceItemStacks[par1];

            this.furnaceItemStacks[par1] = null;

            return var2;

        }

        else

        {

            return null;

        }

    }

 

    /**

    * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections).

    */

    public void setInventorySlotContents(int par1, ItemStack par2ItemStack)

    {

        this.furnaceItemStacks[par1] = par2ItemStack;

 

        if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit())

        {

            par2ItemStack.stackSize = this.getInventoryStackLimit();

        }

    }

 

    /**

    * Returns the name of the inventory.

    */

    public String getInvName()

    {

        return "container.furnace";

    }

 

    /**

    * Reads a tile entity from NBT.

    */

    public void readFromNBT(NBTTagCompound par1NBTTagCompound)

    {

        super.readFromNBT(par1NBTTagCompound);

        NBTTagList var2 = par1NBTTagCompound.getTagList("Items");

        this.furnaceItemStacks = new ItemStack[this.getSizeInventory()];

 

        for (int var3 = 0; var3 < var2.tagCount(); ++var3)

        {

            NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3);

            byte var5 = var4.getByte("Slot");

 

            if (var5 >= 0 && var5 < this.furnaceItemStacks.length)

            {

                this.furnaceItemStacks[var5] = ItemStack.loadItemStackFromNBT(var4);

            }

        }

 

        this.furnaceBurnTime = par1NBTTagCompound.getShort("BurnTime");

        this.furnaceCookTime = par1NBTTagCompound.getShort("CookTime");

        this.temperature = par1NBTTagCompound.getShort("HeatTime");

        this.currentItemBurnTime = getItemBurnTime(this.furnaceItemStacks[1]);

    }

 

    /**

    * Writes a tile entity to NBT.

    */

    public void writeToNBT(NBTTagCompound par1NBTTagCompound)

    {

        super.writeToNBT(par1NBTTagCompound);

        par1NBTTagCompound.setShort("BurnTime", (short)this.furnaceBurnTime);

        par1NBTTagCompound.setShort("CookTime", (short)this.furnaceCookTime);

        par1NBTTagCompound.setShort("HeatTime", (short)this.temperature);

        NBTTagList var2 = new NBTTagList();

 

        for (int var3 = 0; var3 < this.furnaceItemStacks.length; ++var3)

        {

            if (this.furnaceItemStacks[var3] != null)

            {

                NBTTagCompound var4 = new NBTTagCompound();

                var4.setByte("Slot", (byte)var3);

                this.furnaceItemStacks[var3].writeToNBT(var4);

                var2.appendTag(var4);

            }

        }

 

        par1NBTTagCompound.setTag("Items", var2);

    }

 

    /**

    * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't

    * this more of a set than a get?*

    */

    public int getInventoryStackLimit()

    {

        return 64;

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * Returns an integer between 0 and the passed value representing how close the current item is to being completely

    * cooked

    */

    public int getCookProgressScaled(int par1)

    {

        return this.furnaceCookTime * par1 / 200;

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * Returns an integer between 0 and the passed value representing how much burn time is left on the current fuel

    * item, where 0 means that the item is exhausted and the passed value means that the item is fresh

    */

    public int getBurnTimeRemainingScaled(int par1)

    {

        if (this.currentItemBurnTime == 0)

        {

            this.currentItemBurnTime = 200;

        }

 

        return this.furnaceBurnTime * par1 / this.currentItemBurnTime;

    }

 

    /**

    * Returns true if the furnace is currently burning

    */

    public boolean isBurning()

    {

        return this.furnaceBurnTime > 0;

    }

 

    /**

    * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count

    * ticks and creates a new spawn inside its implementation.

    */

    public void updateEntity()

    {

        boolean var1 = this.furnaceBurnTime > 0;

        boolean var2 = false;

 

        if (this.furnaceBurnTime > 0)

        {

            --this.furnaceBurnTime;

            if (this.temperature < 500)

            {

            ++this.temperature;

            }

            else

            {

            this.temperature=500;

            }

        }

        else

        {

        if (this.temperature > 0)

        {

        --this.temperature;

        }

        else

        {

        this.temperature = 0;

        }

        }

 

        if (!this.worldObj.isRemote)

        {

            if (this.furnaceBurnTime == 0 && this.canSmelt())

            {

                this.currentItemBurnTime = this.furnaceBurnTime = getItemBurnTime(this.furnaceItemStacks[1]);

 

                if (this.furnaceBurnTime > 0)

                {

                    var2 = true;

 

                    if (this.furnaceItemStacks[1] != null)

                    {

                        --this.furnaceItemStacks[1].stackSize;

 

                        if (this.furnaceItemStacks[1].stackSize == 0)

                        {

                            this.furnaceItemStacks[1] = this.furnaceItemStacks[1].getItem().getContainerItemStack(furnaceItemStacks[1]);

                        }

                    }

                }

            }

 

            if ((this.temperature>0) && this.canSmelt())

            {

            this.furnaceCookTime += this.temperature/200;

                if (this.furnaceCookTime >= 200)

                {

                    this.furnaceCookTime = 0;

                    this.smeltItem();

                    var2 = true;

                }

            }

            else

            {

                this.furnaceCookTime = 0;

            }

 

            if (var1 != this.furnaceBurnTime > 0)

            {

                var2 = true;

                TechnicalBlockFurnaceCopper.updateFurnaceBlockState(this.furnaceBurnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord);

            }

        }

 

        if (var2)

        {

            this.onInventoryChanged();

        }

    }

 

    /**

    * Returns true if the furnace can smelt an item, i.e. has a source item, destination stack isn't full, etc.

    */

    private boolean canSmelt()

    {

        if (this.furnaceItemStacks[0] == null)

        {

            return false;

        }

        else

        {

            ItemStack var1 = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]);

            if (var1 == null) return false;

            if (this.furnaceItemStacks[2] == null) return true;

            if (!this.furnaceItemStacks[2].isItemEqual(var1)) return false;

            int result = furnaceItemStacks[2].stackSize + var1.stackSize;

            return (result <= getInventoryStackLimit() && result <= var1.getMaxStackSize());

        }

    }

 

    /**

    * Turn one item from the furnace source stack into the appropriate smelted item in the furnace result stack

    */

    public void smeltItem()

    {

        if (this.canSmelt())

        {

            ItemStack var1 = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]);

 

            if (this.furnaceItemStacks[2] == null)

            {

                this.furnaceItemStacks[2] = var1.copy();

            }

            else if (this.furnaceItemStacks[2].isItemEqual(var1))

            {

                furnaceItemStacks[2].stackSize += var1.stackSize;

            }

 

            --this.furnaceItemStacks[0].stackSize;

 

            if (this.furnaceItemStacks[0].stackSize <= 0)

            {

                this.furnaceItemStacks[0] = null;

            }

        }

    }

 

    /**

    * Returns the number of ticks that the supplied fuel item will keep the furnace burning, or 0 if the item isn't

    * fuel

    */

    public static int getItemBurnTime(ItemStack par0ItemStack)

    {

        if (par0ItemStack == null)

        {

            return 0;

        }

        else

        {

            int var1 = par0ItemStack.getItem().shiftedIndex;

            Item var2 = par0ItemStack.getItem();

 

            if (par0ItemStack.getItem() instanceof ItemBlock && Block.blocksList[var1] != null)

            {

                Block var3 = Block.blocksList[var1];

 

                if (var3 == Block.woodSingleSlab)

                {

                    return 150;

                }

 

                if (var3.blockMaterial == Material.wood)

                {

                    return 300;

                }

            }

            if (var2 instanceof ItemTool && ((ItemTool) var2).func_77861_e().equals("WOOD")) return 200;

            if (var2 instanceof ItemSword && ((ItemSword) var2).func_77825_f().equals("WOOD")) return 200;

            if (var2 instanceof ItemHoe && ((ItemHoe) var2).func_77842_f().equals("WOOD")) return 200;

            if (var1 == Item.stick.shiftedIndex) return 100;

            if (var1 == Item.coal.shiftedIndex) return 1600;

            if (var1 == Item.bucketLava.shiftedIndex) return 20000;

            if (var1 == Block.sapling.blockID) return 100;

            if (var1 == Item.blazeRod.shiftedIndex) return 2400;

            return GameRegistry.getFuelValue(par0ItemStack);

        }

    }

 

    /**

    * Return true if item is a fuel source (getItemBurnTime() > 0).

    */

    public static boolean isItemFuel(ItemStack par0ItemStack)

    {

        return getItemBurnTime(par0ItemStack) > 0;

    }

 

    /**

    * Do not make give this method the name canInteractWith because it clashes with Container

    */

    public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer)

    {

        return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D;

    }

 

    public void openChest() {}

 

    public void closeChest() {}

 

    @Override

    public int getStartInventorySide(ForgeDirection side)

    {

        if (side == ForgeDirection.DOWN) return 1;

        if (side == ForgeDirection.UP) return 0;

        return 2;

    }

 

    @Override

    public int getSizeInventorySide(ForgeDirection side)

    {

        return 1;

    }

}

 

 

 

 

TechnicalGuiFurnaceCopper.java

 

 

package Technicraft;

 

import org.lwjgl.opengl.GL11;

import net.minecraft.src.*;

 

public class TechnicalGuiFurnaceCopper extends GuiContainer

{

    private TechnicalEntityFurnaceCopper furnaceInventory;

 

    public TechnicalGuiFurnaceCopper(InventoryPlayer par1InventoryPlayer, TechnicalEntityFurnaceCopper par2TileEntityFurnace)

    {

        super(new TechnicalContainerFurnaceCopper(par1InventoryPlayer, par2TileEntityFurnace));

        this.furnaceInventory = par2TileEntityFurnace;

    }

 

    /**

    * Draw the foreground layer for the GuiContainer (everything in front of the items)

    */

    protected void drawGuiContainerForegroundLayer()

    {

        this.fontRenderer.drawString(mod_Technicraft.local[1], 60, 6, 4210752);

        this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752);

    }

 

    /**

    * Draw the background layer for the GuiContainer (everything behind the items)

    */

    protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)

    {

        int var4 = this.mc.renderEngine.getTexture("/Technicraft/gui/furnace.png");

        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);

        this.mc.renderEngine.bindTexture(var4);

        int var5 = (this.width - this.xSize) / 2;

        int var6 = (this.height - this.ySize) / 2;

        this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize);

        int var7;

 

        if (this.furnaceInventory.isBurning())

        {

            var7 = this.furnaceInventory.getBurnTimeRemainingScaled(12);

            this.drawTexturedModalRect(var5 + 56, var6 + 36 + 12 - var7, 176, 12 - var7, 14, var7 + 2);

         

            var7 = this.furnaceInventory.getCookProgressScaled(24);

            this.drawTexturedModalRect(var5 + 79, var6 + 34, 176, 14, var7 + 1, 16);

           

            var7 = this.furnaceInventory.getTemperatureScaled(54);

            this.drawTexturedModalRect(var5 + 32, var6 + 16+54-var7, 176, 85-var7, 16, 85);

        }

        else

        {

            var7 = this.furnaceInventory.getBurnTimeRemainingScaled(12);

            this.drawTexturedModalRect(var5 + 56, var6 + 36 + 12 - var7, 176, 12 - var7, 14, var7);

           

            var7 = this.furnaceInventory.getCookProgressScaled(24);

            this.drawTexturedModalRect(var5 + 79, var6 + 34, 176, 14, var7 + 1, 16);

           

            var7 = this.furnaceInventory.getTemperatureScaled(54);

            this.drawTexturedModalRect(var5 + 32, var6 + 16+54-var7, 176, 85-var7, 16, 85);

        }

    }

}

 

 

 

I've update it becouse there was problem with function getTemperatureScaled, where int temperature returns bad value. I've started with moding month ago, so please help me. Thanks.

Posted

public static mod_Technicraft instance = new mod_Technicraft();

Thats wrong.

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Consider supporting the team on Patreon

Guest
This topic is now closed to further replies.

Announcements



×
×
  • Create New...

Important Information

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