Forge 1.16.5 如何获取玩家副手所持物品的攻击伤害属性
获取副手物品攻击伤害的正确实现
你之前调用mc.player.inventory.offhand.get(0)拿到的是ItemStack实例,攻击伤害不属于ItemStack的直接公开字段,需要从物品的属性修饰符列表中读取:
- 第一步:判空处理,避免空物品栈报错
ItemStack offhandStack = mc.player.inventory.offhand.get(0); // 副手为空时直接返回0伤害 if (offhandStack.isEmpty()) { return 0.0F; }
- 第二步:读取物品绑定的攻击伤害修饰符,统计总数值
Multimap<Attribute, AttributeModifier> attrModifiers = offhandStack.getAttributeModifiers(EquipmentSlot.OFFHAND); double baseAttackDamage = 0.0D; // 遍历累加所有攻击伤害修饰符数值 if (attrModifiers.containsKey(Attributes.ATTACK_DAMAGE)) { for (AttributeModifier modifier : attrModifiers.get(Attributes.ATTACK_DAMAGE)) { baseAttackDamage += modifier.getAmount(); } }
- (可选)叠加玩家自身的攻击属性,得到实际生效的总伤害
double finalAttackDamage = baseAttackDamage + mc.player.getAttributeBaseValue(Attributes.ATTACK_DAMAGE);
版本适配提示:
1.16.5及以下版本属性类路径为net.minecraft.entity.ai.attributes.Attributes
1.17及以上版本属性类路径调整为net.minecraft.world.entity.ai.attributes.Attributes
内容的提问来源于stack exchange,提问作者gearDev
相关产品推荐
相关产品推荐

