Skip to content

Commit 9667181

Browse files
Fix OfflinePlayer#getBedSpawnLocation (#7861)
1 parent af3b377 commit 9667181

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2+
From: Jake Potrebic <jake.m.potrebic@gmail.com>
3+
Date: Mon, 30 May 2022 16:03:36 -0700
4+
Subject: [PATCH] Fix OfflinePlayer#getBedSpawnLocation
5+
6+
When calling getBedSpawnLocation on an
7+
instance of CraftOfflinePlayer the world was incorrect
8+
due to the logic for reading the NBT not being up-to-date.
9+
10+
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
11+
index 1f2bc88d4570c6ef00e67a772b745e0b0c98e051..50927403d07954f3b930b39046866899a1b289e6 100644
12+
--- a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
13+
+++ b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
14+
@@ -28,6 +28,7 @@ import org.bukkit.profile.PlayerProfile;
15+
16+
@SerializableAs("Player")
17+
public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializable {
18+
+ private static final org.slf4j.Logger LOGGER = com.mojang.logging.LogUtils.getLogger(); // Paper
19+
private final GameProfile profile;
20+
private final CraftServer server;
21+
private final PlayerDataStorage storage;
22+
@@ -308,11 +309,20 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa
23+
if (data == null) return null;
24+
25+
if (data.contains("SpawnX") && data.contains("SpawnY") && data.contains("SpawnZ")) {
26+
- String spawnWorld = data.getString("SpawnWorld");
27+
- if (spawnWorld.equals("")) {
28+
- spawnWorld = this.server.getWorlds().get(0).getName();
29+
+ // Paper start - fix wrong world
30+
+ final float respawnAngle = data.getFloat("SpawnAngle");
31+
+ org.bukkit.World spawnWorld = this.server.getWorld(data.getString("SpawnWorld")); // legacy
32+
+ if (data.contains("SpawnDimension")) {
33+
+ com.mojang.serialization.DataResult<net.minecraft.resources.ResourceKey<net.minecraft.world.level.Level>> result = net.minecraft.world.level.Level.RESOURCE_KEY_CODEC.parse(net.minecraft.nbt.NbtOps.INSTANCE, data.get("SpawnDimension"));
34+
+ net.minecraft.resources.ResourceKey<net.minecraft.world.level.Level> levelKey = result.resultOrPartial(LOGGER::error).orElse(net.minecraft.world.level.Level.OVERWORLD);
35+
+ net.minecraft.server.level.ServerLevel level = this.server.console.getLevel(levelKey);
36+
+ spawnWorld = level != null ? level.getWorld() : spawnWorld;
37+
}
38+
- return new Location(this.server.getWorld(spawnWorld), data.getInt("SpawnX"), data.getInt("SpawnY"), data.getInt("SpawnZ"));
39+
+ if (spawnWorld == null) {
40+
+ return null;
41+
+ }
42+
+ return new Location(spawnWorld, data.getInt("SpawnX"), data.getInt("SpawnY"), data.getInt("SpawnZ"), respawnAngle, 0);
43+
+ // Paper end
44+
}
45+
return null;
46+
}

0 commit comments

Comments
 (0)