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

I want my item to stay in crafting and decrease its durability when used in recipe - not just be consumed

how can i do it?

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.

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.

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

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

 

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.

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.

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.

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.

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.

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"

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.

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.

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.

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?

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.

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?

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.

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

It somehow still does a creative mode check, even when using a entityPig as the argument... There must be a simpler way to damage an item in creative mode...

 

You know what, I'll just open a new thread for it.

Edited by Tschipp

  • 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

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

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.