From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
Date: Sun, 25 Aug 2019 00:09:52 -0500
Subject: [PATCH] Dispenser curse of binding protection


diff --git a/src/main/java/net/minecraft/world/entity/EntityInsentient.java b/src/main/java/net/minecraft/world/entity/EntityInsentient.java
index 1a1561ab4276bd3654adc2cc2219f3bdb3924b88..462bcb7cfe2daa27c10a7a0318bef9b739e586f4 100644
--- a/src/main/java/net/minecraft/world/entity/EntityInsentient.java
+++ b/src/main/java/net/minecraft/world/entity/EntityInsentient.java
@@ -65,6 +65,7 @@ import net.minecraft.world.item.ItemSword;
 import net.minecraft.world.item.ItemTool;
 import net.minecraft.world.item.Items;
 import net.minecraft.world.item.enchantment.EnchantmentManager;
+import net.minecraft.world.item.enchantment.Enchantments;
 import net.minecraft.world.level.GameRules;
 import net.minecraft.world.level.GeneratorAccess;
 import net.minecraft.world.level.IBlockAccess;
@@ -1067,6 +1068,13 @@ 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 j(itemstack); } // Purpur - OBFHELPER
     public static EnumItemSlot j(ItemStack itemstack) {
         Item item = itemstack.getItem();
 
diff --git a/src/main/java/net/minecraft/world/item/ItemArmor.java b/src/main/java/net/minecraft/world/item/ItemArmor.java
index 7962808aebf67cf9bc1dc4c1e106e943536fdced..d072b604a1cd8835c1fe658831cdaf9f27d02cd5 100644
--- a/src/main/java/net/minecraft/world/item/ItemArmor.java
+++ b/src/main/java/net/minecraft/world/item/ItemArmor.java
@@ -54,7 +54,7 @@ public class ItemArmor extends Item implements ItemWearable {
             return false;
         } else {
             EntityLiving entityliving = (EntityLiving) list.get(0);
-            EnumItemSlot enumitemslot = EntityInsentient.j(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();
@@ -113,6 +113,7 @@ public class ItemArmor extends Item implements ItemWearable {
         this.m = builder.build();
     }
 
+    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 ef5a691861cdf249f0430fca7f7bbe241479926e..5b42e8347a42a16f79fbbc122e5cd82533e53b8c 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -162,6 +162,11 @@ public class PurpurWorldConfig {
         });
     }
 
+    public boolean dispenserApplyCursedArmor = true;
+    private void dispenserSettings() {
+        dispenserApplyCursedArmor = getBoolean("blocks.dispenser.apply-cursed-to-armor-slots", dispenserApplyCursedArmor);
+    }
+
     public boolean farmlandGetsMoistFromBelow = false;
     private void farmlandSettings() {
         farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
