From 930555c84a688911c0b67831f0a9eff13e4c1664 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 4 Aug 2020 21:38:58 -0500 Subject: [PATCH] Dispensers place anvils option --- current-paper | 2 +- .../0121-Dispensers-place-anvils-option.patch | 77 +++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 patches/server/0121-Dispensers-place-anvils-option.patch diff --git a/current-paper b/current-paper index dd9323dac..2cf419df2 100644 --- a/current-paper +++ b/current-paper @@ -1 +1 @@ -1.16.1--6874b340330971b9934941a70410d110383d7e76 +1.16.1--57ffa5163aff13683299c03bda1dc3e019c523f4 diff --git a/patches/server/0121-Dispensers-place-anvils-option.patch b/patches/server/0121-Dispensers-place-anvils-option.patch new file mode 100644 index 000000000..c4607654d --- /dev/null +++ b/patches/server/0121-Dispensers-place-anvils-option.patch @@ -0,0 +1,77 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Tue, 4 Aug 2020 21:11:03 -0500 +Subject: [PATCH] Dispensers place anvils option + + +diff --git a/src/main/java/net/minecraft/server/EnumDirection.java b/src/main/java/net/minecraft/server/EnumDirection.java +index 5a04654657..0ec5ea0659 100644 +--- a/src/main/java/net/minecraft/server/EnumDirection.java ++++ b/src/main/java/net/minecraft/server/EnumDirection.java +@@ -102,6 +102,7 @@ public enum EnumDirection implements INamable { + return fromType1(this.h); + } + ++ public EnumDirection rotateCW() { return g(); } // Purpur - OBFHELPER + public EnumDirection g() { + switch (this) { + case NORTH: +@@ -117,6 +118,7 @@ public enum EnumDirection implements INamable { + } + } + ++ public EnumDirection rotateCCW() { return h(); } // Purpur - OBFHELPER + public EnumDirection h() { + switch (this) { + case NORTH: +@@ -148,6 +150,7 @@ public enum EnumDirection implements INamable { + return this.j; + } + ++ public EnumDirection.EnumAxis getAxis() { return n(); } // Purpur - OBFHELPER + public EnumDirection.EnumAxis n() { + return this.k; + } +diff --git a/src/main/java/net/minecraft/server/IDispenseBehavior.java b/src/main/java/net/minecraft/server/IDispenseBehavior.java +index 660f44975a..2cf10277ef 100644 +--- a/src/main/java/net/minecraft/server/IDispenseBehavior.java ++++ b/src/main/java/net/minecraft/server/IDispenseBehavior.java +@@ -914,6 +914,23 @@ public interface IDispenseBehavior { + } + })); + BlockDispenser.a((IMaterial) Items.SHEARS.getItem(), (IDispenseBehavior) (new DispenseBehaviorShears())); ++ // Purpur start ++ BlockDispenser.a(Blocks.ANVIL, new DispenseBehaviorMaybe() { ++ @Override ++ protected ItemStack a(ISourceBlock dispenser, ItemStack itemstack) { ++ World world = dispenser.getWorld(); ++ if (!world.purpurConfig.dispenserPlaceAnvils) return super.a(dispenser, itemstack); ++ EnumDirection facing = dispenser.getBlockData().get(BlockDispenser.FACING); ++ BlockPosition blockposition = dispenser.getBlockPosition().shift(facing); ++ IBlockData iblockdata = world.getType(blockposition); ++ if (iblockdata.isAir()) { ++ world.setTypeUpdate(blockposition, Blocks.ANVIL.getBlockData().set(BlockAnvil.FACING, facing.getAxis() == EnumDirection.EnumAxis.Y ? EnumDirection.NORTH : facing.rotateCW())); ++ itemstack.subtract(1); ++ } ++ return itemstack; ++ } ++ }); ++ // Purpur end + } + + static void a(ISourceBlock isourceblock, Entity entity, EnumDirection enumdirection) { +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index f42af3d9f9..278b100de9 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -230,8 +230,10 @@ public class PurpurWorldConfig { + } + + public boolean dispenserApplyCursedArmor = true; ++ public boolean dispenserPlaceAnvils = false; + private void dispenserSettings() { + dispenserApplyCursedArmor = getBoolean("blocks.dispenser.apply-cursed-to-armor-slots", dispenserApplyCursedArmor); ++ dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils); + } + + public boolean farmlandGetsMoistFromBelow = false;