Lonewolfi
本帖最后由 Lonewolfi 于 2021-8-17 20:16 编辑

player.getInventory().getItemInHand().getItemMeta().getAttributeModifiers(Attribute.GENERIC_ATTACK_SPEED)返回值一直是空
把getAttributeModifiers换成getDisplayName是可以得到物品的自定义名字
所以说是1.12.2版本没有getAttributeModifiers吗......






南柯郡守
emmmmm 或许你可以考虑下手上物品是否有这个属性 比如方块物品就没有这个属性

Lonewolfi
南柯郡守 发表于 2021-8-17 19:01
emmmmm 或许你可以考虑下手上物品是否有这个属性 比如方块物品就没有这个属性 ...

我是注册了一个指令来测试的 输入指令的时候拿着剑  还来回切换了几次  确实返回为空

南柯郡守
Lonewolfi 发表于 2021-8-17 19:08
我是注册了一个指令来测试的 输入指令的时候拿着剑  还来回切换了几次  确实返回为空 ...

那啥 我看错了

这个方法意思应该是获取改变的值?  如果要获取属性的话 emmmmmm

我居然没找到 凎  你试试读nbt?

我是不知道了  等大佬吧

贺兰兰
本帖最后由 贺兰兰 于 2021-8-17 19:46 编辑
getAttributeModifiers
@Nullable
Collection<AttributeModifier> getAttributeModifiers​(@NotNull
Attribute attribute)
Return an immutable copy of all AttributeModifiers for a given Attribute
Parameters:
attribute - the Attribute
Returns:
an immutable collection of AttributeModifiers or null if no AttributeModifiers exist for the Attribute.
Throws:
NullPointerException - if Attribute is null

因为你根本没有AttributeModifiers,所以他当然是空的啊
或者说其实你理解错了什么,AttributeModifiers 代表一个修改器,当玩家持有这个 ItemMeta 的时候给予玩家一些 Attribute 的增益
但是这不代表 ItemMeta 就包含 Attribute,Attribute 是实体属性,而不是物品属性

要想获取一个实体的 Attribute 信息,只需要
@Nullable
AttributeInstance getAttribute​(@NotNull
Attribute attribute)
Gets the specified attribute instance from the object. This instance will be backed directly to the object and any changes will be visible at once.
Parameters:
attribute - the attribute to get
Returns:
the attribute instance or null if not applicable to this object

使用这个 Attributable 接口的方法即可获得 AttributeInstance 实例,然后就可以通过 getBaseValue() 或者 getDefaultValue() 方法获得你需要的数据了
很明显,Player 也是 Attributable 接口的实例

Lonewolfi
贺兰兰 发表于 2021-8-17 19:40
因为你根本没有AttributeModifiers,所以他当然是空的啊
或者说其实你理解错了什么,AttributeModifiers  ...

下面所说的方法没法获取武器的攻击速度,只能获取玩家本身的攻速,也就是说玩家无论拿多少攻速的武器,攻速永远都是4(默认值)

贺兰兰
Lonewolfi 发表于 2021-8-17 20:06
下面所说的方法没法获取武器的攻击速度,只能获取玩家本身的攻速,也就是说玩家无论拿多少攻速的武器,攻速 ...
AttributeModifiers 代表一个修改器,当玩家持有这个 ItemMeta 的时候给予玩家一些 Attribute 的增益

所以你到底有没有好好看我说的话
你这种情况下就添加一个 AttributeModifier 不就完了吗

南柯郡守
Lonewolfi 发表于 2021-8-17 20:06
下面所说的方法没法获取武器的攻击速度,只能获取玩家本身的攻速,也就是说玩家无论拿多少攻速的武器,攻速 ...

也就是说如果你要想知道手上的剑能加多少攻击力的话

应该是只有读物品的nbt这一条路了

不然就是获取玩家实时属性

Lonewolfi
贺兰兰 发表于 2021-8-17 19:40
因为你根本没有AttributeModifiers,所以他当然是空的啊
或者说其实你理解错了什么,AttributeModifiers  ...

会了 只需要把下面方法的获取默认属性getBaseValue() 改成getValue() 就可以获取到增加的属性了

烟雨相思醉i
MCBBS有你更精彩~

第一页 上一页 下一页 最后一页