Jump to content

Variable Weapon Damage


Draco18s

Recommended Posts

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

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.