13
0
geforkt von Mirrors/Paper
Paper/patches/server/Don-t-complete-skull-lookups-on-main-thread-MC-22743.patch
Shane Freeder 2143a948be Fix NPE when completing skull lookups without a real owner (Fixes #6052)
This looks like mojang introduced an NPE however it was previously being
supressed by the future used by the server, we'll just stick to the legacy
behavior of retainining the existing profile of earlier versions
2021-07-01 00:10:28 +01:00

43 Zeilen
2.4 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Shane Freeder <theboyetronic@gmail.com>
Date: Tue, 29 Jun 2021 17:17:34 +0100
Subject: [PATCH] Don't complete skull lookups on main thread (MC-227435)
diff --git a/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java
@@ -0,0 +0,0 @@ public class SkullBlockEntity extends BlockEntity {
public static void updateGameprofile(@Nullable GameProfile owner, Consumer<GameProfile> callback) {
if (owner != null && !StringUtil.isNullOrEmpty(owner.getName()) && (!owner.isComplete() || !owner.getProperties().containsKey("textures")) && SkullBlockEntity.profileCache != null && SkullBlockEntity.sessionService != null) {
- SkullBlockEntity.profileCache.getAsync(owner.getName(), (gameprofile1) -> {
+ // Paper start
+ SkullBlockEntity.profileCache.getAsync(owner.getName(), (gameprofile) -> {
+ if (gameprofile == null) {
+ net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(() -> callback.accept(owner));
+ return;
+ }
+ Runnable runnable = () -> {
+ GameProfile gameprofile1 = gameprofile;
Property property = (Property) Iterables.getFirst(gameprofile1.getProperties().get("textures"), (Object) null);
if (property == null) {
gameprofile1 = SkullBlockEntity.sessionService.fillProfileProperties(gameprofile1, true);
}
- SkullBlockEntity.profileCache.add(gameprofile1);
- callback.accept(gameprofile1);
+ GameProfile finalGameprofile = gameprofile1;
+ net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(() -> {
+ SkullBlockEntity.profileCache.add(finalGameprofile);
+ callback.accept(finalGameprofile);
+ });
+ };
+ net.minecraft.Util.backgroundExecutor().execute(runnable);
+ // Paper end
});
} else {
callback.accept(owner);