From eb7c1fbad9ad508c5277143ac89099b2f0a7534c Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 25 Aug 2019 00:10:05 -0500 Subject: [PATCH] Dispenser curse of binding protection --- docs/source/configuration.rst | 5 ++ ...ispenser-curse-of-binding-protection.patch | 72 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 patches/server/0060-Dispenser-curse-of-binding-protection.patch diff --git a/docs/source/configuration.rst b/docs/source/configuration.rst index 809bef470..3894548b8 100644 --- a/docs/source/configuration.rst +++ b/docs/source/configuration.rst @@ -305,6 +305,11 @@ campfires-go-out-in-rain * **default**: true * **description**: Campfires burn out in the rain +dispenser-apply-cursed-armor-slots +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* **default**: true +* **description**: Should dispensers apply armor to armor slots if enchanted with curse of binding + allow-moist-soil-from-water-below ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * **default**: true diff --git a/patches/server/0060-Dispenser-curse-of-binding-protection.patch b/patches/server/0060-Dispenser-curse-of-binding-protection.patch new file mode 100644 index 000000000..4130b1c7b --- /dev/null +++ b/patches/server/0060-Dispenser-curse-of-binding-protection.patch @@ -0,0 +1,72 @@ +From 55a3b704cb50d08070977ad3a5b6816979a1a571 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Sun, 25 Aug 2019 00:09:52 -0500 +Subject: [PATCH] Dispenser curse of binding protection + +--- + src/main/java/net/minecraft/server/EntityInsentient.java | 8 +++++++- + src/main/java/net/minecraft/server/ItemArmor.java | 3 ++- + src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++ + 3 files changed, 14 insertions(+), 2 deletions(-) + +diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java +index 47090db89..806dabbbc 100644 +--- a/src/main/java/net/minecraft/server/EntityInsentient.java ++++ b/src/main/java/net/minecraft/server/EntityInsentient.java +@@ -895,9 +895,15 @@ public abstract class EntityInsentient extends EntityLiving { + + } + ++ // Purpur start ++ public static EnumItemSlot getSlotForDispenser(ItemStack itemstack) { ++ return EnchantmentManager.getEnchantmentLevel(Enchantments.BINDING_CURSE, itemstack) > 0 ? EnumItemSlot.MAINHAND : getSlotForItemStack(itemstack); ++ } ++ // Purpur end ++ ++ public static EnumItemSlot getSlotForItemStack(ItemStack itemstack) { return h(itemstack); } // Purpur - OBFHELPER + public static EnumItemSlot h(ItemStack itemstack) { + Item item = itemstack.getItem(); +- + return item != Blocks.CARVED_PUMPKIN.getItem() && (!(item instanceof ItemBlock) || !(((ItemBlock) item).getBlock() instanceof BlockSkullAbstract)) ? (item instanceof ItemArmor ? ((ItemArmor) item).b() : (item == Items.ELYTRA ? EnumItemSlot.CHEST : (item == Items.SHIELD ? EnumItemSlot.OFFHAND : EnumItemSlot.MAINHAND))) : EnumItemSlot.HEAD; + } + +diff --git a/src/main/java/net/minecraft/server/ItemArmor.java b/src/main/java/net/minecraft/server/ItemArmor.java +index dec03e4ae..ce77b7e33 100644 +--- a/src/main/java/net/minecraft/server/ItemArmor.java ++++ b/src/main/java/net/minecraft/server/ItemArmor.java +@@ -33,7 +33,7 @@ public class ItemArmor extends Item { + return ItemStack.a; + } else { + EntityLiving entityliving = (EntityLiving) list.get(0); +- EnumItemSlot enumitemslot = EntityInsentient.h(itemstack); ++ EnumItemSlot enumitemslot = isourceblock.getWorld().purpurConfig.dispenserApplyCursedArmor ? EntityInsentient.getSlotForItemStack(itemstack) : EntityInsentient.getSlotForDispenser(itemstack); // Purpur + ItemStack itemstack1 = itemstack.cloneAndSubtract(1); + // CraftBukkit start + World world = isourceblock.getWorld(); +@@ -81,6 +81,7 @@ public class ItemArmor extends Item { + BlockDispenser.a((IMaterial) this, ItemArmor.a); + } + ++ public EnumItemSlot getEquipmentSlot() { return b(); } // Purpur - OBFHELPER + public EnumItemSlot b() { + return this.b; + } +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 2ecf5f9eb..6958866a4 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -107,6 +107,11 @@ public class PurpurWorldConfig { + campfiresGoOutInRain = getBoolean("campfires-go-out-in-rain", campfiresGoOutInRain); + } + ++ public boolean dispenserApplyCursedArmor = true; ++ private void dispenserApplyCursedArmor() { ++ dispenserApplyCursedArmor = getBoolean("dispenser-apply-cursed-armor-slots", dispenserApplyCursedArmor); ++ } ++ + public boolean allowMoistSoilFromWaterBelow = true; + private void allowMoistSoilFromWaterBelow() { + allowMoistSoilFromWaterBelow = getBoolean("allow-moist-soil-from-water-below", allowMoistSoilFromWaterBelow); +-- +2.23.0.rc1 +