本帖最后由 Lonewolfi 于 2021-8-17 20:16 编辑
player.getInventory().getItemInHand().getItemMeta().getAttributeModifiers(Attribute.GENERIC_ATTACK_SPEED)返回值一直是空
把getAttributeModifiers换成getDisplayName是可以得到物品的自定义名字
所以说是1.12.2版本没有getAttributeModifiers吗......
player.getInventory().getItemInHand().getItemMeta().getAttributeModifiers(Attribute.GENERIC_ATTACK_SPEED)返回值一直是空
把getAttributeModifiers换成getDisplayName是可以得到物品的自定义名字
所以说是1.12.2版本没有getAttributeModifiers吗......
emmmmm 或许你可以考虑下手上物品是否有这个属性 比如方块物品就没有这个属性
南柯郡守 发表于 2021-8-17 19:01
emmmmm 或许你可以考虑下手上物品是否有这个属性 比如方块物品就没有这个属性 ...

Lonewolfi 发表于 2021-8-17 19:08
我是注册了一个指令来测试的 输入指令的时候拿着剑 还来回切换了几次 确实返回为空 ...
那啥 我看错了
这个方法意思应该是获取改变的值? 如果要获取属性的话 emmmmmm
我居然没找到 凎 你试试读nbt?
我是不知道了 等大佬吧
本帖最后由 贺兰兰 于 2021-8-17 19:46 编辑
因为你根本没有AttributeModifiers,所以他当然是空的啊
或者说其实你理解错了什么,AttributeModifiers 代表一个修改器,当玩家持有这个 ItemMeta 的时候给予玩家一些 Attribute 的增益
但是这不代表 ItemMeta 就包含 Attribute,Attribute 是实体属性,而不是物品属性
要想获取一个实体的 Attribute 信息,只需要
使用这个 Attributable 接口的方法即可获得 AttributeInstance 实例,然后就可以通过 getBaseValue() 或者 getDefaultValue() 方法获得你需要的数据了
很明显,Player 也是 Attributable 接口的实例
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 接口的实例
贺兰兰 发表于 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这一条路了
不然就是获取玩家实时属性
贺兰兰 发表于 2021-8-17 19:40
因为你根本没有AttributeModifiers,所以他当然是空的啊
或者说其实你理解错了什么,AttributeModifiers ...

MCBBS有你更精彩~