From e43e7d8c3c8027c431a4bbafd9cc71a1e39e6ec5 Mon Sep 17 00:00:00 2001 From: Dan Truong Date: Fri, 8 May 2026 18:56:09 -0400 Subject: [PATCH] partially validate respawn on sublevels --- .../sable/mixin/respawn_point/ServerPlayerMixin.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/respawn_point/ServerPlayerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/respawn_point/ServerPlayerMixin.java index 6eb60204..6ed4f1bb 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/respawn_point/ServerPlayerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/respawn_point/ServerPlayerMixin.java @@ -169,7 +169,16 @@ public void copyRespawnPosition(final ServerPlayer serverPlayer) { return Optional.empty(); } - // TODO: do validation here + // Skip validation when the sublevel is unloaded + final boolean shouldValidate = point.subLevelId() == null || Sable.HELPER.getContaining(level, blockPos) != null; + + if (shouldValidate && findRespawnAndUseSpawnBlock(level, blockPos, f1, b1, b2).isEmpty()) { + data.removeTrackingPoint(this.sable$respawnPoint); + this.sable$respawnPoint = null; + return Optional.empty(); + } + + // TODO: validation for unloaded sublevels if (point.subLevelId() != null) { this.sable$queuedFreeze = Pair.of(point.subLevelId(), point.localAnchor());