44import com .laytonsmith .abstraction .MCEntityEquipment ;
55import com .laytonsmith .abstraction .MCItemStack ;
66import com .laytonsmith .abstraction .enums .MCEquipmentSlot ;
7+ import com .laytonsmith .abstraction .enums .MCVersion ;
8+ import com .laytonsmith .core .Static ;
79import org .bukkit .inventory .EntityEquipment ;
10+ import org .bukkit .inventory .EquipmentSlot ;
11+ import org .bukkit .inventory .ItemStack ;
812
913import java .util .EnumMap ;
1014import java .util .Map ;
@@ -22,11 +26,6 @@ public void clearEquipment() {
2226 ee .clear ();
2327 }
2428
25- @ Override
26- public int getSize () {
27- return MCEquipmentSlot .values ().length ;
28- }
29-
3029 @ Override
3130 public MCEntity getHolder () {
3231 return BukkitConvertor .BukkitGetCorrectEntity (ee .getHolder ());
@@ -35,26 +34,23 @@ public MCEntity getHolder() {
3534 @ Override
3635 public Map <MCEquipmentSlot , MCItemStack > getAllEquipment () {
3736 Map <MCEquipmentSlot , MCItemStack > slots = new EnumMap <>(MCEquipmentSlot .class );
38- for (MCEquipmentSlot key : MCEquipmentSlot .values ()) {
39- switch (key ) {
40- case WEAPON :
41- slots .put (key , getWeapon ());
42- break ;
43- case OFF_HAND :
44- slots .put (key , getItemInOffHand ());
45- break ;
46- case HELMET :
47- slots .put (key , getHelmet ());
48- break ;
49- case CHESTPLATE :
50- slots .put (key , getChestplate ());
51- break ;
52- case LEGGINGS :
53- slots .put (key , getLeggings ());
54- break ;
55- case BOOTS :
56- slots .put (key , getBoots ());
57- break ;
37+ slots .put (MCEquipmentSlot .WEAPON , getWeapon ());
38+ slots .put (MCEquipmentSlot .OFF_HAND , getItemInOffHand ());
39+ slots .put (MCEquipmentSlot .HELMET , getHelmet ());
40+ slots .put (MCEquipmentSlot .CHESTPLATE , getChestplate ());
41+ slots .put (MCEquipmentSlot .LEGGINGS , getLeggings ());
42+ slots .put (MCEquipmentSlot .BOOTS , getBoots ());
43+ BukkitMCServer server = (BukkitMCServer ) Static .getServer ();
44+ if (server .getMinecraftVersion ().gte (MCVersion .MC1_20_6 )) {
45+ try {
46+ slots .put (MCEquipmentSlot .BODY , new BukkitMCItemStack (ee .getItem (EquipmentSlot .BODY )));
47+ } catch (IllegalArgumentException ignored ) {
48+ // API says it can throw an exception here, but it never seems to do so.
49+ }
50+ if (server .getMinecraftVersion ().gte (MCVersion .MC1_21_5 )) {
51+ try {
52+ slots .put (MCEquipmentSlot .SADDLE , new BukkitMCItemStack (ee .getItem (EquipmentSlot .SADDLE )));
53+ } catch (IllegalArgumentException ignored ) {}
5854 }
5955 }
6056 return slots ;
@@ -84,33 +80,40 @@ public void setAllEquipment(Map<MCEquipmentSlot, MCItemStack> slots) {
8480 case BOOTS :
8581 setBoots (stack );
8682 break ;
83+ case BODY :
84+ if (Static .getServer ().getMinecraftVersion ().gte (MCVersion .MC1_20_6 )) {
85+ try {
86+ ee .setItem (EquipmentSlot .BODY , (ItemStack ) stack .getHandle ());
87+ } catch (IllegalArgumentException ignored ) {
88+ // API says it can throw an exception here, but it never seems to do so.
89+ }
90+ }
91+ break ;
92+ case SADDLE :
93+ if (Static .getServer ().getMinecraftVersion ().gte (MCVersion .MC1_21_5 )) {
94+ try {
95+ ee .setItem (EquipmentSlot .SADDLE , (ItemStack ) stack .getHandle ());
96+ } catch (IllegalArgumentException ignored ) {}
97+ }
98+ break ;
8799 }
88100 }
89101 }
90102
91103 @ Override
92104 public Map <MCEquipmentSlot , Float > getAllDropChances () {
93105 Map <MCEquipmentSlot , Float > slots = new EnumMap <>(MCEquipmentSlot .class );
94- for (MCEquipmentSlot key : MCEquipmentSlot .values ()) {
95- switch (key ) {
96- case WEAPON :
97- slots .put (key , getWeaponDropChance ());
98- break ;
99- case OFF_HAND :
100- slots .put (key , getOffHandDropChance ());
101- break ;
102- case HELMET :
103- slots .put (key , getHelmetDropChance ());
104- break ;
105- case CHESTPLATE :
106- slots .put (key , getChestplateDropChance ());
107- break ;
108- case LEGGINGS :
109- slots .put (key , getLeggingsDropChance ());
110- break ;
111- case BOOTS :
112- slots .put (key , getBootsDropChance ());
113- break ;
106+ slots .put (MCEquipmentSlot .WEAPON , getWeaponDropChance ());
107+ slots .put (MCEquipmentSlot .OFF_HAND , getOffHandDropChance ());
108+ slots .put (MCEquipmentSlot .HELMET , getHelmetDropChance ());
109+ slots .put (MCEquipmentSlot .CHESTPLATE , getChestplateDropChance ());
110+ slots .put (MCEquipmentSlot .LEGGINGS , getLeggingsDropChance ());
111+ slots .put (MCEquipmentSlot .BOOTS , getBootsDropChance ());
112+ BukkitMCServer server = (BukkitMCServer ) Static .getServer ();
113+ if (server .getMinecraftVersion ().gte (MCVersion .MC1_20_6 )) {
114+ slots .put (MCEquipmentSlot .BODY , ee .getDropChance (EquipmentSlot .BODY ));
115+ if (server .getMinecraftVersion ().gte (MCVersion .MC1_21_5 )) {
116+ slots .put (MCEquipmentSlot .SADDLE , ee .getDropChance (EquipmentSlot .SADDLE ));
114117 }
115118 }
116119 return slots ;
@@ -140,6 +143,16 @@ public void setAllDropChances(Map<MCEquipmentSlot, Float> slots) {
140143 case BOOTS :
141144 setBootsDropChance (chance );
142145 break ;
146+ case BODY :
147+ if (Static .getServer ().getMinecraftVersion ().gte (MCVersion .MC1_20_6 )) {
148+ ee .setDropChance (EquipmentSlot .BODY , chance );
149+ }
150+ break ;
151+ case SADDLE :
152+ if (Static .getServer ().getMinecraftVersion ().gte (MCVersion .MC1_21_5 )) {
153+ ee .setDropChance (EquipmentSlot .SADDLE , chance );
154+ }
155+ break ;
143156 }
144157 }
145158 }
0 commit comments