Posted March 29, 201510 yr "Hurr durr use search fucktin!" I already did. I tried the code and looked over everything. None of it helped. Anyways! Here is my Tile Entity code with certain bits redacted since they're useless. How would one go about getting this to sync? package com.slothygaming.ironfurnaces; import java.util.logging.Level; import java.util.logging.Logger; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; 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.network.NetworkManager; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; public class TileEntityIronFurnace extends TileEntity implements ISidedInventory { public String TYPE; private static final int[] slotsTop = new int[] {0}; private static final int[] slotsBottom = new int[] {2, 1}; private static final int[] slotsSides = new int[] {1}; private ItemStack[] furnaceItemStacks = new ItemStack[3]; public int furnaceBurnTime; public int currentItemBurnTime; public int furnaceCookTime; private int maxCookTime; private String field_145958_o; public TileEntityIronFurnace(String furnaceType) { super(); this.TYPE = furnaceType; if(this.TYPE = "Hurr Durr") { this.maxCookTime = 175; } } public void func_145951_a(String p_145951_1_) { this.field_145958_o = p_145951_1_; } @Override public int getSizeInventory() { return this.furnaceItemStacks.length; } @Override public ItemStack getStackInSlot(int p_70301_1_) { return this.furnaceItemStacks[p_70301_1_]; } @Override public Packet getDescriptionPacket() { NBTTagCompound tagCompound = new NBTTagCompound(); writeToNBT(tagCompound); return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, tagCompound); } @Override public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { readFromNBT(pkt.func_148857_g()); } @Override public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) { if (this.furnaceItemStacks[p_70298_1_] != null) { ItemStack itemstack; if (this.furnaceItemStacks[p_70298_1_].stackSize <= p_70298_2_) { itemstack = this.furnaceItemStacks[p_70298_1_]; this.furnaceItemStacks[p_70298_1_] = null; return itemstack; } else { itemstack = this.furnaceItemStacks[p_70298_1_].splitStack(p_70298_2_); if (this.furnaceItemStacks[p_70298_1_].stackSize == 0) { this.furnaceItemStacks[p_70298_1_] = null; } return itemstack; } } else { return null; } } @Override public ItemStack getStackInSlotOnClosing(int p_70304_1_) { if (this.furnaceItemStacks[p_70304_1_] != null) { ItemStack itemstack = this.furnaceItemStacks[p_70304_1_]; this.furnaceItemStacks[p_70304_1_] = null; return itemstack; } else { return null; } } @Override public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) { this.furnaceItemStacks[p_70299_1_] = p_70299_2_; if (p_70299_2_ != null && p_70299_2_.stackSize > this.getInventoryStackLimit()) { p_70299_2_.stackSize = this.getInventoryStackLimit(); } } @Override public void readFromNBT(NBTTagCompound tag) { super.readFromNBT(tag); Logger.getAnonymousLogger().log(Level.WARNING, "Began Reading NBT"); NBTTagList nbttaglist = tag.getTagList("Items", 10); this.furnaceItemStacks = 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.furnaceItemStacks.length) { this.furnaceItemStacks[b0] = ItemStack.loadItemStackFromNBT(nbttagcompound1); Logger.getAnonymousLogger().log(Level.WARNING, "Saved Slotted Item: " + this.furnaceItemStacks[b0].getDisplayName()); } } this.maxCookTime = tag.getShort("MaxTimeForCook"); this.furnaceBurnTime = tag.getShort("BurnTime"); this.furnaceCookTime = tag.getShort("CookTime"); this.currentItemBurnTime = getItemBurnTime(this.furnaceItemStacks[1]); this.TYPE = tag.getString("FurnaceType"); if (tag.hasKey("CustomName", ) { this.field_145958_o = tag.getString("CustomName"); } Logger.getAnonymousLogger().log(Level.WARNING, "Finish Reading NBT"); } @Override public void writeToNBT(NBTTagCompound tag) { super.writeToNBT(tag); Logger.getAnonymousLogger().log(Level.WARNING, "Began Writing NBT"); tag.setShort("BurnTime", (short)this.furnaceBurnTime); tag.setShort("CookTime", (short)this.furnaceCookTime); tag.setShort("MaxTimeForCook", (short)this.maxCookTime); tag.setString("FurnaceType", this.TYPE); NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i < this.furnaceItemStacks.length; ++i) { if (this.furnaceItemStacks[i] != null) { NBTTagCompound nbttagcompound1 = new NBTTagCompound(); nbttagcompound1.setByte("Slot", (byte)i); this.furnaceItemStacks[i].writeToNBT(nbttagcompound1); nbttaglist.appendTag(nbttagcompound1); } } tag.setTag("Items", nbttaglist); if (this.hasCustomInventoryName()) { tag.setString("CustomName", this.field_145958_o); } Logger.getAnonymousLogger().log(Level.WARNING, "Finish Writing NBT"); } @Override public String getInventoryName() { String invName; if(this.TYPE == "Hurr Durr") { invName = "container.hurrdurr"; } return this.hasCustomInventoryName() ? this.field_145958_o : invName; } @SideOnly(Side.CLIENT) public int getCookProgressScaled(int p_145953_1_) { return this.furnaceCookTime * p_145953_1_ / this.maxCookTime; } @SideOnly(Side.CLIENT) public int getBurnTimeRemainingScaled(int p_145955_1_) { if (this.currentItemBurnTime == 0) { this.currentItemBurnTime = 200; } return this.furnaceBurnTime * p_145955_1_ / this.currentItemBurnTime; } public boolean isBurning() { return this.furnaceBurnTime > 0; } @Override public void updateEntity() { boolean flag = this.furnaceBurnTime > 0; boolean flag1 = false; if (this.furnaceBurnTime > 0) { --this.furnaceBurnTime; } if (!this.worldObj.isRemote) { if (this.furnaceBurnTime != 0 || this.furnaceItemStacks[1] != null && this.furnaceItemStacks[0] != null) { if (this.furnaceBurnTime == 0 && this.canSmelt()) { this.currentItemBurnTime = this.furnaceBurnTime = getItemBurnTime(this.furnaceItemStacks[1]); if (this.furnaceBurnTime > 0) { flag1 = true; if (this.furnaceItemStacks[1] != null) { --this.furnaceItemStacks[1].stackSize; if (this.furnaceItemStacks[1].stackSize == 0) { this.furnaceItemStacks[1] = furnaceItemStacks[1].getItem().getContainerItem(furnaceItemStacks[1]); } } } } if (this.isBurning() && this.canSmelt()) { ++this.furnaceCookTime; if (this.furnaceCookTime == this.maxCookTime) { this.furnaceCookTime = 0; this.smeltItem(); flag1 = true; } } else { this.furnaceCookTime = 0; } } if (flag != this.furnaceBurnTime > 0) { flag1 = true; Block furnace; Block furnaceOn; if(this.TYPE == "Hurr Durr") { furnace = Hurr.Durr; furnaceOn = Hurr.DurrOn; } BlockIronFurnace.updateFurnaceBlockState(this.furnaceBurnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord, furnace, furnaceOn); } } if (flag1) { this.worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); this.markDirty(); } } private boolean canSmelt() { if (this.furnaceItemStacks[0] == null) { return false; } else { ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]); if (itemstack == null) return false; if (this.furnaceItemStacks[2] == null) return true; if (!this.furnaceItemStacks[2].isItemEqual(itemstack)) return false; int result = furnaceItemStacks[2].stackSize + itemstack.stackSize; return result <= getInventoryStackLimit() && result <= this.furnaceItemStacks[2].getMaxStackSize(); //Forge BugFix: Make it respect stack sizes properly. } } public void smeltItem() { if (this.canSmelt()) { ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]); if (this.furnaceItemStacks[2] == null) { this.furnaceItemStacks[2] = itemstack.copy(); } else if (this.furnaceItemStacks[2].getItem() == itemstack.getItem()) { this.furnaceItemStacks[2].stackSize += itemstack.stackSize; // Forge BugFix: Results may have multiple items } --this.furnaceItemStacks[0].stackSize; if (this.furnaceItemStacks[0].stackSize <= 0) { this.furnaceItemStacks[0] = null; } } } public static int getItemBurnTime(ItemStack p_145952_0_) { if (p_145952_0_ == null) { return 0; } else { Item item = p_145952_0_.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(p_145952_0_); } } public static boolean isItemFuel(ItemStack p_145954_0_) { /** * Returns the number of ticks that the supplied fuel item will keep the furnace burning, or 0 if the item isn't * fuel */ return getItemBurnTime(p_145954_0_) > 0; } @Override public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) { return p_94041_1_ == 2 ? false : (p_94041_1_ == 1 ? isItemFuel(p_94041_2_) : true); } /** * Returns an array containing the indices of the slots that can be accessed by automation on the given side of this * block. */ @Override public int[] getAccessibleSlotsFromSide(int p_94128_1_) { return p_94128_1_ == 0 ? slotsBottom : (p_94128_1_ == 1 ? slotsTop : slotsSides); } /** * Returns true if automation can insert the given item in the given slot from the given side. Args: Slot, item, * side */ @Override public boolean canInsertItem(int p_102007_1_, ItemStack p_102007_2_, int p_102007_3_) { return this.isItemValidForSlot(p_102007_1_, p_102007_2_); } /** * Returns true if automation can extract the given item in the given slot from the given side. Args: Slot, item, * side */ @Override public boolean canExtractItem(int p_102008_1_, ItemStack p_102008_2_, int p_102008_3_) { return p_102008_3_ != 0 || p_102008_1_ != 1 || p_102008_2_.getItem() == Items.bucket; } @Override public boolean hasCustomInventoryName() { return this.field_145958_o != null && this.field_145958_o.length() > 0; } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer p_70300_1_) { return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : p_70300_1_.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; } @Override public void openInventory(){} @Override public void closeInventory(){} } http://www.slothygaming.com/img/ota.png[/img] If your grammar is shit and you blatantly don't know what you're doing, I will not help you.
March 29, 201510 yr Author I meant saving. Sorry for the confusion. http://www.slothygaming.com/img/ota.png[/img] If your grammar is shit and you blatantly don't know what you're doing, I will not help you.
March 29, 201510 yr Author Thanks! That fixed it. That's a bit odd... http://www.slothygaming.com/img/ota.png[/img] If your grammar is shit and you blatantly don't know what you're doing, I will not help you.
March 29, 201510 yr Author I wish it would output an error instead of just continuing on its way. http://www.slothygaming.com/img/ota.png[/img] If your grammar is shit and you blatantly don't know what you're doing, I will not help you.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.