Jump to content

hotrods20

Members
  • Posts

    197
  • Joined

  • Last visited

Converted

  • Gender
    Male
  • URL
    http://slothygaming.com
  • Location
    Sloth HQ
  • Personal Text
    Rock down to Electric Avenue

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

hotrods20's Achievements

Creeper Killer

Creeper Killer (4/8)

8

Reputation

  1. I wish it would output an error instead of just continuing on its way.
  2. Thanks! That fixed it. That's a bit odd...
  3. "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(){} }
  4. @Draco, sorry I didn't understand what you said when I first read it. That's not a bad idea and might make it easier. I'll try that, thank you.
  5. I have to do it by ore dictionary because many other mods add their own ores and I can't account for every single mod. Using the ore dictionary simplifies this by getting ores registered to the ore dictionary and allows for custom ores to be added to my mod by adding them to a config file. I've decided of just making a special exception for lit_redstone_ore. @Draco, yes, that's what I am doing.
  6. The problem is that when redstone ore is activated(lit), it won't/can't be affected by my item. Would I just have to put a special exception in my code to handle this or is there another way to do this?
  7. I don't do it in pre. I do it in post. I tried doing it in init but it produced the same error there.
  8. So, I have a tool that uses the ore dictionary to mine certain ores but Blocks.lit_redstone_ore isn't default in the ore dictionary. I tried adding it with, OreDictionary.registerOre("oreRedstone", (Block)Blocks.lit_redstone_ore); in my post initialization event but the game gave me the error, I'm not sure what it is referring to or if I can even fix it. Anyone able to help?
  9. No, it works for all dimensions. It just doesn't interact with things in other dimensions since the client only knows about one dimension at a time.
  10. You mean inventories of other dimensions? I'll have to make it so players can't use the item unless they're in the same dimension as the inventory.
  11. All I really need is load the exact inventory at the exact coords. Like, somehow send a message to the server to load the dimension at that chunk, open the inventory, and send back that information to the client. I'm not sure how to do that though.
  12. Oh, I don't know much of all about Forge for 1.8. I wish you specified. Sorry, I can't be of much help today.
  13. You can keep the current one.
×
×
  • Create New...

Important Information

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