Files
Purpur/patches/server/0102-Dispensers-place-anvils-option.patch
2021-01-15 10:18:43 -06:00

78 lines
3.7 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
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 c9963c19892c3e408964b72983bc6e26f8b63b67..e3ba447eb7f3023406b71aab97e3d30523540588 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 7b8a470d97ccf0fdcdb8eef9368195486e09913b..d1f9d2884d055efbe72b01f86b0bdaf13ed122a5 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 a2aa975ce17ceebee97afb9594ac9f403f162fce..2d426d35a328ad3d5ce11615dc300bfacfef6df4 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -239,8 +239,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;