
hotrods20
Members-
Posts
197 -
Joined
-
Last visited
Everything posted by hotrods20
-
I wish it would output an error instead of just continuing on its way.
-
Thanks! That fixed it. That's a bit odd...
-
I meant saving. Sorry for the confusion.
-
"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(){} }
-
[1.7.10]lit_redstone_ore not added in oreDictionary, can't add it.
hotrods20 replied to hotrods20's topic in Modder Support
@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. -
[1.7.10]lit_redstone_ore not added in oreDictionary, can't add it.
hotrods20 replied to hotrods20's topic in Modder Support
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. -
[1.7.10]lit_redstone_ore not added in oreDictionary, can't add it.
hotrods20 replied to hotrods20's topic in Modder Support
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? -
[1.7.10]lit_redstone_ore not added in oreDictionary, can't add it.
hotrods20 replied to hotrods20's topic in Modder Support
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. -
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?
-
[1.7.10]Load chunk in world for until an inventory is closed?
hotrods20 replied to hotrods20's topic in Modder Support
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. -
[1.7.10]Load chunk in world for until an inventory is closed?
hotrods20 replied to hotrods20's topic in Modder Support
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. -
[1.7.10]Load chunk in world for until an inventory is closed?
hotrods20 replied to hotrods20's topic in Modder Support
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. -
[1.7.10]Load chunk in world for until an inventory is closed?
hotrods20 replied to hotrods20's topic in Modder Support
BUMP. can anyone help? -
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.
-
You can keep the current one.
-
Do the other recipes work?
-
Could we see your source code?
-
[1.7.10] Server - No Class Def Found Error [SOLVED]
hotrods20 replied to Rui's topic in Modder Support
At some point you aren't declaring them to use your model or the default model. -
I'm currently coding an item that will open up inventories in other worlds. The problem is that it doesn't work outside the dimension that you're currently in. Not really sure where to go from here. @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer player, World world, int x, int y, int z, int par7, float par8, float par9, float par10) { Block blockID; int blockX; int blockY; int blockZ; if(itemstack.getTagCompound() == null) { itemstack.setTagCompound(new NBTTagCompound()); return true; } else if(itemstack.getTagCompound().getBoolean("hasSet") == false) { itemstack.getTagCompound().setInteger("BlockX", x); itemstack.getTagCompound().setInteger("BlockY", y); itemstack.getTagCompound().setInteger("BlockZ", z); itemstack.getTagCompound().setInteger("WorldNumber", world.provider.dimensionId); itemstack.getTagCompound().setBoolean("hasSet", true); itemstack.getTagCompound().setString("BlockName", world.getBlock(x, y, z).getLocalizedName()); return true; } else { blockX = itemstack.getTagCompound().getInteger("BlockX"); blockY = itemstack.getTagCompound().getInteger("BlockY"); blockZ = itemstack.getTagCompound().getInteger("BlockZ"); blockID = world.getBlock(blockX, blockY, blockZ); if(blockID != null) { WorldServer ws1 = MinecraftServer.getServer().worldServerForDimension(itemstack.getTagCompound().getInteger("WorldNumber")); if(!ws1.isRemote) if(blockID.onBlockActivated(ws1, blockX, blockY, blockZ, player, par7, par8, par9, par10) == false) { itemstack.getTagCompound().setBoolean("hasSet", false); itemstack.getTagCompound().setInteger("BlockX", 0); itemstack.getTagCompound().setInteger("BlockY", 0); itemstack.getTagCompound().setInteger("BlockZ", 0); itemstack.getTagCompound().setInteger("WorldNumber", 0); itemstack.getTagCompound().setString("BlockName", ""); return false; } } else { itemstack.getTagCompound().setBoolean("hasSet", false); itemstack.getTagCompound().setInteger("BlockX", 0); itemstack.getTagCompound().setInteger("BlockY", 0); itemstack.getTagCompound().setInteger("BlockZ", 0); itemstack.getTagCompound().setInteger("WorldNumber", 0); itemstack.getTagCompound().setString("BlockName", ""); } return true; } } public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer player) { Block blockID; int blockX; int blockY; int blockZ; if(itemstack.getTagCompound() != null) { blockX = itemstack.getTagCompound().getInteger("BlockX"); blockY = itemstack.getTagCompound().getInteger("BlockY"); blockZ = itemstack.getTagCompound().getInteger("BlockZ"); blockID = world.getBlock(blockX, blockY, blockZ); if(blockID != null) { WorldServer ws1 = MinecraftServer.getServer().worldServerForDimension(itemstack.getTagCompound().getInteger("WorldNumber")); if(!ws1.isRemote){ if(blockID.onBlockActivated(ws1, blockX, blockY, blockZ, player, 0, 0.0F, 0.0F, 0.0F) == false) { itemstack.getTagCompound().setBoolean("hasSet", false); itemstack.getTagCompound().setInteger("BlockX", 0); itemstack.getTagCompound().setInteger("BlockY", 0); itemstack.getTagCompound().setInteger("BlockZ", 0); itemstack.getTagCompound().setInteger("WorldNumber", 0); itemstack.getTagCompound().setString("BlockName", ""); }} } else { itemstack.getTagCompound().setBoolean("hasSet", false); itemstack.getTagCompound().setInteger("BlockX", 0); itemstack.getTagCompound().setInteger("BlockY", 0); itemstack.getTagCompound().setInteger("BlockZ", 0); itemstack.getTagCompound().setInteger("WorldNumber", 0); itemstack.getTagCompound().setString("BlockName", ""); } } else { itemstack.setTagCompound(new NBTTagCompound()); } return itemstack; } EDIT: Added the entire right-click event. EDIT2: Added onItemUse
-
[b1.7.3]Do anybody have a plan how to code mods in beta 1.7.3?
hotrods20 replied to KingNXT's topic in Modder Support
I began modding back around then. Trust me, you don't want to mod for 1.7.3. It's an awesome version and I love the world generation and all but you will not find an ounce of support. I would gladly help but I am pretty sure no one plays it anymore. -
[1.7.10] Thermal Expansion/Foundation dev/deobf download
hotrods20 replied to WARDOGSK93's topic in Modder Support
Using the dev version with CodeChicken core works. Make sure you're using the dev versions of Thermal Foundation and CoFH Core. -
random.explode works if you use World.playSoundEffect.
-
I don't think the drowning effect is possible unless you can cause the check for block.getMaterial at isInsideOfMaterial in Entity to return true. The alternative is program a "drowning" effect. I think Galaticraft has a "drowning" effect in space, best to check, https://github.com/micdoodle8/Galacticraft. If I find anything in there for you, I'll just edit this post. EDIT: One thing that may peak your interest is https://github.com/micdoodle8/Galacticraft/blob/master/src/main/java/micdoodle8/mods/galacticraft/core/event/EventHandlerGC.java at the entityLivingEvent.
-
By taking a look at the code, couldn't you handle drowning by using an event handler using entityLivingEvent(Forgot name, not sure if it)? Then create your own MaterialLiquid?
-
Have you considered looking at other mods that add biomes? Maybe some kind of mod that adds* plenty of biomes. Maybe their source is available on some kind of hub of gits. If you don't get the hints, https://github.com/Glitchfiend/BiomesOPlenty