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 have went through the forums and multiple posts and have came up with the following code. However, the bit of code doesn't seem to change anything, regardless of what I have tried.

 

My goal is to have the damage increase depending on the amount of mobs killed, and also to increase the speed of the sword based on this. Neither of the modified stats are having any effect on the sword in the game. To test the method, I changed the attackMod to a flat 100 and it still only did 8 damage.

 

@Override
	public Multimap<String, AttributeModifier> getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot){
        Multimap<String, AttributeModifier> multimap = super.getItemAttributeModifiers(equipmentSlot);
        if (equipmentSlot == EntityEquipmentSlot.MAINHAND){
        	multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", (double)super.getAttackDamage() + 100, 0));
            multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", -2.4D + speedMod, 0));
        }

        return multimap;
    }

 

The whole file can be found here

If any other code is needed, ask and I shall provide. Thanks in advance!

Edited by Elrol_Arrowsend
Solved again

This happens because you are extending ItemSword and instantinating the base MultiMap through a super invocation. That returns you a multimap with the sword's base values already in place set by ItemSword. Your additions are not taken by the game since they are already applied by ItemSword, and they don't override the old ones because it's a MultiMap. 

Basically create a new empty multimap instead of grabbing the one from ItemSword.

  • Author

Okay. I will give this a try. I had thought it would have overridden the old ones. Thanks for the tip!

 

-Edit-

Works perfectly now. Thanks a ton!

Edited by Elrol_Arrowsend
Solved

  • Author

Well, while testing it seems like I found an issue, while I hold just one sword, it works perfectly, but if I have one sword that has 0 souls, and another with 1000, they both have the same attack and speed that was modified by the sword with 1000 souls. Where exactly have I messed up?

 

Here is the current code that I am working with.

Quote

protected double souls;

You can't store ItemStack sensitive data in Item since items are singletons. Either use capabilities or NBT.

  • Author

Well the souls are stored on nbt. And that method is just so I can get the number of souls in the other methods. Is there a way to get the current held item in the getItemAttributeModifiers method?

10 minutes ago, Elrol_Arrowsend said:

Is there a way to get the current held item in the getItemAttributeModifiers method?

Use the overload of that method that takes in an ItemStack as one of it's parameters.

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.