geforkt von Mirrors/Paper
2143a948be
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
43 Zeilen
2.4 KiB
Diff
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);
|