Fix equipment slot and group API
Adds the following: - Add test for EquipmentSlotGroup - Expose LivingEntity#canUseSlot Co-authored-by: SoSeDiK <mrsosedik@gmail.com>
This commit is contained in:
@@ -1230,4 +1230,11 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
this.getHandle().setYBodyRot(bodyYaw);
|
||||
}
|
||||
// Paper end - body yaw API
|
||||
|
||||
// Paper start - Expose canUseSlot
|
||||
@Override
|
||||
public boolean canUseEquipmentSlot(org.bukkit.inventory.EquipmentSlot slot) {
|
||||
return this.getHandle().canUseSlot(org.bukkit.craftbukkit.CraftEquipmentSlot.getNMS(slot));
|
||||
}
|
||||
// Paper end - Expose canUseSlot
|
||||
}
|
||||
|
||||
@@ -135,6 +135,10 @@ public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.i
|
||||
case HEAD:
|
||||
this.setHelmet(item);
|
||||
break;
|
||||
// Paper start
|
||||
case BODY:
|
||||
throw new IllegalArgumentException("BODY is not valid for players!");
|
||||
// Paper end
|
||||
default:
|
||||
throw new IllegalArgumentException("Could not set slot " + slot + " - not a valid slot for PlayerInventory");
|
||||
}
|
||||
@@ -162,6 +166,10 @@ public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.i
|
||||
return java.util.Objects.requireNonNullElseGet(this.getChestplate(), () -> new ItemStack(org.bukkit.Material.AIR)); // Paper - make nonnull
|
||||
case HEAD:
|
||||
return java.util.Objects.requireNonNullElseGet(this.getHelmet(), () -> new ItemStack(org.bukkit.Material.AIR)); // Paper - make nonnull
|
||||
// Paper start
|
||||
case BODY:
|
||||
throw new IllegalArgumentException("BODY is not valid for players!");
|
||||
// Paper end
|
||||
default:
|
||||
throw new IllegalArgumentException("Could not get slot " + slot + " - not a valid slot for PlayerInventory");
|
||||
}
|
||||
|
||||
@@ -1723,7 +1723,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
|
||||
if (this.attributeModifiers == null) return LinkedHashMultimap.create(); // Paper - don't change the components
|
||||
SetMultimap<Attribute, AttributeModifier> result = LinkedHashMultimap.create();
|
||||
for (Map.Entry<Attribute, AttributeModifier> entry : this.attributeModifiers.entries()) {
|
||||
if (entry.getValue().getSlot() == null || entry.getValue().getSlot() == slot) {
|
||||
if (entry.getValue().getSlotGroup().test(slot)) { // Paper - correctly test slot against group
|
||||
result.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
@@ -1797,9 +1797,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
|
||||
|
||||
while (iter.hasNext()) {
|
||||
Map.Entry<Attribute, AttributeModifier> entry = iter.next();
|
||||
// Explicitly match against null because (as of MC 1.13) AttributeModifiers without a -
|
||||
// set slot are active in any slot.
|
||||
if (entry.getValue().getSlot() == null || entry.getValue().getSlot() == slot) {
|
||||
if (entry.getValue().getSlotGroup().test(slot)) { // Paper - correctly test slot against group
|
||||
iter.remove();
|
||||
++removed;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user