Paper/Spigot-Server-Patches/0254-Implement-Expanded-ArmorStand-API.patch
Mariell e38eceb42a
Updated Upstream (Spigot) (#4745)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Spigot Changes:
a19903d2 SPIGOT-520: Add option to disable player data saving
2020-11-08 10:00:43 +00:00

105 lines
4.7 KiB
Diff

From 0000000000000000000000000000000000000000 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 2592a59e9506cee901802a3bdc78db8832700fd8..9b71e3207b0f41ab34871d5f4d7e87d90bc6446d 100644
--- a/src/main/java/net/minecraft/server/EntityArmorStand.java
+++ b/src/main/java/net/minecraft/server/EntityArmorStand.java
@@ -388,6 +388,7 @@ public class EntityArmorStand extends EntityLiving {
return enumitemslot;
}
+ public final boolean isSlotDisabled(EnumItemSlot slot) { return this.d(slot); } // Paper - OBFHELPER
private boolean d(EnumItemSlot enumitemslot) {
return (this.disabledSlots & 1 << enumitemslot.getSlotFlag()) != 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 bf2749fd724ac7b67fc0d5887aa307745c5f1835..c19f0b0dd3fe988a30049297355445fd73cae630 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
@@ -238,5 +238,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);
+ return;
+ 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.getSlotFlag()) + (1 << (nmsSlot.getSlotFlag() + 8)) + (1 << (nmsSlot.getSlotFlag() + 16));
+ }
+ getHandle().disabledSlots = 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
}