mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-26 12:36:07 +01:00
Add debug for invalid GameProfiles on skull blocks/items (#7512)
This commit is contained in:
parent
1c5f8b0fce
commit
f0d0078deb
@ -0,0 +1,63 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jason Penilla <11360596+jpenilla@users.noreply.github.com>
|
||||
Date: Sat, 26 Feb 2022 13:27:31 -0700
|
||||
Subject: [PATCH] Add debug for invalid GameProfiles on skull blocks/items
|
||||
|
||||
Improves the error message for placed in world skull blocks by default,
|
||||
also adds 'Paper.debugInvalidSkullProfiles' system property which can be
|
||||
set to 'true' for extra debug info (trace of updateGameprofile caller).
|
||||
|
||||
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 118472b83a21a250f398c088c91ac4560c19c749..5840cf6d22029cf1599ae9460b4498d5c8c5ae7d 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
|
||||
@@ -142,13 +142,28 @@ public class SkullBlockEntity extends BlockEntity {
|
||||
updateGameprofile(this.owner, (owner) -> {
|
||||
this.owner = owner;
|
||||
this.setChanged();
|
||||
+ // Paper start
|
||||
+ }, () -> {
|
||||
+ final @Nullable Level level = this.getLevel();
|
||||
+ return "SkullBlockEntity at " + this.getBlockPos() + (level == null ? "" : (" in level: " + level.dimension().location()));
|
||||
+ // Paper end
|
||||
});
|
||||
}
|
||||
|
||||
public static void updateGameprofile(@Nullable GameProfile owner, Consumer<GameProfile> callback) {
|
||||
+ // Paper start
|
||||
+ updateGameprofile(owner, callback, null);
|
||||
+ }
|
||||
+
|
||||
+ private static final boolean DEBUG_INVALID_SKULL_PROFILES = Boolean.getBoolean("Paper.debugInvalidSkullProfiles");
|
||||
+
|
||||
+ public static void updateGameprofile(@Nullable GameProfile owner, Consumer<GameProfile> callback, final @Nullable java.util.function.Supplier<String> debugInfo) {
|
||||
if (owner != null && !StringUtil.isNullOrEmpty(owner.getName()) && (!owner.isComplete() || !owner.getProperties().containsKey("textures")) && profileCache != null && sessionService != null) {
|
||||
+ final @Nullable Throwable trace = DEBUG_INVALID_SKULL_PROFILES ? new Throwable("updateGameprofile caller debug trace") : null;
|
||||
profileCache.getAsync(owner.getName(), (profile) -> {
|
||||
Util.PROFILE_EXECUTOR.execute(() -> { // Paper - not a good idea to use BLOCKING OPERATIONS on the worldgen executor
|
||||
+ try {
|
||||
+ // Paper end
|
||||
Util.ifElse(profile, (profilex) -> {
|
||||
Property property = Iterables.getFirst(profilex.getProperties().get("textures"), (Property)null);
|
||||
if (property == null) {
|
||||
@@ -165,6 +180,20 @@ public class SkullBlockEntity extends BlockEntity {
|
||||
callback.accept(owner);
|
||||
});
|
||||
});
|
||||
+ // Paper start
|
||||
+ } catch (final Exception ex) {
|
||||
+ if (trace != null) {
|
||||
+ ex.addSuppressed(trace);
|
||||
+ }
|
||||
+ final String ownerMessage = "Original profile: '" + owner + "'";
|
||||
+ final String debugMessage = " Run with -DPaper.debugInvalidSkullProfiles=true for further debug information.";
|
||||
+ final String message = ownerMessage + (trace == null ? debugMessage : "");
|
||||
+ if (debugInfo == null) {
|
||||
+ throw new RuntimeException(message, ex);
|
||||
+ }
|
||||
+ throw new RuntimeException(debugInfo.get() + " " + message, ex);
|
||||
+ }
|
||||
+ // Paper end
|
||||
});
|
||||
});
|
||||
} else {
|
Loading…
Reference in New Issue
Block a user