handle BODY slot for non-mobs (#10822)

This commit is contained in:
Jake Potrebic 2024-05-29 11:23:51 -07:00 committed by GitHub
parent 84f6e6e0b1
commit 672c07728f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 67 additions and 7 deletions

View file

@ -14,22 +14,24 @@ public net.minecraft.world.entity.decoration.ArmorStand isDisabled(Lnet/minecraf
Co-authored-by: SoSeDiK <mrsosedik@gmail.com>
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
index 9923cea74ba39a774d6b16a225bc3e455e54c418..2c16cedf8cb2e4047415e056c419ed9c33c80e93 100644
index 9923cea74ba39a774d6b16a225bc3e455e54c418..1087840331f68ffe79e79f6493137b2b894832f9 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
@@ -233,6 +233,147 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand {
@@ -233,6 +233,149 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand {
getHandle().canMove = move;
}
+ @Override
+ public ItemStack getItem(org.bukkit.inventory.EquipmentSlot slot) {
+ com.google.common.base.Preconditions.checkNotNull(slot, "slot");
+ com.google.common.base.Preconditions.checkArgument(slot != null, "slot");
+ com.google.common.base.Preconditions.checkArgument(slot != EquipmentSlot.BODY, "Cannot get body item");
+ return getHandle().getItemBySlot(org.bukkit.craftbukkit.CraftEquipmentSlot.getNMS(slot)).asBukkitMirror();
+ }
+
+ @Override
+ public void setItem(org.bukkit.inventory.EquipmentSlot slot, ItemStack item) {
+ com.google.common.base.Preconditions.checkNotNull(slot, "slot");
+ com.google.common.base.Preconditions.checkArgument(slot != null, "slot");
+ com.google.common.base.Preconditions.checkArgument(slot != EquipmentSlot.BODY, "Cannot set body item");
+ switch (slot) {
+ case HAND:
+ getEquipment().setItemInMainHand(item);

View file

@ -5,8 +5,34 @@ Subject: [PATCH] Fix equipment slot and group API
Add test for EquipmentSlotGroup
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java
index 9d74577af071954e1e37201a96368c1360076209..eafa54c870c3e2aef30c3f9f96f516607a7cae24 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java
@@ -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("Not implemented. This is a bug");
}
@@ -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("Not implemented. This is a bug");
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
index 860bc5ec4baec5e09a456cc5559d0de2aa10797a..554dc8b6b142c185d1dd0c4a3450232b7b708f1b 100644
index c235b80b94fdb6c77766016114713cd501ffd67c..d5789326d70bb8b029c5448270bbaa6faf52e6e1 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
@@ -1331,7 +1331,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {