aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0271-Implement-Expanded-ArmorStand-API.patch
blob: 3a9578bd27a63bad2c97624ed8dffaab2112dbca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
From a780bcc147ff715e5eb836894fa8915e357299c0 Mon Sep 17 00:00:00 2001
From: willies952002 <admin@domnian.com>
Date: Thu, 26 Jul 2018 02:25:46 -0400
Subject: [PATCH] Implement Expanded ArmorStand API

Add the following:
- Add proper methods for getting and setting items in both hands. Deprecates old methods
- Enable/Disable slot interactions

diff --git a/src/main/java/net/minecraft/server/EntityArmorStand.java b/src/main/java/net/minecraft/server/EntityArmorStand.java
index 297ed7c1ce..961e284712 100644
--- a/src/main/java/net/minecraft/server/EntityArmorStand.java
+++ b/src/main/java/net/minecraft/server/EntityArmorStand.java
@@ -36,7 +36,7 @@ public class EntityArmorStand extends EntityLiving {
     private final NonNullList<ItemStack> armorItems;
     private boolean bD;
     public long bt;
-    private int bE;
+    private int bE; public void setDisabledSlots(int i) { bE = i;} public int getDisabledSlots() { return bE ;} // Paper - OBFHELPER
     public Vector3f headPose;
     public Vector3f bodyPose;
     public Vector3f leftArmPose;
@@ -381,6 +381,7 @@ public class EntityArmorStand extends EntityLiving {
         return enumitemslot;
     }
 
+    public boolean isSlotDisabled(EnumItemSlot slot) { return this.d(slot); } // Paper - OBFHELPER
     public boolean d(EnumItemSlot enumitemslot) {
         return (this.bE & 1 << enumitemslot.c()) != 0 || enumitemslot.a() == EnumItemSlot.Function.HAND && !this.hasArms();
     }
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
index 124c3185bc..9f5c3b92e3 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
@@ -30,11 +30,13 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand {
     }
 
     @Override
+    @Deprecated // Paper
     public ItemStack getItemInHand() {
         return getEquipment().getItemInHand();
     }
 
     @Override
+    @Deprecated // Paper
     public void setItemInHand(ItemStack item) {
         getEquipment().setItemInHand(item);
     }
@@ -222,5 +224,78 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand {
     public void setCanMove(boolean move) {
         getHandle().canMove = move;
     }
+
+    @Override
+    public ItemStack getItem(org.bukkit.inventory.EquipmentSlot slot) {
+        com.google.common.base.Preconditions.checkNotNull(slot, "slot");
+        return getHandle().getEquipment(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");
+        switch (slot) {
+            case HAND:
+                getEquipment().setItemInMainHand(item);
+                return;
+            case OFF_HAND:
+                getEquipment().setItemInOffHand(item);
+                return;
+            case FEET:
+                setBoots(item);
+                return;
+            case LEGS:
+                setLeggings(item);
+                break;
+            case CHEST:
+                setChestplate(item);
+                return;
+            case HEAD:
+                setHelmet(item);
+                return;
+        }
+        throw new UnsupportedOperationException(slot.name());
+    }
+
+    @Override
+    public java.util.Set<org.bukkit.inventory.EquipmentSlot> getDisabledSlots() {
+        java.util.Set<org.bukkit.inventory.EquipmentSlot> disabled = new java.util.HashSet<>();
+        for (org.bukkit.inventory.EquipmentSlot slot : org.bukkit.inventory.EquipmentSlot.values()) {
+            if (this.isSlotDisabled(slot)) {
+                disabled.add(slot);
+            }
+        }
+        return disabled;
+    }
+
+    @Override
+    public void setDisabledSlots(org.bukkit.inventory.EquipmentSlot... slots) {
+        int disabled = 0;
+        for (org.bukkit.inventory.EquipmentSlot slot : slots) {
+            if (slot == org.bukkit.inventory.EquipmentSlot.OFF_HAND) continue;
+            net.minecraft.server.EnumItemSlot nmsSlot = org.bukkit.craftbukkit.CraftEquipmentSlot.getNMS(slot);
+            disabled += (1 << nmsSlot.c()) + (1 << (nmsSlot.c() + 8)) + (1 << (nmsSlot.c() + 16));
+        }
+        getHandle().setDisabledSlots(disabled);
+    }
+
+    @Override
+    public void addDisabledSlots(org.bukkit.inventory.EquipmentSlot... slots) {
+        java.util.Set<org.bukkit.inventory.EquipmentSlot> disabled = getDisabledSlots();
+        java.util.Collections.addAll(disabled, slots);
+        setDisabledSlots(disabled.toArray(new org.bukkit.inventory.EquipmentSlot[0]));
+    }
+
+    @Override
+    public void removeDisabledSlots(org.bukkit.inventory.EquipmentSlot... slots) {
+        java.util.Set<org.bukkit.inventory.EquipmentSlot> disabled = getDisabledSlots();
+        for (final org.bukkit.inventory.EquipmentSlot slot : slots) disabled.remove(slot);
+        setDisabledSlots(disabled.toArray(new org.bukkit.inventory.EquipmentSlot[0]));
+    }
+
+    @Override
+    public boolean isSlotDisabled(org.bukkit.inventory.EquipmentSlot slot) {
+        return getHandle().isSlotDisabled(org.bukkit.craftbukkit.CraftEquipmentSlot.getNMS(slot));
+    }
     // Paper end
 }
-- 
2.22.0