diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_16to1_15_2/Protocol1_16To1_15_2.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_16to1_15_2/Protocol1_16To1_15_2.java index 2e95f570e..cad787ef9 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_16to1_15_2/Protocol1_16To1_15_2.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_16to1_15_2/Protocol1_16To1_15_2.java @@ -1,5 +1,8 @@ package us.myles.ViaVersion.protocols.protocol1_16to1_15_2; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.protocol.Protocol; @@ -18,12 +21,13 @@ import us.myles.ViaVersion.protocols.protocol1_16to1_15_2.packets.InventoryPacke import us.myles.ViaVersion.protocols.protocol1_16to1_15_2.packets.WorldPackets; import us.myles.ViaVersion.protocols.protocol1_16to1_15_2.storage.EntityTracker1_16; import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; +import us.myles.ViaVersion.util.GsonUtil; import java.util.UUID; public class Protocol1_16To1_15_2 extends Protocol { - public static final UUID ZERO_UUID = new UUID(0, 0); + private static final UUID ZERO_UUID = new UUID(0, 0); private TagRewriter tagRewriter; public Protocol1_16To1_15_2() { @@ -53,6 +57,47 @@ public class Protocol1_16To1_15_2 extends Protocol { + String original = wrapper.read(Type.STRING); + JsonObject object = GsonUtil.getGson().fromJson(original, JsonObject.class); + JsonObject players = object.getAsJsonObject("players"); + if (players == null) return; + + JsonArray sample = players.getAsJsonArray("sample"); + if (sample == null) return; + + JsonArray splitSamples = new JsonArray(); + for (JsonElement element : sample) { + JsonObject playerInfo = element.getAsJsonObject(); + String name = playerInfo.getAsJsonPrimitive("name").getAsString(); + if (name.indexOf('\n') == -1) { + splitSamples.add(playerInfo); + continue; + } + + String id = playerInfo.getAsJsonPrimitive("id").getAsString(); + for (String s : name.split("\n")) { + JsonObject newSample = new JsonObject(); + newSample.addProperty("name", s); + newSample.addProperty("id", id); + splitSamples.add(newSample); + } + } + + if (splitSamples.size() != sample.size()) { + players.add("sample", splitSamples); + wrapper.write(Type.STRING, object.toString()); + } else { + wrapper.write(Type.STRING, original); + } + }); + } + }); + registerOutgoing(ClientboundPackets1_15.CHAT_MESSAGE, new PacketRemapper() { @Override public void registerMap() {