mirror of
https://github.com/PaperMC/Paper.git
synced 2024-10-29 23:09:33 +01:00
9147456fc9
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 CraftBukkit Changes: ab8ace685 SPIGOT-7236: Bone meal doesn't increase use statistic 7dcb59b8e Avoid switch on material in previous commit Spigot Changes: 19641c75 SPIGOT-7235: World.Spigot#strikeLightningEffect doesn't do anything
47 lines
2.8 KiB
Diff
47 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 17b3d5de58a9ef3acc67624c46cd6bbd96394f87..714afc98b5150907b45a00060be4e41582333204 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;
|
|
}
|