aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/removed/1.16/0238-Configurable-Bed-Search-Radius.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/removed/1.16/0238-Configurable-Bed-Search-Radius.patch')
-rw-r--r--patches/removed/1.16/0238-Configurable-Bed-Search-Radius.patch159
1 files changed, 0 insertions, 159 deletions
diff --git a/patches/removed/1.16/0238-Configurable-Bed-Search-Radius.patch b/patches/removed/1.16/0238-Configurable-Bed-Search-Radius.patch
deleted file mode 100644
index 4e8d577fbd..0000000000
--- a/patches/removed/1.16/0238-Configurable-Bed-Search-Radius.patch
+++ /dev/null
@@ -1,159 +0,0 @@
-From 0000000000000000000000000000000000000000 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 6352051ab937d4d365e823a7112e76dc3ec34225..d6a3d882e375ac5a2b6ec8920532db615f4fe4ef 100644
---- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
-+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
-@@ -372,4 +372,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 7604d79468ce8d7d1a4f45872a5db0c700419029..e7bd9061cceba284443b75cc5506e1b9f2ef42e8 100644
---- a/src/main/java/net/minecraft/server/BlockBed.java
-+++ b/src/main/java/net/minecraft/server/BlockBed.java
-@@ -199,6 +199,8 @@ public class BlockBed extends BlockFacingHorizontal implements ITileEntity {
-
- public static Optional<Vec3D> a(EntityTypes<?> entitytypes, IWorldReader iworldreader, BlockPosition blockposition, int i) {
- EnumDirection enumdirection = (EnumDirection) iworldreader.getType(blockposition).get(BlockBed.FACING);
-+ // Paper start - configurable bed search radius
-+ if (entitytypes == EntityTypes.PLAYER) return findSafePosition(entitytypes, (World) iworldreader, enumdirection, blockposition);
- int j = blockposition.getX();
- int k = blockposition.getY();
- int l = blockposition.getZ();
-@@ -228,7 +230,104 @@ public class BlockBed extends BlockFacingHorizontal implements ITileEntity {
- return Optional.empty();
- }
-
-- public static Optional<Vec3D> a(EntityTypes<?> entitytypes, IWorldReader iworldreader, BlockPosition blockposition) {
-+ private static Optional<Vec3D> findSafePosition(EntityTypes<?> entitytypes, World world, EnumDirection updirection, BlockPosition blockposition){
-+ int radius = world.paperConfig.bedSearchRadius;
-+ double angle = Math.PI / 2;
-+ int tmpX = (int)(updirection.getAdjacentX() * Math.cos(angle) - updirection.getAdjacentZ() * Math.sin(angle));
-+ int tmpZ = (int)(updirection.getAdjacentX() * Math.sin(angle) + updirection.getAdjacentZ() * Math.cos(angle));
-+
-+ EnumDirection rightDirection = EnumDirection.a(tmpX, 0, tmpZ);
-+ EnumDirection downDirection = updirection.opposite();
-+ EnumDirection leftDirection = rightDirection.opposite();
-+
-+ EnumDirection[] corePositionOutDirection = new EnumDirection[6];
-+ corePositionOutDirection[0] = updirection;
-+ corePositionOutDirection[1] = leftDirection;
-+ corePositionOutDirection[2] = leftDirection;
-+ corePositionOutDirection[3] = downDirection;
-+ corePositionOutDirection[4] = rightDirection;
-+ corePositionOutDirection[5] = rightDirection;
-+
-+ BlockPosition[] corePosition = new BlockPosition[6];
-+ corePosition[0] = blockposition.add(updirection.getAdjacentX(), 0, updirection.getAdjacentZ());
-+ corePosition[1] = blockposition.add(leftDirection.getAdjacentX(), 0, leftDirection.getAdjacentZ());
-+ corePosition[2] = corePosition[1].add(downDirection.getAdjacentX(), 0, downDirection.getAdjacentZ());
-+ corePosition[3] = blockposition.add(2 * downDirection.getAdjacentX(), 0, 2 * downDirection.getAdjacentZ());
-+ corePosition[5] = blockposition.add(rightDirection.getAdjacentX(), 0, rightDirection.getAdjacentZ());
-+ corePosition[4] = corePosition[5].add(downDirection.getAdjacentX(), 0, downDirection.getAdjacentZ());
-+
-+ BlockPosition[] tmpPosition = new BlockPosition[8];
-+ EnumDirection[] tmpPositionDirection = new EnumDirection[8];
-+ tmpPositionDirection[0] = rightDirection;
-+ tmpPositionDirection[1] = leftDirection;
-+ tmpPositionDirection[2] = updirection;
-+ tmpPositionDirection[3] = downDirection;
-+ tmpPositionDirection[4] = leftDirection;
-+ tmpPositionDirection[5] = rightDirection;
-+ tmpPositionDirection[6] = downDirection;
-+ tmpPositionDirection[7] = updirection;
-+
-+ BlockPosition pos;
-+ Optional<Vec3D> vector;
-+ for (int r = 1; r <= radius; r++) {
-+ int h = 0;
-+ while (h <= 1) {
-+ int numIterated = 0;
-+ for (int index = (int)(Math.random() * corePosition.length); numIterated < corePosition.length; index = (index+1) % corePosition.length) {
-+ numIterated++;
-+
-+ pos = corePosition[index].add(0, h, 0);
-+ vector = isSafeRespawn(entitytypes, world, pos, 0);
-+ if (vector.isPresent()) {
-+ return vector;
-+ }
-+ }
-+ tmpPosition[0] = corePosition[0].add(0, h, 0);
-+ tmpPosition[1] = corePosition[0].add(0, h, 0);
-+ tmpPosition[2] = corePosition[1].add(0, h, 0);
-+ tmpPosition[3] = corePosition[2].add(0, h, 0);
-+ tmpPosition[4] = corePosition[3].add(0, h, 0);
-+ tmpPosition[5] = corePosition[3].add(0, h, 0);
-+ tmpPosition[6] = corePosition[4].add(0, h, 0);
-+ tmpPosition[7] = corePosition[5].add(0, h, 0);
-+ for (int rr = 1; rr <= r; rr++){
-+ numIterated = 0;
-+ for (int index = (int)(Math.random() * tmpPosition.length); numIterated < tmpPosition.length; index = (index+1) % tmpPosition.length) {
-+ numIterated++;
-+ tmpPosition[index] = tmpPosition[index].add(tmpPositionDirection[index].getAdjacentX(), 0, tmpPositionDirection[index].getAdjacentZ());
-+ pos = tmpPosition[index];
-+
-+ vector = isSafeRespawn(entitytypes, world, pos, 0);
-+ if (vector.isPresent()) {
-+ return vector;
-+ }
-+ }
-+ }
-+ switch (h) {
-+ case 0:
-+ h = -1;
-+ break;
-+ case -1:
-+ h = -2;
-+ break;
-+ case -2:
-+ h = Integer.MAX_VALUE;
-+ break;
-+ }
-+ }
-+ for (int index = 0; index < corePosition.length; index++) {
-+ EnumDirection tmp = corePositionOutDirection[index];
-+ corePosition[index] = corePosition[index].add(tmp.getAdjacentX(), 0, tmp.getAdjacentZ());
-+ }
-+ }
-+ return Optional.empty();
-+ }
-+ // Paper end
-+
-+ // Paper start -- add maxBelow param
-+ public static Optional<Vec3D> a(EntityTypes<?> entitytypes, IWorldReader iworldreader, BlockPosition blockposition) { return isSafeRespawn(entitytypes, iworldreader, blockposition, 2); }
-+ public static Optional<Vec3D> isSafeRespawn(EntityTypes<?> entitytypes, IWorldReader iworldreader, BlockPosition blockposition, int maxBelow) {
-+ // Paper end
- VoxelShape voxelshape = iworldreader.getType(blockposition).getCollisionShape(iworldreader, blockposition);
-
- if (voxelshape.c(EnumDirection.EnumAxis.Y) > 0.4375D) {
-@@ -236,7 +335,7 @@ public class BlockBed extends BlockFacingHorizontal implements ITileEntity {
- } else {
- BlockPosition.MutableBlockPosition blockposition_mutableblockposition = blockposition.i();
-
-- while (blockposition_mutableblockposition.getY() >= 0 && blockposition.getY() - blockposition_mutableblockposition.getY() <= 2 && iworldreader.getType(blockposition_mutableblockposition).getCollisionShape(iworldreader, blockposition_mutableblockposition).isEmpty()) {
-+ while (blockposition_mutableblockposition.getY() >= 0 && blockposition.getY() - blockposition_mutableblockposition.getY() <= maxBelow && iworldreader.getType(blockposition_mutableblockposition).getCollisionShape(iworldreader, blockposition_mutableblockposition).isEmpty()) { // Paper -- configurable max distance to search below
- blockposition_mutableblockposition.c(EnumDirection.DOWN);
- }
-