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/core/EnumDirection.java b/src/main/java/net/minecraft/core/EnumDirection.java index 0a40df2151bd388b6633a6f50b14f1f41ed4ce62..3ff1d8b3dfaeb875e5e70b97abb79a21f671f328 100644 --- a/src/main/java/net/minecraft/core/EnumDirection.java +++ b/src/main/java/net/minecraft/core/EnumDirection.java @@ -116,6 +116,7 @@ public enum EnumDirection implements INamable { return fromType1(this.h); } + public EnumDirection rotateCW() { return g(); } // Purpur - OBFHELPER public EnumDirection g() { switch (this) { case NORTH: @@ -131,6 +132,7 @@ public enum EnumDirection implements INamable { } } + public EnumDirection rotateCCW() { return h(); } // Purpur - OBFHELPER public EnumDirection h() { switch (this) { case NORTH: @@ -162,6 +164,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/core/dispenser/IDispenseBehavior.java b/src/main/java/net/minecraft/core/dispenser/IDispenseBehavior.java index 0055a96b51a1d38d31e129c417c97bcfc9d0b745..31237773907341ee64c71507b5e1bf247ef2c524 100644 --- a/src/main/java/net/minecraft/core/dispenser/IDispenseBehavior.java +++ b/src/main/java/net/minecraft/core/dispenser/IDispenseBehavior.java @@ -52,6 +52,7 @@ import net.minecraft.world.level.IMaterial; import net.minecraft.world.level.IWorldReader; import net.minecraft.world.level.World; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BlockAnvil; import net.minecraft.world.level.block.BlockBeehive; import net.minecraft.world.level.block.BlockCampfire; import net.minecraft.world.level.block.BlockDispenser; @@ -995,6 +996,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 b328c9f69fd43ca7ed57ee7f5b46ca998f2cb672..54b8021bfac69800d4cec996a94c2fea53249130 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -297,8 +297,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;