Jump to content

Recommended Posts

Posted

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));

Posted

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.

Posted

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

Posted

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.

Posted

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();

        }

    }

Posted

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.

Posted

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();
	}
}

Posted

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/

Posted

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I hosted forge modded server using feather client I was able to join without any issues yesterday, but today after I tested my shader on my single world then tried to join the world but it made error meassage. (I also changed server.properties's render settings, but I reverted it as same as yesterday) So I removed my shader and removed optifine on server and on my mod file then it made this error: Internal Exception: io.netty.handler.codec.DecoderException: net.minecraft.ResourceLocationException: Non [a-z0-9/-1 character in path of location: inecraft:ask_server\u0012\u0001\uFFFD\n\u0007targets\u001D\u0001\u0014minecraft:ask_server\u0012\u0002\uFFFD\n\uFFFD\n\u0002id!\u0014minecraft:ask_server\u0002 \u0001\uFFFD\n\u0006target\u0006\u0001\u0002\u0001\uFFFD\n\ttarget My server/client is 1.20.1 forge. And I got 34 mods total, it was working pretty fine yesterday (I did not add/remove any mods before it started happening) I hope it's not about my worlds, it's been quite long since using this world I'm not native english speaker so there may be grammar issue! Thank you for reading!
    • I run a forge server with a bunch of mods that randomly started having extreme tick problems. I have no clue on how to or where to start reading this crash report, so some help would be greatly appreciated. I've tried changing max tick time to -1 in server.properties, and this did stop the server from crashing, but there's no point in playing as every action in-game takes several seconds to execute.   log: https://pastebin.com/UjQ6G5A4 crash report:  https://pastebin.com/RDZmpYMD
    • bruh this is silly, it wount let me delete.
    • So am trying to make a custom 1.19.2 modpack and everything works until I add Oculus. I have tried Oculus+Embedium and Oculus+Rubdium and by themselves they work but as soon as I add anything it crashes no matter what it is. The modpack works fine with just Embedium and Rubdium. Can you help me to see if this is something i can fix or do i just have to deal with not having shaders. Here is the crash log. Thank you for your time. https://paste.ee/p/WXfNZ24K
    • What do I do now when it says "1 error"?
  • Topics

×
×
  • Create New...

Important Information

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