Jump to content

1.15.2, recipe, return item with damage


reapersremorse

Recommended Posts

hello and thank you to anyone who reads this.
im trying to make a containeritem, it seems it does not work the same in this version.
just to be clear, i do not want to create a gui, i want to create an item which returns to the player inventory or stays in crafting grid after a craft is preformed.
much like the old equivalent exchange philosopher stone, or the juicer from many other mods. and i would like to change damage on craft.

i tried passing hasContainerItem and i could not figure out what i did wrong. (im not great at java and the last time i made a mod was 1.10.2, my mod was not released)

here is base code before i tried properly setting up the constructors (if i do anything else, the class throws errors)

 

Spoiler

image.thumb.png.9cdabe992ca088b30b24b93dfb38e8a5.png

raw code

public class UTOContainerItem extends Item
{
    //TODO: make it so i can change all attributes of an item aswell as add tooltips to items in 1 line of code in the init class.
    public UTOContainerItem
            (Properties properties) {
        super(properties);
    }

    @Override
    public void addInformation(ItemStack stack, @Nullable World worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
        super.addInformation(stack, worldIn, tooltip, flagIn);
    }

    @Override
    public boolean hasEffect(ItemStack stack) {
        return true;
    }

    @Override
    public boolean hasContainerItem(ItemStack stack) {
        return true;
    }
}

 

Link to comment
Share on other sites

when i return null and craft an item, i crash (of course)
when i try to return ItemInit.MYITEM, or when i try to return (this) the code is not functional.

so i tried returning itemStack
this allows the crafting to work without crashing but the item is still used up.


    @Override
    public ItemStack getContainerItem(ItemStack itemStack) {
        return itemStack;
    }


this bit of code is the only thing my tiny brain has gotten to work. (by work i mean it didn't crash)

i tried returning a specific item, tried passing the itemstack in the constructor, i tried a few different things. 

 

should i be passing getContainerItem in the init class instead?

 

@Override
    public ItemStack getContainerItem(ItemStack itemStack) {
        return ItemInit.uto_generic_eye;
    }//when i try this, its all errored

when i try to pass a specific item, it errors and becomes unusable.

im finding it hard to find information on this topic, could i maybe find this in the energy api or something?

Link to comment
Share on other sites

@Override
    public ItemStack getContainerItem(ItemStack itemStack) {
        return ItemInit.uto_generic_eye;
    }//when i try this, its all errored

This will never work because it is asking for an itemstack, I think you will need to return a damaged itemstack here

 

 

Link to comment
Share on other sites

thanks ill do that, i thought i sent this earlier. that totally fixed my issues btw thanks @diesieben07 

@poopoodice i understood that, i was just testing things. 

 

i ended up looking to make sure the item was a container item then if it is i make it one by returning itemstack. 
it was the easiest and most simplistic way to do it.

the issue is fixed now.

 

public class UTOContainerItem extends Item
{
    //TODO: make RepairItemRecipe much more elaborate
    public UTOContainerItem
            (Properties properties) { super(properties); }

    @Override
    public boolean hasEffect(ItemStack stack){return true;}

    @Override
    public void setDamage(ItemStack stack, int damage){}

    @Override
    public boolean isRepairable(ItemStack stack) {
        return super.isRepairable(stack);
    }

    @Override
    public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) {
        return super.getIsRepairable(toRepair, repair);
    }

    @Override
    public boolean hasContainerItem(ItemStack stack){return true;}

    @Override
    public ItemStack getContainerItem(ItemStack itemStack)
    {
        if (!hasContainerItem(itemStack))
        {
            return ItemStack.EMPTY;
        }
        return new ItemStack(getItem());
    }
}

 

Link to comment
Share on other sites

59 minutes ago, reapersremorse said:

if (!hasContainerItem(itemStack))

You don't need to do this.

1) getContainerItem is only called if hasContainerItem returns true

2) Its your own god damn item and you already always return true...

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.

Link to comment
Share on other sites

9 minutes ago, Draco18s said:

You don't need to do this.

1) getContainerItem is only called if hasContainerItem returns true

2) Its your own god damn item and you already always return true...

i plan to make a more advanced constructor in the future, one where when i initialize items. i can choose container item as a property. doing this now just means i shouldn't have to do it in the future. unless i have to change it. 

Link to comment
Share on other sites

Point 1 still remains relevant. You don't need to check again.

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.

Link to comment
Share on other sites

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



×
×
  • Create New...

Important Information

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