Files
Purpur/patches/server/0172-Option-to-make-doors-require-redstone.patch
Encode42 d5d756bc32 Updated Upstream (Paper & Airplane)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@c1b4899 Fix dupe uuid check on entity add (#6735)
PaperMC/Paper@3f043f7 Async catch modifications to critical entity state
PaperMC/Paper@bc43f40 Update jline and TCA (#6829)
PaperMC/Paper@d9e2817 Update paperweight to 1.1.13 (#6866)
PaperMC/Paper@3e310e0 Remove redundant and unneeded repos, reorder repos (#6867)
PaperMC/Paper@485d15f Update paperweight to 1.1.14 (#6868)
PaperMC/Paper@09d50a9 Added missing mappings (#6810)
PaperMC/Paper@0968cdd Move async catches back to where they were (#6869)
PaperMC/Paper@6f71b7c Deduplicate strings in ObfHelper (#6841)
PaperMC/Paper@ada930b Updated Upstream (Bukkit/CraftBukkit) (#6872)
PaperMC/Paper@06d82e0 Cache palette array (#6767)
PaperMC/Paper@70fe58d Expose the potential player cause of a lightning (#6782)
PaperMC/Paper@c20c9d3 Fix CraftNamespacedKey shenanigans (#6825)
PaperMC/Paper@29bb5a9 Add PlayerDeathEvent#getPlayer for clarity (#6859)
PaperMC/Paper@124d079 Fix issues with mob conversion (#6831)
PaperMC/Paper@22b0238 Add API for checking if a zombie has the option to break doors (#6855)
PaperMC/Paper@5af80b0 Add isCollidable methods to various places (#6870)
PaperMC/Paper@32ba088 Fix setPatternColor on tropical fish bucket meta (#6877)
PaperMC/Paper@87121ce Move `getTrackedPlayers` up from Player to Entity (#6569)
PaperMC/Paper@a923e33 Make despawn distance configs per-category, improve per category spawn limit config (#6717)
PaperMC/Paper@3f17694 Goat ram API (#6336)
PaperMC/Paper@cc2ecbc Add Raw Byte Entity Serialization (#6826)

Airplane Changes:
TECHNOVE/Airplane@e47949b Ty Penple <3
TECHNOVE/Airplane@86fee6b Update upstream
2021-11-11 02:03:29 -05:00

90 lines
5.1 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Wed, 24 Mar 2021 04:40:11 -0500
Subject: [PATCH] Option to make doors require redstone
diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java b/src/main/java/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java
index 7ef1572b38f17a6a9947e52effaf3689df9b6c01..d195f5756446cae6bd0c3a97c483eeba3b4a1ce4 100644
--- a/src/main/java/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java
+++ b/src/main/java/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java
@@ -65,7 +65,7 @@ public class InteractWithDoor extends Behavior<LivingEntity> {
BlockPos blockposition = pathpoint.asBlockPos();
BlockState iblockdata = world.getBlockState(blockposition);
- if (iblockdata.is((Tag) BlockTags.WOODEN_DOORS)) {
+ if (iblockdata.is(BlockTags.WOODEN_DOORS) && !DoorBlock.requiresRedstone(entity.level, iblockdata, blockposition)) { // Purpur
DoorBlock blockdoor = (DoorBlock) iblockdata.getBlock();
if (!blockdoor.isOpen(iblockdata)) {
@@ -85,7 +85,7 @@ public class InteractWithDoor extends Behavior<LivingEntity> {
BlockPos blockposition1 = pathpoint1.asBlockPos();
BlockState iblockdata1 = world.getBlockState(blockposition1);
- if (iblockdata1.is((Tag) BlockTags.WOODEN_DOORS)) {
+ if (iblockdata1.is(BlockTags.WOODEN_DOORS) && !DoorBlock.requiresRedstone(entity.level, iblockdata, blockposition1)) { // Purpur
DoorBlock blockdoor1 = (DoorBlock) iblockdata1.getBlock();
if (!blockdoor1.isOpen(iblockdata1)) {
@@ -120,7 +120,7 @@ public class InteractWithDoor extends Behavior<LivingEntity> {
} else {
BlockState iblockdata = world.getBlockState(blockposition);
- if (!iblockdata.is((Tag) BlockTags.WOODEN_DOORS)) {
+ if (!iblockdata.is(BlockTags.WOODEN_DOORS) || DoorBlock.requiresRedstone(entity.level, iblockdata, blockposition)) { // Purpur
iterator.remove();
} else {
DoorBlock blockdoor = (DoorBlock) iblockdata.getBlock();
diff --git a/src/main/java/net/minecraft/world/level/block/DoorBlock.java b/src/main/java/net/minecraft/world/level/block/DoorBlock.java
index c903a1a8d2234bb0fa354d1c44ff3ab2275b04c7..d01e4064a772710c1383927e0848b9b3b7299baa 100644
--- a/src/main/java/net/minecraft/world/level/block/DoorBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/DoorBlock.java
@@ -170,6 +170,7 @@ public class DoorBlock extends Block {
public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) {
if (this.material == Material.METAL) {
return InteractionResult.PASS;
+ } else if (requiresRedstone(world, state, pos)) { return InteractionResult.CONSUME; // Purpur
} else {
state = (BlockState) state.cycle((Property) DoorBlock.OPEN);
world.setBlock(pos, state, 10);
@@ -265,4 +266,18 @@ public class DoorBlock extends Block {
public static boolean isWoodenDoor(BlockState state) {
return state.getBlock() instanceof DoorBlock && (state.getMaterial() == Material.WOOD || state.getMaterial() == Material.NETHER_WOOD);
}
+
+ // Purpur start
+ public static boolean requiresRedstone(Level level, BlockState state, BlockPos pos) {
+ if (level.purpurConfig.doorRequiresRedstone.contains(state.getBlock())) {
+ // force update client
+ BlockPos otherPos = pos.relative(state.getValue(DoorBlock.HALF) == DoubleBlockHalf.LOWER ? Direction.UP : Direction.DOWN);
+ BlockState otherState = level.getBlockState(otherPos);
+ level.sendBlockUpdated(pos, state, state, 3);
+ level.sendBlockUpdated(otherPos, otherState, otherState, 3);
+ return true;
+ }
+ return false;
+ }
+ // Purpur end
}
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 09d47cffb5070e99ca941dd88dfc495b17d65ac7..da526812eb623343cd5aea849c4439414a9d6569 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -523,6 +523,16 @@ public class PurpurWorldConfig {
dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils);
}
+ public List<Block> doorRequiresRedstone = new ArrayList<>();
+ private void doorSettings() {
+ getList("blocks.door.requires-redstone", new ArrayList<String>()).forEach(key -> {
+ Block block = Registry.BLOCK.get(new ResourceLocation(key.toString()));
+ if (!block.defaultBlockState().isAir()) {
+ doorRequiresRedstone.add(block);
+ }
+ });
+ }
+
public boolean baselessEndCrystalExplode = true;
public double baselessEndCrystalExplosionPower = 6.0D;
public boolean baselessEndCrystalExplosionFire = false;