aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0310-Implement-Expanded-ArmorStand-API.patch
blob: 32d836531f6ce2a24a4228c1fc257e5ed32be01c (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 5c69091e158c9b2c6cdfc776af3e1594baac8978 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 694df9e185..c604182dd9 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> bF;
     private boolean bG;
     public long h;
-    private int bH;
+    private int bH;public void setDisabledSlots(int i) { bH = i;} public int getDisabledSlots() { return bH ;} // Paper - OBFHELPER
     private boolean bI;
     public Vector3f headPose;
     public Vector3f bodyPose;
@@ -361,6 +361,7 @@ public class EntityArmorStand extends EntityLiving {
         return enumitemslot;
     }
 
+    public boolean isSlotDisabled(EnumItemSlot slot) { return this.c(slot); } // Paper - OBFHELPER
     public boolean c(EnumItemSlot enumitemslot) {
         return (this.bH & 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.21.0