diff options
Diffstat (limited to 'Spigot-Server-Patches/0280-Configurable-Bed-Search-Radius.patch')
-rw-r--r-- | Spigot-Server-Patches/0280-Configurable-Bed-Search-Radius.patch | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0280-Configurable-Bed-Search-Radius.patch b/Spigot-Server-Patches/0280-Configurable-Bed-Search-Radius.patch new file mode 100644 index 0000000000..015b2448c5 --- /dev/null +++ b/Spigot-Server-Patches/0280-Configurable-Bed-Search-Radius.patch @@ -0,0 +1,105 @@ +From f1cf963f3f14757f6fb2f07fe26fdd50e8201883 Mon Sep 17 00:00:00 2001 +From: Aikar <[email protected]> +Date: Wed, 4 Jul 2018 15:22:06 -0400 +Subject: [PATCH] Configurable Bed Search Radius + +Allows you to increase how far to check for a safe place to respawn +a player near their bed, allowing a better chance to respawn the +player at their bed should it of became obstructed. + +Defaults to vanilla 1. + +diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +index aa2be2ede6..f5b2e88f3b 100644 +--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java ++++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +@@ -452,4 +452,15 @@ public class PaperWorldConfig { + private void scanForLegacyEnderDragon() { + scanForLegacyEnderDragon = getBoolean("game-mechanics.scan-for-legacy-ender-dragon", true); + } ++ ++ public int bedSearchRadius = 1; ++ private void bedSearchRadius() { ++ bedSearchRadius = getInt("bed-search-radius", 1); ++ if (bedSearchRadius < 1) { ++ bedSearchRadius = 1; ++ } ++ if (bedSearchRadius > 1) { ++ log("Bed Search Radius: " + bedSearchRadius); ++ } ++ } + } +diff --git a/src/main/java/net/minecraft/server/BlockBed.java b/src/main/java/net/minecraft/server/BlockBed.java +index 06f627002c..d81a2db6cd 100644 +--- a/src/main/java/net/minecraft/server/BlockBed.java ++++ b/src/main/java/net/minecraft/server/BlockBed.java +@@ -187,6 +187,52 @@ public class BlockBed extends BlockFacingHorizontal implements ITileEntity { + @Nullable + public static BlockPosition a(IBlockAccess iblockaccess, BlockPosition blockposition, int i) { + EnumDirection enumdirection = (EnumDirection) iblockaccess.getType(blockposition).get(BlockBed.FACING); ++ // Paper - replace whole method ++ World world = (World) iblockaccess; ++ int radius = world.paperConfig.bedSearchRadius; ++ for (int r = 1; r <= radius; r++) { ++ int x = -r; ++ int z = r; ++ ++ // Iterates the edge of half of the box; then negates for other half. ++ while (x <= r && z > -r) { ++ for (int y = -1; y <= 1; y++) { ++ BlockPosition pos = blockposition.add(x, y, z); ++ if (isSafeRespawn(world, pos)) { ++ if (i-- <= 0) { ++ return pos; ++ } ++ } ++ pos = blockposition.add(-x, y, -z); ++ if (isSafeRespawn(world, pos)) { ++ if (i-- <= 0) { ++ return pos; ++ } ++ } ++ ++ pos = blockposition.add(enumdirection.getAdjacentX() + x, y, enumdirection.getAdjacentZ() + z); ++ if (isSafeRespawn(world, pos)) { ++ if (i-- <= 0) { ++ return pos; ++ } ++ } ++ ++ pos = blockposition.add(enumdirection.getAdjacentX() - x, y, enumdirection.getAdjacentZ() - z); ++ if (isSafeRespawn(world, pos)) { ++ if (i-- <= 0) { ++ return pos; ++ } ++ } ++ } ++ if (x < r) { ++ x++; ++ } else { ++ z--; ++ } ++ } ++ } ++ ++ return null; /* // Paper comment out + int j = blockposition.getX(); + int k = blockposition.getY(); + int l = blockposition.getZ(); +@@ -212,9 +258,12 @@ public class BlockBed extends BlockFacingHorizontal implements ITileEntity { + } + } + +- return null; ++ return null;*/ // Paper + } + ++ protected static boolean isSafeRespawn(IBlockAccess iblockaccess, BlockPosition blockposition) { // Paper - OBFHELPER + behavior improvement ++ return a(iblockaccess, blockposition) && iblockaccess.getType(blockposition.down()).getMaterial().isBuildable(); // Paper - ensure solid block ++ } + protected static boolean a(IBlockAccess iblockaccess, BlockPosition blockposition) { + return iblockaccess.getType(blockposition.down()).q() && !iblockaccess.getType(blockposition).getMaterial().isBuildable() && !iblockaccess.getType(blockposition.up()).getMaterial().isBuildable(); + } +-- +2.21.0 + |