Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

Hello,

 

So I recently started rewrite the Dual Input frunace from previous post. My issue is however, is creating a map that can store all 3 ItemStacks..

 

I know I have 2 options:

- A Wrapper

- Itteration

 

However, I dont really know how to create a Wrapper and apply it to the class, and I dont know how to iterate through the ItemStacks.

 

Any tips?

Relatively new to modding.

Currently developing:

https://github.com/LambdaXV/DynamicGenerators

  • Author

Okay, I'm having 'good' progress so far:

 

I now have the wrapper class that will hopefully will handle the ItemStacks.

package com.lambda.plentifulmisc.recipe;

import net.minecraft.item.ItemStack;

/**
* Created by Blake on 11/29/2016.
*/
public class InscriberWrapper {

    public final ItemStack item;

    public InscriberWrapper(ItemStack first, ItemStack i) {
        item = i;
    }

    @Override
    public int hashCode() {
        return 37*item.getItem().hashCode() + item.getMetadata();
    }

    @Override
    public boolean equals(Object o) {
        if(o instanceof InscriberWrapper) {
            InscriberWrapper other = (InscriberWrapper)o;
            return other.item == this.item && (other.item.getMetadata() == -1 || this.item.getMetadata() == -1 || other.item.getMetadata() == this.item.getMetadata());
        }
        return false;
    }
}

 

