Posted January 10, 20178 yr Im trying to create a furnace with 2 inputs, 2 outputs, and 1 fuel that will smelt both items at the same time and I cant figure out the update method to get this to work. I can get one slot or the other to smelt but not at the same time. Any help would be greatly appreciated Heres my Tile http://pastebin.com/yUScx40u and this is how i have my slots setup this.addSlotToContainer(new Slot(furnaceInventory, 0, 70, 21)); this.addSlotToContainer(new Slot(furnaceInventory, 1, 70, 48)); this.addSlotToContainer(new SlotFurnaceFuel(furnaceInventory, 2, 14, 53)); this.addSlotToContainer(new SlotFurnaceOutput(playerInventory.player, furnaceInventory, 3, 132, 35)); this.addSlotToContainer(new SlotFurnaceOutput(playerInventory.player, furnaceInventory, 4, 132, 55));
January 11, 20178 yr Your slot setup is irrelevant to making the recipe work. What is your goal here, are both inputs required (copper ore + tin ore -> bronze)? Or are you making a "double furnace" where you've got two separate inputs that smelt to their respective outputs (iron ore -> iron bars, twice)? Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
January 11, 20178 yr Author I'm wanting to make a Double Furnace that runs in parallel not an Alloy Smelter and I put the slot set up there that way ppl could see what slot numbers I was using just in case Iv got a slot number out of place
January 11, 20178 yr So, what you'll need to do is check if slot 0 or slot 1 is smeltable, and that the output can go to slot 3 or 4 (respectively). If either is valid, start burning fuel. You'll also need two timers. Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
January 11, 20178 yr Author Thats what i did i have 2 canSmelts and 2 smeltItems one for each input output iv also got 2 cookTimes thats why i think my prob is in my update method public void update() { boolean flag = this.isBurning(); boolean flag1 = false; if (this.isBurning()) { --this.furnaceBurnTime; } if (!this.worldObj.isRemote) { if (this.isBurning() || this.furnaceItemStacks[2] != null && this.furnaceItemStacks[1] != null) { if (!this.isBurning() && this.canSmelt1()) { this.furnaceBurnTime = getItemBurnTime(this.furnaceItemStacks[2]); this.currentItemBurnTime = this.furnaceBurnTime; if (this.isBurning()) { flag1 = true; if (this.furnaceItemStacks[2] != null) { --this.furnaceItemStacks[2].stackSize; if (this.furnaceItemStacks[2].stackSize == 0) { this.furnaceItemStacks[2] = furnaceItemStacks[2].getItem() .getContainerItem(furnaceItemStacks[2]); } } } } if (this.isBurning() && this.canSmelt1()) { ++this.cookTime; if (this.cookTime == this.totalCookTime) { this.cookTime = 0; this.totalCookTime = this.getCookTime(this.furnaceItemStacks[0]); this.smeltItem2(); flag1 = true; } } else { this.cookTime = 0; } } if (this.isBurning() || this.furnaceItemStacks[2] != null && this.furnaceItemStacks[1] != null) { if (!this.isBurning() && this.canSmelt2()) { this.furnaceBurnTime = getItemBurnTime(this.furnaceItemStacks[2]); this.currentItemBurnTime = this.furnaceBurnTime; if (this.isBurning()) { flag1 = true; if (this.furnaceItemStacks[2] != null) { --this.furnaceItemStacks[2].stackSize; if (this.furnaceItemStacks[2].stackSize == 0) { this.furnaceItemStacks[2] = furnaceItemStacks[1].getItem() .getContainerItem(furnaceItemStacks[2]); } } } } if (this.isBurning() && this.canSmelt2()) { ++this.cookTime2; if (this.cookTime2 == this.totalCookTime) { this.cookTime2 = 0; this.totalCookTime = this.getCookTime(this.furnaceItemStacks[1]); this.smeltItem2(); flag1 = true; } } else { this.cookTime2 = 0; } } else if (!this.isBurning() && this.cookTime > 0) { this.cookTime = MathHelper.clamp_int(this.cookTime - 2, 0, this.totalCookTime); } else if (!this.isBurning() && this.cookTime2 > 0) { this.cookTime2 = MathHelper.clamp_int(this.cookTime2 - 2, 0, this.totalCookTime); } if (flag != this.isBurning()) { flag1 = true; BlockFurnace.setState(this.isBurning(), this.worldObj, this.pos); } } if (flag1) { this.markDirty(); } }
January 11, 20178 yr You have this check (twice, even): if (this.isBurning() || this.furnaceItemStacks[2] != null && this.furnaceItemStacks[1] != null) Double check that for yourself and make sure that it's doing what you want. (Hint: its not) Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
January 11, 20178 yr Author Thanks that got me looking a a few things first I didnt set cookTime2 which meant I needed another isBurning to account for cookTime2 because you cant have a || inside of a bool so I redid the update and Im still having no luck and yes Iv tried merging them into || statements and Iv also changed around the order as well. This cant be all that hard the Grey Ghost did it sequentially so there has to be a way to do it in parallel. https://github.com/TheGreyGhost/MinecraftByExample/tree/1-10-2-inprogress/src/main/java/minecraftbyexample/mbe31_inventory_furnace public void update() { boolean flag = this.isBurning1(); boolean flag1 = this.isBurning2(); boolean flag2 = false; if (this.isBurning1() || this.isBurning2()) { --this.furnaceBurnTime; } if (!this.worldObj.isRemote) { if (this.isBurning1() || this.slots[2] != null && this.slots[0] != null) { if (!this.isBurning1() && this.canSmeltSlot1()) { this.furnaceBurnTime = getItemBurnTime(this.slots[2]); this.currentItemBurnTime = this.furnaceBurnTime; if (this.isBurning1()) { flag2 = true; if (this.slots[2] != null) { --this.slots[2].stackSize; if (this.slots[2].stackSize == 0) { this.slots[2] = slots[2].getItem().getContainerItem(slots[2]); } } } } if (this.isBurning1() && this.canSmeltSlot1()) { ++this.cookTime1; if (this.cookTime1 == this.totalCookTime) { this.cookTime1 = 0; this.totalCookTime = this.getCookTime(this.slots[0]); this.smeltItemSlot2(); ; flag2 = true; } } else { this.cookTime1 = 0; } } else if (!this.isBurning1() && this.cookTime1 > 0) { this.cookTime1 = MathHelper.clamp_int(this.cookTime1 - 2, 0, this.totalCookTime); } if (this.isBurning2() || this.slots[2] != null && this.slots[1] != null) { if (!this.isBurning2() && this.canSmeltSlot2()) { this.furnaceBurnTime = getItemBurnTime(this.slots[2]); this.currentItemBurnTime = this.furnaceBurnTime; if (this.isBurning2()) { flag2 = true; if (this.slots[2] != null) { --this.slots[2].stackSize; if (this.slots[2].stackSize == 0) { this.slots[2] = slots[1].getItem().getContainerItem(slots[2]); } } } } if (this.isBurning2() && this.canSmeltSlot2()) { ++this.cookTime2; if (this.cookTime2 == this.totalCookTime) { this.cookTime2 = 0; this.totalCookTime = this.getCookTime(this.slots[1]); this.smeltItemSlot2(); ; flag2 = true; } } else { this.cookTime2 = 0; } } else if (!this.isBurning2() && this.cookTime2 > 0) { this.cookTime2 = MathHelper.clamp_int(this.cookTime2 - 2, 0, this.totalCookTime); } if (flag1 != this.isBurning1() || this.isBurning2()) { flag2 = true; BlockFurnace.setState(this.isBurning1(), this.worldObj, this.pos); } } if (flag2) { this.markDirty(); } }
January 12, 20178 yr 2 questions: do you understand and know what each line in your code does? If not, do you at least know Java? Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
January 12, 20178 yr Author Im no expert but yes to both, but thats why Im asking for help like I said I have reworked this code every which way I can. The posted codes are by no means all that I have done, and so far i have been able to get ether one slot or the other to smelt but not the other, or both slots smelt together but only if you have items in both input slots, and more but those werent even close. So right now I know Im missing something simple because Iv gotten close I just cant figure out why.
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.