2020-04-22 00:06:30 +02:00
|
|
|
From 3a7c408083a0e6bcb430d26dfa7471c7700a7f1f Mon Sep 17 00:00:00 2001
|
2018-09-24 02:10:24 +02:00
|
|
|
From: Zach Brown <zach.brown@destroystokyo.com>
|
|
|
|
Date: Sat, 22 Sep 2018 15:56:59 -0400
|
|
|
|
Subject: [PATCH] Catch JsonParseException in Entity and TE names
|
|
|
|
|
|
|
|
As a result, data that no longer parses correctly will not crash the server
|
|
|
|
instead just logging the exception and continuing (and in most cases should
|
|
|
|
fix the data)
|
|
|
|
|
|
|
|
Player data is fixed pretty much immediately but some block data (like
|
|
|
|
Shulkers) may need to be changed in order for it to re-save properly
|
|
|
|
|
|
|
|
No more crashing though.
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java b/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java
|
2020-04-22 00:06:30 +02:00
|
|
|
index 78671229..ef2a496e 100644
|
2018-09-24 02:10:24 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java
|
2019-12-12 17:20:43 +01:00
|
|
|
@@ -59,7 +59,7 @@ public abstract class CommandBlockListenerAbstract implements ICommandListener {
|
2019-05-05 10:33:44 +02:00
|
|
|
this.command = nbttagcompound.getString("Command");
|
|
|
|
this.successCount = nbttagcompound.getInt("SuccessCount");
|
2018-09-24 02:10:24 +02:00
|
|
|
if (nbttagcompound.hasKeyOfType("CustomName", 8)) {
|
2019-12-12 17:20:43 +01:00
|
|
|
- this.setName(IChatBaseComponent.ChatSerializer.a(nbttagcompound.getString("CustomName")));
|
|
|
|
+ this.setName(MCUtil.getBaseComponentFromNbt("CustomName", nbttagcompound)); // Paper - Catch ParseException
|
2018-09-24 02:10:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (nbttagcompound.hasKeyOfType("TrackOutput", 1)) {
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
2020-04-22 00:06:30 +02:00
|
|
|
index 09c57605..d1ab124f 100644
|
2018-09-24 02:10:24 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
2020-02-21 18:52:20 +01:00
|
|
|
@@ -1679,7 +1679,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
2019-12-12 17:20:43 +01:00
|
|
|
this.Z();
|
2019-05-05 10:33:44 +02:00
|
|
|
this.setYawPitch(this.yaw, this.pitch);
|
|
|
|
if (nbttagcompound.hasKeyOfType("CustomName", 8)) {
|
|
|
|
- this.setCustomName(IChatBaseComponent.ChatSerializer.a(nbttagcompound.getString("CustomName")));
|
|
|
|
+ this.setCustomName(MCUtil.getBaseComponentFromNbt("CustomName", nbttagcompound)); // Paper - Catch ParseException
|
|
|
|
}
|
2018-09-24 02:10:24 +02:00
|
|
|
|
2019-05-05 10:33:44 +02:00
|
|
|
this.setCustomNameVisible(nbttagcompound.getBoolean("CustomNameVisible"));
|
2018-09-24 02:10:24 +02:00
|
|
|
diff --git a/src/main/java/net/minecraft/server/MCUtil.java b/src/main/java/net/minecraft/server/MCUtil.java
|
2020-04-22 00:06:30 +02:00
|
|
|
index 9d0b0c9f..3342278b 100644
|
2018-09-24 02:10:24 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/MCUtil.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/MCUtil.java
|
2020-04-19 12:01:07 +02:00
|
|
|
@@ -437,4 +437,19 @@ public final class MCUtil {
|
2018-09-24 02:10:24 +02:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+
|
|
|
|
+ @Nullable
|
|
|
|
+ public static IChatBaseComponent getBaseComponentFromNbt(String key, NBTTagCompound compound) {
|
2018-09-24 03:22:57 +02:00
|
|
|
+ if (!compound.hasKey(key)) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ String string = compound.getString(key);
|
2018-09-24 02:10:24 +02:00
|
|
|
+ try {
|
2018-09-24 03:22:57 +02:00
|
|
|
+ return IChatBaseComponent.ChatSerializer.jsonToComponent(string);
|
|
|
|
+ } catch (com.google.gson.JsonParseException e) {
|
|
|
|
+ org.bukkit.Bukkit.getLogger().warning("Unable to parse " + key + " from " + compound +": " + e.getMessage());
|
2018-09-24 02:10:24 +02:00
|
|
|
+ }
|
|
|
|
+
|
2018-09-24 03:22:57 +02:00
|
|
|
+ return null;
|
2018-09-24 02:10:24 +02:00
|
|
|
+ }
|
|
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/TileEntityBanner.java b/src/main/java/net/minecraft/server/TileEntityBanner.java
|
2020-04-22 00:06:30 +02:00
|
|
|
index 93911a82..d35604ed 100644
|
2018-09-24 02:10:24 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/TileEntityBanner.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/TileEntityBanner.java
|
2020-01-22 03:02:07 +01:00
|
|
|
@@ -60,7 +60,7 @@ public class TileEntityBanner extends TileEntity implements INamableTileEntity {
|
2018-09-24 02:10:24 +02:00
|
|
|
public void load(NBTTagCompound nbttagcompound) {
|
|
|
|
super.load(nbttagcompound);
|
|
|
|
if (nbttagcompound.hasKeyOfType("CustomName", 8)) {
|
|
|
|
- this.a = IChatBaseComponent.ChatSerializer.a(nbttagcompound.getString("CustomName"));
|
|
|
|
+ this.a = MCUtil.getBaseComponentFromNbt("CustomName", nbttagcompound); // Paper - Catch ParseException
|
|
|
|
}
|
|
|
|
|
|
|
|
if (this.hasWorld()) {
|
2019-05-05 10:33:44 +02:00
|
|
|
diff --git a/src/main/java/net/minecraft/server/TileEntityContainer.java b/src/main/java/net/minecraft/server/TileEntityContainer.java
|
2020-04-22 00:06:30 +02:00
|
|
|
index 473ec2cb..ab6b86e4 100644
|
2019-05-05 10:33:44 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/TileEntityContainer.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/TileEntityContainer.java
|
|
|
|
@@ -17,7 +17,7 @@ public abstract class TileEntityContainer extends TileEntity implements IInvento
|
|
|
|
super.load(nbttagcompound);
|
|
|
|
this.chestLock = ChestLock.b(nbttagcompound);
|
2018-09-24 02:10:24 +02:00
|
|
|
if (nbttagcompound.hasKeyOfType("CustomName", 8)) {
|
2019-05-05 10:33:44 +02:00
|
|
|
- this.customName = IChatBaseComponent.ChatSerializer.a(nbttagcompound.getString("CustomName"));
|
|
|
|
+ this.customName = MCUtil.getBaseComponentFromNbt("CustomName", nbttagcompound); // Paper - Catch ParseException
|
2018-09-24 02:10:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
--
|
2020-04-22 00:06:30 +02:00
|
|
|
2.25.1.windows.1
|
2018-09-24 02:10:24 +02:00
|
|
|
|