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 c9963c198..e3ba447eb 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 7b8a470d9..d1f9d2884 100644 --- a/src/main/java/net/minecraft/server/IDispenseBehavior.java +++ b/src/main/java/net/minecraft/server/IDispenseBehavior.java @@ -915,6 +915,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 a26529e93..73969ac44 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -240,8 +240,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;