2019-04-05 06:52:02 +02:00
|
|
|
From c52d374c494f11ada14981a77b34467c89e924dc Mon Sep 17 00:00:00 2001
|
2018-07-04 21:23:15 +02:00
|
|
|
From: Aikar <aikar@aikar.co>
|
|
|
|
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
|
2019-04-05 06:52:02 +02:00
|
|
|
index 45d8b52b7..471a8d6f0 100644
|
2018-07-04 21:23:15 +02:00
|
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
2019-04-05 06:52:02 +02:00
|
|
|
@@ -451,4 +451,15 @@ public class PaperWorldConfig {
|
2018-07-04 21:23:15 +02:00
|
|
|
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
|
2018-12-13 01:40:29 +01:00
|
|
|
index 06f627002..d81a2db6c 100644
|
2018-07-04 21:23:15 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/BlockBed.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/BlockBed.java
|
2018-11-03 01:23:27 +01:00
|
|
|
@@ -187,6 +187,52 @@ public class BlockBed extends BlockFacingHorizontal implements ITileEntity {
|
2018-07-08 09:30:40 +02:00
|
|
|
@Nullable
|
2018-07-19 01:16:19 +02:00
|
|
|
public static BlockPosition a(IBlockAccess iblockaccess, BlockPosition blockposition, int i) {
|
2018-11-03 01:23:27 +01:00
|
|
|
EnumDirection enumdirection = (EnumDirection) iblockaccess.getType(blockposition).get(BlockBed.FACING);
|
2018-07-08 09:30:40 +02:00
|
|
|
+ // Paper - replace whole method
|
2018-09-01 00:56:57 +02:00
|
|
|
+ World world = (World) iblockaccess;
|
2018-07-08 09:30:40 +02:00
|
|
|
+ int radius = world.paperConfig.bedSearchRadius;
|
|
|
|
+ for (int r = 1; r <= radius; r++) {
|
|
|
|
+ int x = -r;
|
|
|
|
+ int z = r;
|
2018-07-04 21:23:15 +02:00
|
|
|
+
|
2018-07-08 09:30:40 +02:00
|
|
|
+ // 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();
|
2018-11-03 01:23:27 +01:00
|
|
|
@@ -212,9 +258,12 @@ public class BlockBed extends BlockFacingHorizontal implements ITileEntity {
|
2018-07-04 21:23:15 +02:00
|
|
|
}
|
|
|
|
}
|
2018-07-08 09:30:40 +02:00
|
|
|
|
|
|
|
- return null;
|
|
|
|
+ return null;*/ // Paper
|
|
|
|
}
|
|
|
|
|
2018-07-19 01:16:19 +02:00
|
|
|
+ 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
|
2018-07-08 09:30:40 +02:00
|
|
|
+ }
|
2018-07-19 01:16:19 +02:00
|
|
|
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();
|
2018-07-08 09:30:40 +02:00
|
|
|
}
|
2018-07-04 21:23:15 +02:00
|
|
|
--
|
2019-03-20 02:46:00 +01:00
|
|
|
2.21.0
|
2018-07-04 21:23:15 +02:00
|
|
|
|