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

Is it reasonably possible to have a single Item class that would allow for variable weapon strength (using NBT tags) without having to go through the enchantment system (i.e. Sharpness)?

 

As far as I can tell, item damage is handled via getItemAttributeModifiers(), which does not pass an ItemStack (so no NBT data).

 

Resorting to the Sharpness enchantment isn't out of the question, just less than ideal, as I'd like to handle that independently.

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.

LivingHurtEvent/LivingAttackEvent ?

You can get the ItemStack held at the hit time, read the NBT and deal different damage.

  • Author

LivingHurtEvent/LivingAttackEvent ?

You can get the ItemStack held at the hit time, read the NBT and deal different damage.

 

Due to the nature of what I'm doing this would be exceedingly difficult.  EXCEEDINGLY.

 

Or, you could create a random number generator and set the damage to that random number.

 

Affects all instances of that item, not a valid solution. ;)

I want each instance to have its own value that is constant, not magically alter every item instance to a different number every time that number is polled.

 

You can just store the AttributeModifiers in the ItemStack nbt directly so ItemStack.getAttributeModifiers understands it (have a look at the method and you will understand).

 

Ah ha!  Brilliant.  I didn't see that ItemStack had the same tidlybits. :D

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

You can just store the AttributeModifiers in the ItemStack nbt directly so ItemStack.getAttributeModifiers understands it (have a look at the method and you will understand).

 

 

Holycow this was not easy.

 

Here's what I ended up with:

 

public ItemStack attached(ItemStack i, Random rand) {
	NBTTagCompound inbt = i.stackTagCompound;
	NBTTagCompound nnbt = new NBTTagCompound();
	NBTTagList nnbtl = new NBTTagList();
	AttributeModifier att = new AttributeModifier("generic.attackDamage", 1, 0);
	nnbt.setLong("UUIDMost", att.getID().getMostSignificantBits());
	nnbt.setLong("UUIDLeast", att.getID().getLeastSignificantBits());
	nnbt.setString("Name", att.getName());
	nnbt.setDouble("Amount", att.getAmount());
	nnbt.setInteger("Operation", att.getOperation());
	nnbt.setString("AttributeName", att.getName());
	nnbtl.appendTag(nnbt);
	inbt.setTag("AttributeModifiers", nnbtl);
	return i;
}

 

List of modifier names, as they do not appear to be listed anywhere convenient:

 

generic.attackDamage
generic.followRange
generic.maxHealth
generic.knockbackResistance
generic.movementSpeed

 

And a handful of others that only apply to specific mobs (parentheticals indicate what entity):

 

zombie.spawnReinforcements  (zombies)
Baby speed boost (zombies)
Attacking speed boost (endermen, pig zombies)
Drinking speed penalty (witches)

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

SharedMonsterAttributes

;)

 

Ah.  Yes.  Of course, what's funny is when I tried it, an enchanted weapon told me the string was "Weapon damage" and my code didn't work.

(Turned out the line I was missing at the time was

nnbt.setString("AttributeName", att.getName());

  "AttributeName" being what the end-result looks for, but I never found it being set anywhere, though I did find "Name" used in several places).

 

Like I said, pain in the ass to figure out from just the code.

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.