Jump to content

[1.11.2] Make item stay in crafting and decrease durability


Villfuk02

Recommended Posts

Override hasContainerItem and getContainerItem

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

Should be obvious. The first one you want to return true and in the second one you want to take the item stack passed in, damage it, and return it.

  • Like 1

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

WAT?
still doesn't work:

public class QuartzKnife extends Item {
	
	public QuartzKnife(String unlocalizedName){
		this.setUnlocalizedName(unlocalizedName);
		this.setRegistryName(new ResourceLocation(Reference.MODID, unlocalizedName));
		this.setMaxStackSize(1);
		this.setMaxDamage(256);
	}
	
	@Override
	public boolean hasContainerItem(ItemStack stack) {		
		return true;
	}
	
	@Override
	public ItemStack getContainerItem(ItemStack itemStack) {
		itemStack.setItemDamage(itemStack.getItemDamage() + 1);
		return super.getContainerItem(itemStack);
	}
}

 

Link to comment
Share on other sites

That's not what Draco told you to do.

 

You damage the ItemStack, but then you return the result of the super method (a completely separate ItemStack). The original ItemStack that you damaged is ignored.

 

You need to return the ItemStack that you damaged.

  • Like 1

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.

Link to comment
Share on other sites

5 minutes ago, Villfuk02 said:

WAT?
still doesn't work:


public class QuartzKnife extends Item {
	
	public QuartzKnife(String unlocalizedName){
		this.setUnlocalizedName(unlocalizedName);
		this.setRegistryName(new ResourceLocation(Reference.MODID, unlocalizedName));
		this.setMaxStackSize(1);
		this.setMaxDamage(256);
	}
	
	@Override
	public boolean hasContainerItem(ItemStack stack) {		
		return true;
	}
	
	@Override
	public ItemStack getContainerItem(ItemStack itemStack) {
		itemStack.setItemDamage(itemStack.getItemDamage() + 1);
		return super.getContainerItem(itemStack);
	}
}

 

You are returning super.getContainerItem, which is null.

  • Like 1
Link to comment
Share on other sites

6 minutes ago, Tschipp said:

I was just about to ask the same question, but then I saw this thread.

This all works for me, but after i've used the item once in crafting (meaning its damaged), I can no longer use it.

Note that I am using a shapeless OreDict recipe.

 

You're probably using 0 as the ingredient's metadata when adding the recipe, so only metadata 0 is accepted. Use OreDictionary.WILDCARD_VALUE to accept any metadata value.

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.

Link to comment
Share on other sites

1 minute ago, Choonster said:

 

You're probably using 0 as the ingredient's metadata when adding the recipe, so only metadata 0 is accepted. Use OreDictionary.WILDCARD_VALUE to accept any metadata value.

Nope, as I mentioned, I'm using a oreDictionary entry, in this case "listAllwater"

Link to comment
Share on other sites

Just now, Tschipp said:

Nope, as I mentioned, I'm using a oreDictionary entry, in this case "listAllwater"

 

You mentioned an ore recipe, but you didn't mention that the ingredient was an ore dictionary entry.

 

In that case, you need to use OreDictionary.WILDCARD_VALUE when adding your item to the ore dictionary.

  • Like 1

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.

Link to comment
Share on other sites

1 minute ago, Choonster said:

 

You mentioned an ore recipe, but you didn't mention that the ingredient was an ore dictionary entry.

 

In that case, you need to use OreDictionary.WILDCARD_VALUE when adding your item to the ore dictionary.

Ah I see, sorry I wasn't clear enough.

Link to comment
Share on other sites

2 minutes ago, Tschipp said:

I have one more unrelated question that is not worth opening an entire new thread:

How do you damage/repair an item if the player is in creative mode?

 

Create your own copy of the ItemStack#damageItem method without the creative mode check.

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.

Link to comment
Share on other sites

4 minutes ago, Choonster said:

 

Create your own copy of the ItemStack#damageItem method without the creative mode check.

I am currently using the ItemStack#setItemDamage method, but there still seems to be some sort of creative mode check somewhere, as the item isn't damageable while in creative mode.

Where is this check even happening?

Link to comment
Share on other sites

22 minutes ago, Tschipp said:

I am currently using the ItemStack#setItemDamage method, but there still seems to be some sort of creative mode check somewhere, as the item isn't damageable while in creative mode.

Where is this check even happening?

Inside the ItemStack class.  IIRC, If the entity passed in is null, that check can't be made (because there is no entity, and the damage just happens).

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

2 hours ago, Draco18s said:

Inside the ItemStack class.  IIRC, If the entity passed in is null, that check can't be made (because there is no entity, and the damage just happens).

No, it crashes with a null pointer. I guess I'll try making it any arbitrary entity, like an EntityPig

Edited by Tschipp
Link to comment
Share on other sites

  • 1 year later...

I have 2 little question;

I created Item which contains subItems (4 different type) and this subItems has colorMultiplier.

Firstly i want to get different ItemDurability per subItem, how can i do? 

Secondly i want to subItems stay in crafting table but descrease durability is it possible with subItems? if is what should i do?

 

Edit:

I Also try to use hasContainerItem and getContainerItem methods but when i used this methods returns my subItems rather than changing durability.

Edited by Zamion101

Developing Kodev Minecraft Hardcore Mod!

If You're Wondering, My Mod Page. http://minecraft.curseforge.com/projects/minecraft-hardcore-mod

Link to comment
Share on other sites

EDIT: I was blind. Nevermind.

Edited by Legenes
procedure WakeMeUp(Integer plusTime);
var
  I: Integer;
begin
  for I := 0 to plusTime do begin
    println('One more minute!');
    Sleep(1000);
  end;
  println('Okay, nothing to worry, I''m alive!');
  println('So... somebody can give me a coffee?');
  println('I know it''s Pascal, and not Java, but I love it :D.');
end;
Link to comment
Share on other sites

20 minutes ago, Zamion101 said:

I have 2 little question;

I created Item which contains subItems (4 different type) and this subItems has colorMultiplier.

Firstly i want to get different ItemDurability per subItem, how can i do? 

Secondly i want to subItems stay in crafting table but descrease durability is it possible with subItems? if is what should i do?

 

Edit:

I Also try to use hasContainerItem and getContainerItem methods but when i used this methods returns my subItems rather than changing durability. 

Please don't change a post's topic. If you have a problem like that, than just make another post.

procedure WakeMeUp(Integer plusTime);
var
  I: Integer;
begin
  for I := 0 to plusTime do begin
    println('One more minute!');
    Sleep(1000);
  end;
  println('Okay, nothing to worry, I''m alive!');
  println('So... somebody can give me a coffee?');
  println('I know it''s Pascal, and not Java, but I love it :D.');
end;
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.