mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-03 17:52:28 +01:00
cfe3ad1b0f
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 45d9c73c SPIGOT-7043: EnderChest does not implement Lidded 86b95f34 SPIGOT-7047: Add Player#getLastDeathLocation CraftBukkit Changes: b2557f6ac SPIGOT-7041: Custom BiomeProvider not used when world set to type FLAT 732c50cab SPIGOT-7043: EnderChest does not implement Lidded 6209029ea SPIGOT-7048: addPassenger() not working when vehicle is player 3aa7836df SPIGOT-7047: Add Player#getLastDeathLocation 7d522cd26 SPIGOT-7050: Enchantment data of items will not be saved correctly when saved in YAML configuration file Spigot Changes: 1dffefb4 Rebuild patches
46 lines
2.8 KiB
Diff
46 lines
2.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Mon, 30 May 2022 16:03:36 -0700
|
|
Subject: [PATCH] Fix OfflinePlayer#getBedSpawnLocation
|
|
|
|
When calling getBedSpawnLocation on an
|
|
instance of CraftOfflinePlayer the world was incorrect
|
|
due to the logic for reading the NBT not being up-to-date.
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
|
|
index d7823d7dc88cfba6f6ac9dae220e03dea4a0bcdd..6d2ba650f53de8a460857f1846401a20b50cc43c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
|
|
@@ -31,6 +31,7 @@ import org.bukkit.profile.PlayerProfile;
|
|
|
|
@SerializableAs("Player")
|
|
public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializable {
|
|
+ private static final org.slf4j.Logger LOGGER = com.mojang.logging.LogUtils.getLogger(); // Paper
|
|
private final GameProfile profile;
|
|
private final CraftServer server;
|
|
private final PlayerDataStorage storage;
|
|
@@ -319,11 +320,20 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa
|
|
if (data == null) return null;
|
|
|
|
if (data.contains("SpawnX") && data.contains("SpawnY") && data.contains("SpawnZ")) {
|
|
- String spawnWorld = data.getString("SpawnWorld");
|
|
- if (spawnWorld.equals("")) {
|
|
- spawnWorld = this.server.getWorlds().get(0).getName();
|
|
+ // Paper start - fix wrong world
|
|
+ final float respawnAngle = data.getFloat("SpawnAngle");
|
|
+ org.bukkit.World spawnWorld = this.server.getWorld(data.getString("SpawnWorld")); // legacy
|
|
+ if (data.contains("SpawnDimension")) {
|
|
+ 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"));
|
|
+ net.minecraft.resources.ResourceKey<net.minecraft.world.level.Level> levelKey = result.resultOrPartial(LOGGER::error).orElse(net.minecraft.world.level.Level.OVERWORLD);
|
|
+ net.minecraft.server.level.ServerLevel level = this.server.console.getLevel(levelKey);
|
|
+ spawnWorld = level != null ? level.getWorld() : spawnWorld;
|
|
}
|
|
- return new Location(this.server.getWorld(spawnWorld), data.getInt("SpawnX"), data.getInt("SpawnY"), data.getInt("SpawnZ"));
|
|
+ if (spawnWorld == null) {
|
|
+ return null;
|
|
+ }
|
|
+ return new Location(spawnWorld, data.getInt("SpawnX"), data.getInt("SpawnY"), data.getInt("SpawnZ"), respawnAngle, 0);
|
|
+ // Paper end
|
|
}
|
|
return null;
|
|
}
|