update [Fix Incorrect Collision Behavior for Block Shape] to [Configurable collision behavior] fix chunk reload detector 20250604 23:22:57 UTC+8: use BLOCK_SHAPE_VANILLA as default instead of PAPER
46 lines
2.8 KiB
Diff
46 lines
2.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Helvetica Volubi <suisuroru@blue-millennium.fun>
|
|
Date: Sat, 26 Apr 2025 21:47:45 +0800
|
|
Subject: [PATCH] Correct player respawn place
|
|
|
|
|
|
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
|
|
index e83c6a81e318a05580f5c811cb2543a83435f04c..2f2726ed97658732751032b21752840702da233e 100644
|
|
--- a/net/minecraft/server/level/ServerPlayer.java
|
|
+++ b/net/minecraft/server/level/ServerPlayer.java
|
|
@@ -492,8 +492,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
|
double amountX = selectMaxX - selectMinX;
|
|
double amountZ = selectMaxZ - selectMinZ;
|
|
|
|
- int selectX = amountX < 1.0 ? Mth.floor(worldBorder.getCenterX()) : (int)Mth.floor((amountX + 1.0) * random.nextDouble() + selectMinX);
|
|
- int selectZ = amountZ < 1.0 ? Mth.floor(worldBorder.getCenterZ()) : (int)Mth.floor((amountZ + 1.0) * random.nextDouble() + selectMinZ);
|
|
+ // Luminol start - Correct player respawn place
|
|
+ int selectX = amountX < 0.0 ? Mth.floor(worldBorder.getCenterX()) : (int)Mth.floor(amountX * random.nextDouble() + selectMinX);
|
|
+ int selectZ = amountZ < 0.0 ? Mth.floor(worldBorder.getCenterZ()) : (int)Mth.floor(amountZ * random.nextDouble() + selectMinZ);
|
|
+ // Luminol end - Correct player respawn place
|
|
|
|
return new BlockPos(selectX, 0, selectZ);
|
|
}
|
|
@@ -504,10 +506,20 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
|
}
|
|
|
|
private static BlockPos findSpawnAround(ServerLevel world, ServerPlayer player, BlockPos selected) {
|
|
+ // Luminol start - Correct player respawn place
|
|
+ BlockPos inChunk;
|
|
+ inChunk = PlayerRespawnLogic.getOverworldRespawnPos(world, selected.getX(), selected.getZ());
|
|
+ if (inChunk != null) {
|
|
+ AABB checkVolume = player.getBoundingBoxAt((double)inChunk.getX() + 0.5, (double)inChunk.getY(), (double)inChunk.getZ() + 0.5);
|
|
+ if (player.noCollisionNoLiquid(world, checkVolume)) {
|
|
+ return inChunk;
|
|
+ }
|
|
+ }
|
|
+ // Luminol end - Correct player respawn place
|
|
// try hard to find, so that we don't attempt another chunk load
|
|
for (int dz = -SPAWN_RADIUS_SELECTION_SEARCH; dz <= SPAWN_RADIUS_SELECTION_SEARCH; ++dz) {
|
|
for (int dx = -SPAWN_RADIUS_SELECTION_SEARCH; dx <= SPAWN_RADIUS_SELECTION_SEARCH; ++dx) {
|
|
- BlockPos inChunk = PlayerRespawnLogic.getOverworldRespawnPos(world, selected.getX() + dx, selected.getZ() + dz);
|
|
+ inChunk = PlayerRespawnLogic.getOverworldRespawnPos(world, selected.getX() + dx, selected.getZ() + dz); // Luminol - Correct player respawn place
|
|
if (inChunk == null) {
|
|
continue;
|
|
}
|