From ee54e153bfc8fb2d14020d30192950baba4a7b89 Mon Sep 17 00:00:00 2001 From: MrMicky Date: Wed, 23 Oct 2019 16:11:14 +0200 Subject: [PATCH] Fix item hover event for 1.12 players --- .../ChatItemRewriter.java | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_12to1_11_1/ChatItemRewriter.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_12to1_11_1/ChatItemRewriter.java index 2d315a65f..422976c97 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_12to1_11_1/ChatItemRewriter.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_12to1_11_1/ChatItemRewriter.java @@ -3,6 +3,7 @@ package us.myles.ViaVersion.protocols.protocol1_12to1_11_1; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; import us.myles.ViaVersion.api.data.UserConnection; import java.util.regex.Pattern; @@ -20,23 +21,30 @@ public class ChatItemRewriter { if (hoverEvent.has("action") && hoverEvent.has("value")) { String type = hoverEvent.get("action").getAsString(); if (type.equals("show_item") || type.equals("show_entity")) { - if (hoverEvent.get("value").isJsonPrimitive()) { - if (hoverEvent.get("value").getAsJsonPrimitive().isString()) { - String value = hoverEvent.get("value").getAsString(); - value = indexRemoval.matcher(value).replaceAll(""); - hoverEvent.addProperty("value", value); + JsonElement value = hoverEvent.get("value"); + + if (value.isJsonPrimitive() && value.getAsJsonPrimitive().isString()) { + String newValue = indexRemoval.matcher(value.getAsString()).replaceAll(""); + hoverEvent.addProperty("value", newValue); + } else if (value.isJsonArray()) { + JsonArray newArray = new JsonArray(); + + for (JsonElement valueElement : value.getAsJsonArray()) { + if (valueElement.isJsonPrimitive() && valueElement.getAsJsonPrimitive().isString()) { + String newValue = indexRemoval.matcher(valueElement.getAsString()).replaceAll(""); + newArray.add(new JsonPrimitive(newValue)); + } } + + hoverEvent.add("value", newArray); } } } } - } else { - if (obj.has("extra")) { - toClient(obj.get("extra"), user); - } + } else if (obj.has("extra")) { + toClient(obj.get("extra"), user); } - } - if (element instanceof JsonArray) { + } else if (element instanceof JsonArray) { JsonArray array = (JsonArray) element; for (JsonElement value : array) { toClient(value, user);