Also, I have some progress in the recipes, but here is where I'm stuck, comparing the Items:

    public void getResult(ItemStack stack) {
        for(Map.Entry<List<InscriberWrapper>, ItemStack> entry : this.dualList.entrySet()) {
            if(ItemUtil.areItemsEqual(stack, entry.getKey()) { // Here, I know why, but I dont know how'd I do this

            }
        }
    }

 

ItemUtil#areItemsEqual method is a simple comparison using the item &metadata.

 

Here is the Hash:

    private Map<List<InscriberWrapper>, ItemStack> dualList = new HashMap();

Relatively new to modding.

Currently developing:

https://github.com/LambdaXV/DynamicGenerators

Uh...?

public class InscriberWrapper {

    public final ItemStack item1;
    public final ItemStack item2;
    public final ItemStack item3;

    public InscriberWrapper(ItemStack first, ItemStack second, ItemStack third) {
        item1 = first;
        item2 = second;
        item3 = third;
    }
...

private Map<InscriberWrapper, ItemStack> dualList = new HashMap();

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.

Ah, yes, a list that way. I was more focused on writing a proper "wrapper" around the three ingredients.

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.

  On 11/29/2016 at 10:25 PM, Lambda said:

How would I handle the hashcode + equals functions?

 

this.item1 == that.item1 && this.item2 == that.item2, etc.

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.

  • Author

Okay, how bout the hashcode? or would I not need that due to using an ArrayList instead?

 

return other.item1 == this.item1 && (other.item1.getMetadata() == -1 || this.item1.getMetadata() == -1 || other.item1.getMetadata() == this.item1.getMetadata()) && other.item2 == this.item2 &&(other.item2.getMetadata() == -1 || this.item2.getMetadata() == -1 || other.item2.getMetadata() == this.item2.getMetadata())
                    && other.item3 == this.item3 &&(other.item3.getMetadata() == -1 || this.item3.getMetadata() == -1 || other.item3.getMetadata() == this.item3.getMetadata());

This is what equals returns now.

Relatively new to modding.

Currently developing:

https://github.com/LambdaXV/DynamicGenerators

"other.item1 == this.item1" was not meant to be used literally. You can't compare ItemStacks that way

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.

Well, if you want Blue Carpet and Blue Wool to be considered the same...

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.

Well, only if you want red wool and blue wool to be considered the same...

 

You have to check both the

Item

and the metadata.

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/

Use

ItemStack#isItemEqual

or

ItemStack.areItemsEqual

to check if the

Item

and metadata of the two

ItemStack

s are equal.

 

Use

ItemStack.areItemStacksEqual

to check if the

Item

, metadata and NBT of the two

ItemStack

s are equal.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

  • Author

here is the hash my IDE created.

    @Override
    public int hashCode() {
        int result = item1 != null ? item1.hashCode() : 0;
        result = 31 * result + (item2 != null ? item2.hashCode() : 0);
        result = 31 * result + (item3 != null ? item3.hashCode() : 0);
        return result;
    }

 

Aswell, here is the updated equals:

            return ItemUtil.areItemsEqual(other.item1, this.item2, true) && ItemUtil.areItemsEqual(other.item2, this.item2, true) && ItemUtil.areItemsEqual(other.item1, this.item3, true);

 

areItemsEqual:

  public static boolean areItemsEqual(ItemStack stack1, ItemStack stack2, boolean checkWildcard){
        return StackUtil.isValid(stack1) && StackUtil.isValid(stack2) && (stack1.isItemEqual(stack2) || (checkWildcard && stack1.getItem() == stack2.getItem() && (stack1.getItemDamage() == UtilBase.WILDCARD || stack2.getItemDamage() == UtilBase.WILDCARD)));
    }

Relatively new to modding.

Currently developing:

https://github.com/LambdaXV/DynamicGenerators

  • Author

Okay futher progress:

 

getResult has been finished I belive:


    public InscriberWrapper getResult(ItemStack input, ItemStack inputSecond) {
        for(InscriberWrapper recipe : dualList) {
            if(ItemUtil.areItemsEqual(recipe.item1, stack, true) && ItemUtil.areItemsEqual(recipe.item2, inputSecond, true)) {
                return recipe;
            }
        }
        return null;
    }

 

however, addDualListRecipes is confusing me a bit, how would I 'put' ItemStacks into the ArrayList

    public void addDualRecipes(ItemStack input, ItemStack inputSecond, ItemStack output)
    {
        
    }

Relatively new to modding.

Currently developing:

https://github.com/LambdaXV/DynamicGenerators

  On 11/30/2016 at 2:25 AM, Lambda said:

Okay futher progress:

 

getResult has been finished I belive:


    public InscriberWrapper getResult(ItemStack input, ItemStack inputSecond) {
        for(InscriberWrapper recipe : dualList) {
            if(ItemUtil.areItemsEqual(recipe.item1, stack, true) && ItemUtil.areItemsEqual(recipe.item2, inputSecond, true)) {
                return recipe;
            }
        }
        return null;
    }

 

however, addDualListRecipes is confusing me a bit, how would I 'put' ItemStacks into the ArrayList

    public void addDualRecipes(ItemStack input, ItemStack inputSecond, ItemStack output)
    {
        
    }

Add a new entry to your list.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

  On 11/30/2016 at 2:33 AM, Lambda said:

however,

 

dualList.add(//adding an itemstack or ....

You created a wrapper for a reason.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

ItemStack

doesn't override

Object#hashCode

, so two

ItemStack

s will only have the same hash code if they're the same object.

 

You shouldn't actually need to override

Object#hashCode

if your recipe class isn't being used as the key of a

HashMap

. If you do override it, you need to generate your own hash code for each

ItemStack

based on the parts your recipe cares about (

Item

, metadata, NBT and/or capabilities).

 

Are you sure your updated

equals

method is correct? You're comparing

item1

and

item2

,

item2

and

item2

and

item1

and

item3

. Should you not be comparing

item1

and

item1

,

item2

and

item2

,

item3

and

item3

?

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

  • Author

:blank:

 

    public void addDualRecipes(InscriberWrapper input, InscriberWrapper inputSecond)
    {
        dualList.add(input);
        dualList.add(inputSecond);
    }

 

So this then :?

 

and Choonster: (Quotes got screwed up)

 

Yeah, I updated them.. saw that after I posted it and forgot to edit :/

and Yes, I'm using an ArrayList to store my ItemStacks now. So I would not need the HashMap key correct? here is the entire class for reference:

 

Reveal hidden contents

 

 

 

Relatively new to modding.

Currently developing:

https://github.com/LambdaXV/DynamicGenerators

Your experienceList is also probably not going to work (it's a map and ItemStack does not override equals or hashcode, making it a bad class to use as a key).

 

    public void addDualRecipes(InscriberWrapper input, InscriberWrapper inputSecond)
    {
        dualList.add(input);
        dualList.add(inputSecond);
    }

 

For fuck's sake.  Your "add recipe" method should take ItemStacks and you wrap them in the wrapper then add that wrapper to the list.

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.

  On 11/30/2016 at 2:41 AM, Lambda said:

:blank:

 

    public void addDualRecipes(InscriberWrapper input, InscriberWrapper inputSecond)
    {
        dualList.add(input);
        dualList.add(inputSecond);
    }

 

So this then :?

No keep the ItemStacks add a new instance to your list, your list should ask for your wrapper.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

  • Author

    public void addDualRecipes(ItemStack input, ItemStack inputSecond, ItemStack output)
    {
        dualList.add(new InscriberWrapper(input, inputSecond, output));
    }

 

Ah! So that should work now! Is everything else 'ok', because all I have to do now is integrate it into my TE.

 

Note: Should I remove the output ItemStack?

Relatively new to modding.

Currently developing:

https://github.com/LambdaXV/DynamicGenerators

Your input is two itemstacks, then yes, you need to make your wrapper a 2-stack object.

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.

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.