Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-12-29 01:20:15 +01:00
Merge pull request #1840 from KennyTV/component-reading
Directly read components as json, to only de-/serialize once
Dieser Commit ist enthalten in:
Commit
a942d3aad5
@ -9,8 +9,8 @@ public enum MetaType1_13 implements MetaType {
|
|||||||
VarInt(1, Type.VAR_INT),
|
VarInt(1, Type.VAR_INT),
|
||||||
Float(2, Type.FLOAT),
|
Float(2, Type.FLOAT),
|
||||||
String(3, Type.STRING),
|
String(3, Type.STRING),
|
||||||
Chat(4, Type.STRING),
|
Chat(4, Type.COMPONENT),
|
||||||
OptChat(5, Type.OPTIONAL_CHAT),
|
OptChat(5, Type.OPTIONAL_COMPONENT),
|
||||||
Slot(6, Type.FLAT_ITEM),
|
Slot(6, Type.FLAT_ITEM),
|
||||||
Boolean(7, Type.BOOLEAN),
|
Boolean(7, Type.BOOLEAN),
|
||||||
Vector3F(8, Type.ROTATION),
|
Vector3F(8, Type.ROTATION),
|
||||||
|
@ -9,8 +9,8 @@ public enum MetaType1_13_2 implements MetaType {
|
|||||||
VarInt(1, Type.VAR_INT),
|
VarInt(1, Type.VAR_INT),
|
||||||
Float(2, Type.FLOAT),
|
Float(2, Type.FLOAT),
|
||||||
String(3, Type.STRING),
|
String(3, Type.STRING),
|
||||||
Chat(4, Type.STRING),
|
Chat(4, Type.COMPONENT),
|
||||||
OptChat(5, Type.OPTIONAL_CHAT),
|
OptChat(5, Type.OPTIONAL_COMPONENT),
|
||||||
Slot(6, Type.FLAT_VAR_INT_ITEM),
|
Slot(6, Type.FLAT_VAR_INT_ITEM),
|
||||||
Boolean(7, Type.BOOLEAN),
|
Boolean(7, Type.BOOLEAN),
|
||||||
Vector3F(8, Type.ROTATION),
|
Vector3F(8, Type.ROTATION),
|
||||||
|
@ -9,8 +9,8 @@ public enum MetaType1_14 implements MetaType {
|
|||||||
VarInt(1, Type.VAR_INT),
|
VarInt(1, Type.VAR_INT),
|
||||||
Float(2, Type.FLOAT),
|
Float(2, Type.FLOAT),
|
||||||
String(3, Type.STRING),
|
String(3, Type.STRING),
|
||||||
Chat(4, Type.STRING),
|
Chat(4, Type.COMPONENT),
|
||||||
OptChat(5, Type.OPTIONAL_CHAT),
|
OptChat(5, Type.OPTIONAL_COMPONENT),
|
||||||
Slot(6, Type.FLAT_VAR_INT_ITEM),
|
Slot(6, Type.FLAT_VAR_INT_ITEM),
|
||||||
Boolean(7, Type.BOOLEAN),
|
Boolean(7, Type.BOOLEAN),
|
||||||
Vector3F(8, Type.ROTATION),
|
Vector3F(8, Type.ROTATION),
|
||||||
|
@ -0,0 +1,97 @@
|
|||||||
|
package us.myles.ViaVersion.api.rewriters;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonPrimitive;
|
||||||
|
import us.myles.ViaVersion.util.GsonUtil;
|
||||||
|
|
||||||
|
// Packets using components:
|
||||||
|
// ping (status)
|
||||||
|
// disconnect (play and login)
|
||||||
|
// chat
|
||||||
|
// bossbar
|
||||||
|
// open window
|
||||||
|
// combat event
|
||||||
|
// title
|
||||||
|
// tablist
|
||||||
|
// teams
|
||||||
|
// scoreboard
|
||||||
|
// player info
|
||||||
|
// map data
|
||||||
|
// declare commands
|
||||||
|
// advancements
|
||||||
|
// update sign
|
||||||
|
public class ComponentRewriter {
|
||||||
|
|
||||||
|
public JsonElement processText(String value) {
|
||||||
|
JsonElement root = GsonUtil.getJsonParser().parse(value);
|
||||||
|
processText(root);
|
||||||
|
return root;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void processText(JsonElement element) {
|
||||||
|
if (element == null || element.isJsonNull()) return;
|
||||||
|
if (element.isJsonArray()) {
|
||||||
|
processAsArray(element);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (element.isJsonPrimitive()) {
|
||||||
|
handleText(element.getAsJsonPrimitive());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonObject object = element.getAsJsonObject();
|
||||||
|
JsonPrimitive text = object.getAsJsonPrimitive("text");
|
||||||
|
if (text != null) {
|
||||||
|
handleText(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonElement translate = object.get("translate");
|
||||||
|
if (translate != null) {
|
||||||
|
handleTranslate(object, translate.getAsString());
|
||||||
|
|
||||||
|
JsonElement with = object.get("with");
|
||||||
|
if (with != null) {
|
||||||
|
processAsArray(with);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonElement extra = object.get("extra");
|
||||||
|
if (extra != null) {
|
||||||
|
processAsArray(extra);
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonObject hoverEvent = object.getAsJsonObject("hoverEvent");
|
||||||
|
if (hoverEvent != null) {
|
||||||
|
handleHoverEvent(hoverEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void handleText(JsonPrimitive text) {
|
||||||
|
// To override if needed
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void handleTranslate(JsonObject object, String translate) {
|
||||||
|
// To override if needed
|
||||||
|
}
|
||||||
|
|
||||||
|
// To override if needed (don't forget to call super if needed)
|
||||||
|
protected void handleHoverEvent(JsonObject hoverEvent) {
|
||||||
|
String action = hoverEvent.getAsJsonPrimitive("action").getAsString();
|
||||||
|
if (action.equals("show_text")) {
|
||||||
|
JsonElement value = hoverEvent.get("value");
|
||||||
|
processText(value != null ? value : hoverEvent.get("contents"));
|
||||||
|
} else if (action.equals("show_entity")) {
|
||||||
|
JsonObject contents = hoverEvent.getAsJsonObject("contents");
|
||||||
|
if (contents != null) {
|
||||||
|
processText(contents.get("name"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processAsArray(JsonElement element) {
|
||||||
|
for (JsonElement jsonElement : element.getAsJsonArray()) {
|
||||||
|
processText(jsonElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,7 @@ package us.myles.ViaVersion.api.type;
|
|||||||
|
|
||||||
|
|
||||||
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
import us.myles.ViaVersion.api.minecraft.*;
|
import us.myles.ViaVersion.api.minecraft.*;
|
||||||
import us.myles.ViaVersion.api.minecraft.item.Item;
|
import us.myles.ViaVersion.api.minecraft.item.Item;
|
||||||
import us.myles.ViaVersion.api.type.types.*;
|
import us.myles.ViaVersion.api.type.types.*;
|
||||||
@ -77,7 +78,7 @@ public abstract class Type<T> implements ByteBufReader<T>, ByteBufWriter<T> {
|
|||||||
@Deprecated
|
@Deprecated
|
||||||
public static final Type<Integer[]> UNSIGNED_SHORT_ARRAY = new ArrayType<>(Type.UNSIGNED_SHORT);
|
public static final Type<Integer[]> UNSIGNED_SHORT_ARRAY = new ArrayType<>(Type.UNSIGNED_SHORT);
|
||||||
/* Other Types */
|
/* Other Types */
|
||||||
public static final Type<String> COMPONENT_STRING = new ComponentStringType();
|
public static final Type<JsonElement> COMPONENT = new ComponentType();
|
||||||
public static final Type<String> STRING = new StringType();
|
public static final Type<String> STRING = new StringType();
|
||||||
public static final Type<String[]> STRING_ARRAY = new ArrayType<>(Type.STRING);
|
public static final Type<String[]> STRING_ARRAY = new ArrayType<>(Type.STRING);
|
||||||
|
|
||||||
@ -110,7 +111,7 @@ public abstract class Type<T> implements ByteBufReader<T>, ByteBufWriter<T> {
|
|||||||
public static final Type<CompoundTag[]> NBT_ARRAY = new ArrayType<>(Type.NBT);
|
public static final Type<CompoundTag[]> NBT_ARRAY = new ArrayType<>(Type.NBT);
|
||||||
|
|
||||||
public static final Type<UUID> OPTIONAL_UUID = new OptUUIDType();
|
public static final Type<UUID> OPTIONAL_UUID = new OptUUIDType();
|
||||||
public static final Type<String> OPTIONAL_CHAT = new OptionalChatType();
|
public static final Type<JsonElement> OPTIONAL_COMPONENT = new OptionalComponentType();
|
||||||
public static final Type<Position> OPTIONAL_POSITION = new OptPositionType();
|
public static final Type<Position> OPTIONAL_POSITION = new OptPositionType();
|
||||||
public static final Type<Position> OPTIONAL_POSITION_1_14 = new OptPosition1_14Type();
|
public static final Type<Position> OPTIONAL_POSITION_1_14 = new OptPosition1_14Type();
|
||||||
|
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
package us.myles.ViaVersion.api.type.types;
|
|
||||||
|
|
||||||
import us.myles.ViaVersion.api.type.Type;
|
|
||||||
|
|
||||||
public class ComponentStringType extends StringType {
|
|
||||||
|
|
||||||
public ComponentStringType() {
|
|
||||||
super(262144);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends Type> getBaseClass() {
|
|
||||||
return StringType.class;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,24 @@
|
|||||||
|
package us.myles.ViaVersion.api.type.types;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
|
import us.myles.ViaVersion.util.GsonUtil;
|
||||||
|
|
||||||
|
public class ComponentType extends Type<JsonElement> {
|
||||||
|
private static final StringType STRING_TAG = new StringType(262144);
|
||||||
|
|
||||||
|
public ComponentType() {
|
||||||
|
super(JsonElement.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JsonElement read(ByteBuf buffer) throws Exception {
|
||||||
|
return GsonUtil.getJsonParser().parse(STRING_TAG.read(buffer));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(ByteBuf buffer, JsonElement object) throws Exception {
|
||||||
|
STRING_TAG.write(buffer, object.toString());
|
||||||
|
}
|
||||||
|
}
|
@ -1,27 +0,0 @@
|
|||||||
package us.myles.ViaVersion.api.type.types.minecraft;
|
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
|
||||||
import us.myles.ViaVersion.api.type.Type;
|
|
||||||
|
|
||||||
public class OptionalChatType extends Type<String> {
|
|
||||||
public OptionalChatType() {
|
|
||||||
super(String.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String read(ByteBuf buffer) throws Exception {
|
|
||||||
boolean present = buffer.readBoolean();
|
|
||||||
if (!present) return null;
|
|
||||||
return Type.STRING.read(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void write(ByteBuf buffer, String object) throws Exception {
|
|
||||||
if (object == null) {
|
|
||||||
buffer.writeBoolean(false);
|
|
||||||
} else {
|
|
||||||
buffer.writeBoolean(true);
|
|
||||||
Type.STRING.write(buffer, object);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,28 @@
|
|||||||
|
package us.myles.ViaVersion.api.type.types.minecraft;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
|
|
||||||
|
public class OptionalComponentType extends Type<JsonElement> {
|
||||||
|
|
||||||
|
public OptionalComponentType() {
|
||||||
|
super(JsonElement.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JsonElement read(ByteBuf buffer) throws Exception {
|
||||||
|
boolean present = buffer.readBoolean();
|
||||||
|
return present ? Type.COMPONENT.read(buffer) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(ByteBuf buffer, JsonElement object) throws Exception {
|
||||||
|
if (object == null) {
|
||||||
|
buffer.writeBoolean(false);
|
||||||
|
} else {
|
||||||
|
buffer.writeBoolean(true);
|
||||||
|
Type.COMPONENT.write(buffer, object);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -150,12 +150,11 @@ public class Protocol1_11To1_10 extends Protocol<ClientboundPackets1_9_3, Client
|
|||||||
int action = wrapper.get(Type.VAR_INT, 0);
|
int action = wrapper.get(Type.VAR_INT, 0);
|
||||||
|
|
||||||
// Handle the new ActionBar
|
// Handle the new ActionBar
|
||||||
if (action >= 2)
|
if (action >= 2) {
|
||||||
wrapper.set(Type.VAR_INT, 0, action + 1);
|
wrapper.set(Type.VAR_INT, 0, action + 1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -16,16 +16,15 @@ import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
|||||||
import us.myles.ViaVersion.api.rewriters.SoundRewriter;
|
import us.myles.ViaVersion.api.rewriters.SoundRewriter;
|
||||||
import us.myles.ViaVersion.api.type.Type;
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
import us.myles.ViaVersion.api.type.types.version.Types1_12;
|
import us.myles.ViaVersion.api.type.types.version.Types1_12;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
|
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3;
|
|
||||||
import us.myles.ViaVersion.protocols.protocol1_12to1_11_1.metadata.MetadataRewriter1_12To1_11_1;
|
import us.myles.ViaVersion.protocols.protocol1_12to1_11_1.metadata.MetadataRewriter1_12To1_11_1;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_12to1_11_1.packets.InventoryPackets;
|
import us.myles.ViaVersion.protocols.protocol1_12to1_11_1.packets.InventoryPackets;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_12to1_11_1.providers.InventoryQuickMoveProvider;
|
import us.myles.ViaVersion.protocols.protocol1_12to1_11_1.providers.InventoryQuickMoveProvider;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_12to1_11_1.storage.EntityTracker1_12;
|
import us.myles.ViaVersion.protocols.protocol1_12to1_11_1.storage.EntityTracker1_12;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9_1_2to1_9_3_4.types.Chunk1_9_3_4Type;
|
import us.myles.ViaVersion.protocols.protocol1_9_1_2to1_9_3_4.types.Chunk1_9_3_4Type;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9To1_8;
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9To1_8;
|
||||||
import us.myles.ViaVersion.util.GsonUtil;
|
|
||||||
|
|
||||||
public class Protocol1_12To1_11_1 extends Protocol<ClientboundPackets1_9_3, ClientboundPackets1_12, ServerboundPackets1_9_3, ServerboundPackets1_12> {
|
public class Protocol1_12To1_11_1 extends Protocol<ClientboundPackets1_9_3, ClientboundPackets1_12, ServerboundPackets1_9_3, ServerboundPackets1_12> {
|
||||||
|
|
||||||
@ -76,21 +75,18 @@ public class Protocol1_12To1_11_1 extends Protocol<ClientboundPackets1_9_3, Clie
|
|||||||
registerOutgoing(ClientboundPackets1_9_3.CHAT_MESSAGE, new PacketRemapper() {
|
registerOutgoing(ClientboundPackets1_9_3.CHAT_MESSAGE, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.STRING, Protocol1_9To1_8.FIX_JSON); // 0 - Chat Message (json)
|
|
||||||
map(Type.BYTE); // 1 - Chat Positon
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(new PacketHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
if (!Via.getConfig().is1_12NBTArrayFix()) return;
|
if (!Via.getConfig().is1_12NBTArrayFix()) return;
|
||||||
try {
|
try {
|
||||||
JsonElement obj = GsonUtil.getJsonParser().parse(wrapper.get(Type.STRING, 0));
|
JsonElement obj = Protocol1_9To1_8.FIX_JSON.transform(null, wrapper.passthrough(Type.COMPONENT).toString());
|
||||||
if (!TranslateRewriter.toClient(obj, wrapper.user())) {
|
if (!TranslateRewriter.toClient(obj, wrapper.user())) {
|
||||||
wrapper.cancel();
|
wrapper.cancel();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ChatItemRewriter.toClient(obj, wrapper.user());
|
ChatItemRewriter.toClient(obj, wrapper.user());
|
||||||
wrapper.set(Type.STRING, 0, obj.toString());
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -105,7 +105,7 @@ public class Protocol1_13_1To1_13 extends Protocol<ClientboundPackets1_13, Clien
|
|||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
int action = wrapper.get(Type.VAR_INT, 0);
|
int action = wrapper.get(Type.VAR_INT, 0);
|
||||||
if (action == 0) {
|
if (action == 0) {
|
||||||
wrapper.passthrough(Type.STRING);
|
wrapper.passthrough(Type.COMPONENT);
|
||||||
wrapper.passthrough(Type.FLOAT);
|
wrapper.passthrough(Type.FLOAT);
|
||||||
wrapper.passthrough(Type.VAR_INT);
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
wrapper.passthrough(Type.VAR_INT);
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
|
@ -1,27 +1,45 @@
|
|||||||
package us.myles.ViaVersion.protocols.protocol1_13to1_12_2;
|
package us.myles.ViaVersion.protocols.protocol1_13to1_12_2;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import net.md_5.bungee.api.chat.ClickEvent;
|
import net.md_5.bungee.api.chat.ClickEvent;
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
import net.md_5.bungee.api.chat.TranslatableComponent;
|
|
||||||
import net.md_5.bungee.chat.ComponentSerializer;
|
import net.md_5.bungee.chat.ComponentSerializer;
|
||||||
|
import us.myles.ViaVersion.api.rewriters.ComponentRewriter;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.MappingData;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.MappingData;
|
||||||
|
import us.myles.ViaVersion.util.GsonUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class ChatRewriter {
|
public class ChatRewriter {
|
||||||
|
private static final Pattern URL = Pattern.compile("^(?:(https?)://)?([-\\w_.]{2,}\\.[a-z]{2,4})(/\\S*)?$");
|
||||||
|
private static final BaseComponent[] EMPTY_COMPONENTS = new BaseComponent[0];
|
||||||
|
private static final ComponentRewriter COMPONENT_REWRITER = new ComponentRewriter() {
|
||||||
|
@Override
|
||||||
|
protected void handleTranslate(JsonObject object, String translate) {
|
||||||
|
super.handleTranslate(object, translate);
|
||||||
|
String newTranslate;
|
||||||
|
newTranslate = MappingData.translateMapping.get(translate);
|
||||||
|
if (newTranslate == null) {
|
||||||
|
newTranslate = MappingData.mojangTranslation.get(translate);
|
||||||
|
}
|
||||||
|
if (newTranslate != null) {
|
||||||
|
object.addProperty("translate", newTranslate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Based on https://github.com/SpigotMC/BungeeCord/blob/master/chat/src/main/java/net/md_5/bungee/api/chat/TextComponent.java
|
// Based on https://github.com/SpigotMC/BungeeCord/blob/master/chat/src/main/java/net/md_5/bungee/api/chat/TextComponent.java
|
||||||
|
public static JsonElement fromLegacyText(String message, ChatColor defaultColor) {
|
||||||
private static final Pattern url = Pattern.compile("^(?:(https?)://)?([-\\w_\\.]{2,}\\.[a-z]{2,4})(/\\S*)?$");
|
List<BaseComponent> components = new ArrayList<>();
|
||||||
|
|
||||||
public static BaseComponent[] fromLegacyText(String message, ChatColor defaultColor) {
|
|
||||||
ArrayList<BaseComponent> components = new ArrayList<>();
|
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
TextComponent component = new TextComponent();
|
TextComponent component = new TextComponent();
|
||||||
Matcher matcher = url.matcher(message);
|
Matcher matcher = URL.matcher(message);
|
||||||
|
|
||||||
for (int i = 0; i < message.length(); i++) {
|
for (int i = 0; i < message.length(); i++) {
|
||||||
char c = message.charAt(i);
|
char c = message.charAt(i);
|
||||||
@ -110,56 +128,19 @@ public class ChatRewriter {
|
|||||||
component.setText(builder.toString());
|
component.setText(builder.toString());
|
||||||
components.add(component);
|
components.add(component);
|
||||||
|
|
||||||
return components.toArray(new BaseComponent[0]);
|
final String serializedComponents = ComponentSerializer.toString(components.toArray(EMPTY_COMPONENTS));
|
||||||
|
return GsonUtil.getJsonParser().parse(serializedComponents);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String legacyTextToJson(String legacyText) {
|
public static JsonElement legacyTextToJson(String legacyText) {
|
||||||
return ComponentSerializer.toString(fromLegacyText(legacyText, ChatColor.WHITE));
|
return fromLegacyText(legacyText, ChatColor.WHITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String jsonTextToLegacy(String value) {
|
public static String jsonTextToLegacy(String value) {
|
||||||
return TextComponent.toLegacyText(ComponentSerializer.parse(value));
|
return TextComponent.toLegacyText(ComponentSerializer.parse(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String processTranslate(String value) {
|
public static void processTranslate(JsonElement value) {
|
||||||
BaseComponent[] components = ComponentSerializer.parse(value);
|
COMPONENT_REWRITER.processText(value);
|
||||||
for (BaseComponent component : components) {
|
|
||||||
processTranslate(component);
|
|
||||||
}
|
|
||||||
if (components.length == 1) {
|
|
||||||
return ComponentSerializer.toString(components[0]);
|
|
||||||
} else {
|
|
||||||
return ComponentSerializer.toString(components);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void processTranslate(BaseComponent component) {
|
|
||||||
if (component == null) return;
|
|
||||||
if (component instanceof TranslatableComponent) {
|
|
||||||
String oldTranslate = ((TranslatableComponent) component).getTranslate();
|
|
||||||
String newTranslate;
|
|
||||||
newTranslate = MappingData.translateMapping.get(oldTranslate);
|
|
||||||
if (newTranslate == null) {
|
|
||||||
newTranslate = MappingData.mojangTranslation.get(oldTranslate);
|
|
||||||
}
|
|
||||||
if (newTranslate != null) {
|
|
||||||
((TranslatableComponent) component).setTranslate(newTranslate);
|
|
||||||
}
|
|
||||||
if (((TranslatableComponent) component).getWith() != null) {
|
|
||||||
for (BaseComponent baseComponent : ((TranslatableComponent) component).getWith()) {
|
|
||||||
processTranslate(baseComponent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (component.getHoverEvent() != null) {
|
|
||||||
for (BaseComponent baseComponent : component.getHoverEvent().getValue()) {
|
|
||||||
processTranslate(baseComponent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (component.getExtra() != null) {
|
|
||||||
for (BaseComponent baseComponent : component.getExtra()) {
|
|
||||||
processTranslate(baseComponent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -154,13 +154,7 @@ public class Protocol1_13To1_12_2 extends Protocol<ClientboundPackets1_12_1, Cli
|
|||||||
registerOutgoing(State.LOGIN, 0x0, 0x0, new PacketRemapper() {
|
registerOutgoing(State.LOGIN, 0x0, 0x0, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.STRING);
|
handler(wrapper -> ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT)));
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
wrapper.set(Type.STRING, 0, ChatRewriter.processTranslate(wrapper.get(Type.STRING, 0)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -258,7 +252,7 @@ public class Protocol1_13To1_12_2 extends Protocol<ClientboundPackets1_12_1, Cli
|
|||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
int action = wrapper.get(Type.VAR_INT, 0);
|
int action = wrapper.get(Type.VAR_INT, 0);
|
||||||
if (action == 0 || action == 3) {
|
if (action == 0 || action == 3) {
|
||||||
wrapper.write(Type.STRING, ChatRewriter.processTranslate(wrapper.read(Type.STRING)));
|
ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -267,13 +261,7 @@ public class Protocol1_13To1_12_2 extends Protocol<ClientboundPackets1_12_1, Cli
|
|||||||
registerOutgoing(ClientboundPackets1_12_1.CHAT_MESSAGE, new PacketRemapper() {
|
registerOutgoing(ClientboundPackets1_12_1.CHAT_MESSAGE, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.STRING);
|
handler(wrapper -> ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT)));
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
wrapper.set(Type.STRING, 0, ChatRewriter.processTranslate(wrapper.get(Type.STRING, 0)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
registerOutgoing(ClientboundPackets1_12_1.TAB_COMPLETE, new PacketRemapper() {
|
registerOutgoing(ClientboundPackets1_12_1.TAB_COMPLETE, new PacketRemapper() {
|
||||||
@ -322,8 +310,7 @@ public class Protocol1_13To1_12_2 extends Protocol<ClientboundPackets1_12_1, Cli
|
|||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.UNSIGNED_BYTE); // Id
|
map(Type.UNSIGNED_BYTE); // Id
|
||||||
map(Type.STRING); // Window type
|
map(Type.STRING); // Window type
|
||||||
map(Type.STRING); // Title
|
handler(wrapper -> ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT))); // Title
|
||||||
handler(wrapper -> wrapper.set(Type.STRING, 1, ChatRewriter.processTranslate(wrapper.get(Type.STRING, 1))));
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -369,8 +356,7 @@ public class Protocol1_13To1_12_2 extends Protocol<ClientboundPackets1_12_1, Cli
|
|||||||
registerOutgoing(ClientboundPackets1_12_1.DISCONNECT, new PacketRemapper() {
|
registerOutgoing(ClientboundPackets1_12_1.DISCONNECT, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.STRING);
|
handler(wrapper -> ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT)));
|
||||||
handler(wrapper -> wrapper.set(Type.STRING, 0, ChatRewriter.processTranslate(wrapper.get(Type.STRING, 0))));
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -420,30 +406,6 @@ public class Protocol1_13To1_12_2 extends Protocol<ClientboundPackets1_12_1, Cli
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerOutgoing(ClientboundPackets1_12_1.MAP_DATA, new PacketRemapper() {
|
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Map id
|
|
||||||
map(Type.BYTE); // 1 - Scale
|
|
||||||
map(Type.BOOLEAN); // 2 - Tracking Position
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
int iconCount = wrapper.passthrough(Type.VAR_INT);
|
|
||||||
for (int i = 0; i < iconCount; i++) {
|
|
||||||
byte directionAndType = wrapper.read(Type.BYTE);
|
|
||||||
int type = (directionAndType & 0xF0) >> 4;
|
|
||||||
wrapper.write(Type.VAR_INT, type);
|
|
||||||
wrapper.passthrough(Type.BYTE); // Icon X
|
|
||||||
wrapper.passthrough(Type.BYTE); // Icon Z
|
|
||||||
byte direction = (byte) (directionAndType & 0x0F);
|
|
||||||
wrapper.write(Type.BYTE, direction);
|
|
||||||
wrapper.write(Type.OPTIONAL_CHAT, null); // Display Name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
registerOutgoing(ClientboundPackets1_12_1.CRAFT_RECIPE_RESPONSE, new PacketRemapper() {
|
registerOutgoing(ClientboundPackets1_12_1.CRAFT_RECIPE_RESPONSE, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
@ -462,7 +424,31 @@ public class Protocol1_13To1_12_2 extends Protocol<ClientboundPackets1_12_1, Cli
|
|||||||
if (wrapper.get(Type.VAR_INT, 0) == 2) { // Entity dead
|
if (wrapper.get(Type.VAR_INT, 0) == 2) { // Entity dead
|
||||||
wrapper.passthrough(Type.VAR_INT); // Player id
|
wrapper.passthrough(Type.VAR_INT); // Player id
|
||||||
wrapper.passthrough(Type.INT); // Entity id
|
wrapper.passthrough(Type.INT); // Entity id
|
||||||
wrapper.write(Type.STRING, ChatRewriter.processTranslate(wrapper.read(Type.STRING)));
|
ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
registerOutgoing(ClientboundPackets1_12_1.MAP_DATA, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT); // 0 - Map id
|
||||||
|
map(Type.BYTE); // 1 - Scale
|
||||||
|
map(Type.BOOLEAN); // 2 - Tracking Position
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
int iconCount = wrapper.passthrough(Type.VAR_INT);
|
||||||
|
for (int i = 0; i < iconCount; i++) {
|
||||||
|
byte directionAndType = wrapper.read(Type.BYTE);
|
||||||
|
int type = (directionAndType & 0xF0) >> 4;
|
||||||
|
wrapper.write(Type.VAR_INT, type);
|
||||||
|
wrapper.passthrough(Type.BYTE); // Icon X
|
||||||
|
wrapper.passthrough(Type.BYTE); // Icon Z
|
||||||
|
byte direction = (byte) (directionAndType & 0x0F);
|
||||||
|
wrapper.write(Type.BYTE, direction);
|
||||||
|
wrapper.write(Type.OPTIONAL_COMPONENT, null); // Display Name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -586,8 +572,7 @@ public class Protocol1_13To1_12_2 extends Protocol<ClientboundPackets1_12_1, Cli
|
|||||||
// On create or update
|
// On create or update
|
||||||
if (mode == 0 || mode == 2) {
|
if (mode == 0 || mode == 2) {
|
||||||
String value = wrapper.read(Type.STRING); // Value
|
String value = wrapper.read(Type.STRING); // Value
|
||||||
value = ChatRewriter.legacyTextToJson(value);
|
wrapper.write(Type.COMPONENT, ChatRewriter.legacyTextToJson(value));
|
||||||
wrapper.write(Type.STRING, value);
|
|
||||||
|
|
||||||
String type = wrapper.read(Type.STRING);
|
String type = wrapper.read(Type.STRING);
|
||||||
// integer or hearts
|
// integer or hearts
|
||||||
@ -611,8 +596,7 @@ public class Protocol1_13To1_12_2 extends Protocol<ClientboundPackets1_12_1, Cli
|
|||||||
|
|
||||||
if (action == 0 || action == 2) {
|
if (action == 0 || action == 2) {
|
||||||
String displayName = wrapper.read(Type.STRING); // Display Name
|
String displayName = wrapper.read(Type.STRING); // Display Name
|
||||||
displayName = ChatRewriter.legacyTextToJson(displayName);
|
wrapper.write(Type.COMPONENT, ChatRewriter.legacyTextToJson(displayName));
|
||||||
wrapper.write(Type.STRING, displayName);
|
|
||||||
|
|
||||||
String prefix = wrapper.read(Type.STRING); // Prefix moved
|
String prefix = wrapper.read(Type.STRING); // Prefix moved
|
||||||
String suffix = wrapper.read(Type.STRING); // Suffix moved
|
String suffix = wrapper.read(Type.STRING); // Suffix moved
|
||||||
@ -635,8 +619,8 @@ public class Protocol1_13To1_12_2 extends Protocol<ClientboundPackets1_12_1, Cli
|
|||||||
|
|
||||||
wrapper.write(Type.VAR_INT, colour);
|
wrapper.write(Type.VAR_INT, colour);
|
||||||
|
|
||||||
wrapper.write(Type.STRING, ChatRewriter.legacyTextToJson(prefix)); // Prefix
|
wrapper.write(Type.COMPONENT, ChatRewriter.legacyTextToJson(prefix)); // Prefix
|
||||||
wrapper.write(Type.STRING, ChatRewriter.legacyTextToJson(suffix)); // Suffix
|
wrapper.write(Type.COMPONENT, ChatRewriter.legacyTextToJson(suffix)); // Suffix
|
||||||
}
|
}
|
||||||
|
|
||||||
if (action == 0 || action == 3 || action == 4) {
|
if (action == 0 || action == 3 || action == 4) {
|
||||||
@ -681,7 +665,7 @@ public class Protocol1_13To1_12_2 extends Protocol<ClientboundPackets1_12_1, Cli
|
|||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
int action = wrapper.get(Type.VAR_INT, 0);
|
int action = wrapper.get(Type.VAR_INT, 0);
|
||||||
if (action >= 0 && action <= 2) {
|
if (action >= 0 && action <= 2) {
|
||||||
wrapper.write(Type.STRING, ChatRewriter.processTranslate(wrapper.read(Type.STRING)));
|
ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -694,13 +678,11 @@ public class Protocol1_13To1_12_2 extends Protocol<ClientboundPackets1_12_1, Cli
|
|||||||
registerOutgoing(ClientboundPackets1_12_1.TAB_LIST, new PacketRemapper() {
|
registerOutgoing(ClientboundPackets1_12_1.TAB_LIST, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.STRING);
|
|
||||||
map(Type.STRING);
|
|
||||||
handler(new PacketHandler() {
|
handler(new PacketHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
wrapper.set(Type.STRING, 0, ChatRewriter.processTranslate(wrapper.get(Type.STRING, 0)));
|
ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT));
|
||||||
wrapper.set(Type.STRING, 1, ChatRewriter.processTranslate(wrapper.get(Type.STRING, 1)));
|
ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -724,15 +706,16 @@ public class Protocol1_13To1_12_2 extends Protocol<ClientboundPackets1_12_1, Cli
|
|||||||
|
|
||||||
// Display data
|
// Display data
|
||||||
if (wrapper.passthrough(Type.BOOLEAN)) {
|
if (wrapper.passthrough(Type.BOOLEAN)) {
|
||||||
wrapper.write(Type.STRING, ChatRewriter.processTranslate(wrapper.read(Type.STRING))); // Title
|
ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT)); // Title
|
||||||
wrapper.write(Type.STRING, ChatRewriter.processTranslate(wrapper.read(Type.STRING))); // Description
|
ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT)); // Description
|
||||||
Item icon = wrapper.read(Type.ITEM);
|
Item icon = wrapper.read(Type.ITEM);
|
||||||
InventoryPackets.toClient(icon);
|
InventoryPackets.toClient(icon);
|
||||||
wrapper.write(Type.FLAT_ITEM, icon); // Translate item to flat item
|
wrapper.write(Type.FLAT_ITEM, icon); // Translate item to flat item
|
||||||
wrapper.passthrough(Type.VAR_INT); // Frame type
|
wrapper.passthrough(Type.VAR_INT); // Frame type
|
||||||
int flags = wrapper.passthrough(Type.INT); // Flags
|
int flags = wrapper.passthrough(Type.INT); // Flags
|
||||||
if ((flags & 1) != 0)
|
if ((flags & 1) != 0) {
|
||||||
wrapper.passthrough(Type.STRING); // Background texture
|
wrapper.passthrough(Type.STRING); // Background texture
|
||||||
|
}
|
||||||
wrapper.passthrough(Type.FLOAT); // X
|
wrapper.passthrough(Type.FLOAT); // X
|
||||||
wrapper.passthrough(Type.FLOAT); // Y
|
wrapper.passthrough(Type.FLOAT); // Y
|
||||||
}
|
}
|
||||||
@ -902,12 +885,7 @@ public class Protocol1_13To1_12_2 extends Protocol<ClientboundPackets1_12_1, Cli
|
|||||||
registerIncoming(ServerboundPackets1_13.UPDATE_COMMAND_BLOCK, ServerboundPackets1_12_1.PLUGIN_MESSAGE, new PacketRemapper() {
|
registerIncoming(ServerboundPackets1_13.UPDATE_COMMAND_BLOCK, ServerboundPackets1_12_1.PLUGIN_MESSAGE, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
create(new ValueCreator() {
|
create(wrapper -> wrapper.write(Type.STRING, "MC|AutoCmd"));
|
||||||
@Override
|
|
||||||
public void write(PacketWrapper wrapper) throws Exception {
|
|
||||||
wrapper.write(Type.STRING, "MC|AutoCmd");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
handler(POS_TO_3_INT);
|
handler(POS_TO_3_INT);
|
||||||
map(Type.STRING); // Command
|
map(Type.STRING); // Command
|
||||||
handler(new PacketHandler() {
|
handler(new PacketHandler() {
|
||||||
|
@ -29,7 +29,7 @@ import java.util.Map;
|
|||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
public class ConnectionData {
|
public class ConnectionData {
|
||||||
private static final BlockChangeRecord[] A = new BlockChangeRecord[0];
|
private static final BlockChangeRecord[] EMPTY_RECORDS = new BlockChangeRecord[0];
|
||||||
public static BlockConnectionProvider blockConnectionProvider;
|
public static BlockConnectionProvider blockConnectionProvider;
|
||||||
static Int2ObjectMap<String> idToKey = new Int2ObjectOpenHashMap<>(8582, 1F);
|
static Int2ObjectMap<String> idToKey = new Int2ObjectOpenHashMap<>(8582, 1F);
|
||||||
static Map<String, Integer> keyToId = new HashMap<>(8582, 1F);
|
static Map<String, Integer> keyToId = new HashMap<>(8582, 1F);
|
||||||
@ -121,7 +121,7 @@ public class ConnectionData {
|
|||||||
PacketWrapper wrapper = new PacketWrapper(0x0F, null, user);
|
PacketWrapper wrapper = new PacketWrapper(0x0F, null, user);
|
||||||
wrapper.write(Type.INT, chunkX + chunkDeltaX);
|
wrapper.write(Type.INT, chunkX + chunkDeltaX);
|
||||||
wrapper.write(Type.INT, chunkZ + chunkDeltaZ);
|
wrapper.write(Type.INT, chunkZ + chunkDeltaZ);
|
||||||
wrapper.write(Type.BLOCK_CHANGE_RECORD_ARRAY, updates.toArray(A));
|
wrapper.write(Type.BLOCK_CHANGE_RECORD_ARRAY, updates.toArray(EMPTY_RECORDS));
|
||||||
try {
|
try {
|
||||||
wrapper.send(Protocol1_13To1_12_2.class, true, true);
|
wrapper.send(Protocol1_13To1_12_2.class, true, true);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -304,11 +304,7 @@ public class InventoryPackets {
|
|||||||
if (display.get("Name") instanceof StringTag) {
|
if (display.get("Name") instanceof StringTag) {
|
||||||
StringTag name = display.get("Name");
|
StringTag name = display.get("Name");
|
||||||
display.put(new StringTag(NBT_TAG_NAME + "|Name", name.getValue()));
|
display.put(new StringTag(NBT_TAG_NAME + "|Name", name.getValue()));
|
||||||
name.setValue(
|
name.setValue(ChatRewriter.legacyTextToJson(name.getValue()).toString());
|
||||||
ChatRewriter.legacyTextToJson(
|
|
||||||
name.getValue()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ench is now Enchantments and now uses identifiers
|
// ench is now Enchantments and now uses identifiers
|
||||||
|
@ -55,7 +55,7 @@ public class BannerHandler implements BlockEntityProvider.BlockEntityHandler {
|
|||||||
|
|
||||||
Tag name = tag.get("CustomName");
|
Tag name = tag.get("CustomName");
|
||||||
if (name instanceof StringTag) {
|
if (name instanceof StringTag) {
|
||||||
((StringTag) name).setValue(ChatRewriter.legacyTextToJson(((StringTag) name).getValue()));
|
((StringTag) name).setValue(ChatRewriter.legacyTextToJson(((StringTag) name).getValue()).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
return blockId;
|
return blockId;
|
||||||
|
@ -3,20 +3,24 @@ package us.myles.ViaVersion.protocols.protocol1_13to1_12_2.providers.blockentiti
|
|||||||
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
||||||
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
||||||
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.providers.BlockEntityProvider;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.providers.BlockEntityProvider;
|
||||||
|
import us.myles.ViaVersion.util.GsonUtil;
|
||||||
|
|
||||||
public class CommandBlockHandler implements BlockEntityProvider.BlockEntityHandler {
|
public class CommandBlockHandler implements BlockEntityProvider.BlockEntityHandler {
|
||||||
@Override
|
@Override
|
||||||
public int transform(UserConnection user, CompoundTag tag) {
|
public int transform(UserConnection user, CompoundTag tag) {
|
||||||
Tag name = tag.get("CustomName");
|
Tag name = tag.get("CustomName");
|
||||||
if (name instanceof StringTag) {
|
if (name instanceof StringTag) {
|
||||||
((StringTag) name).setValue(ChatRewriter.legacyTextToJson(((StringTag) name).getValue()));
|
((StringTag) name).setValue(ChatRewriter.legacyTextToJson(((StringTag) name).getValue()).toString());
|
||||||
}
|
}
|
||||||
Tag out = tag.get("LastOutput");
|
Tag out = tag.get("LastOutput");
|
||||||
if (out instanceof StringTag) {
|
if (out instanceof StringTag) {
|
||||||
((StringTag) out).setValue(ChatRewriter.processTranslate(((StringTag) out).getValue()));
|
JsonElement value = GsonUtil.getJsonParser().parse(((StringTag) out).getValue());
|
||||||
|
ChatRewriter.processTranslate(value);
|
||||||
|
((StringTag) out).setValue(value.toString());
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -1,46 +0,0 @@
|
|||||||
package us.myles.ViaVersion.protocols.protocol1_14to1_13_2;
|
|
||||||
|
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
|
||||||
import net.md_5.bungee.api.chat.TranslatableComponent;
|
|
||||||
import net.md_5.bungee.chat.ComponentSerializer;
|
|
||||||
|
|
||||||
public class InventoryNameRewriter {
|
|
||||||
public static String processTranslate(String value) {
|
|
||||||
BaseComponent[] components = ComponentSerializer.parse(value);
|
|
||||||
for (BaseComponent component : components) {
|
|
||||||
processTranslate(component);
|
|
||||||
}
|
|
||||||
if (components.length == 1) {
|
|
||||||
return ComponentSerializer.toString(components[0]);
|
|
||||||
} else {
|
|
||||||
return ComponentSerializer.toString(components);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void processTranslate(BaseComponent component) {
|
|
||||||
if (component == null) return;
|
|
||||||
if (component instanceof TranslatableComponent) {
|
|
||||||
String oldTranslate = ((TranslatableComponent) component).getTranslate();
|
|
||||||
|
|
||||||
// Mojang decided to remove .name from inventory titles
|
|
||||||
if (oldTranslate.startsWith("block.") && oldTranslate.endsWith(".name")) {
|
|
||||||
((TranslatableComponent) component).setTranslate(oldTranslate.substring(0, oldTranslate.length() - 5));
|
|
||||||
}
|
|
||||||
if (((TranslatableComponent) component).getWith() != null) {
|
|
||||||
for (BaseComponent baseComponent : ((TranslatableComponent) component).getWith()) {
|
|
||||||
processTranslate(baseComponent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (component.getHoverEvent() != null) {
|
|
||||||
for (BaseComponent baseComponent : component.getHoverEvent().getValue()) {
|
|
||||||
processTranslate(baseComponent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (component.getExtra() != null) {
|
|
||||||
for (BaseComponent baseComponent : component.getExtra()) {
|
|
||||||
processTranslate(baseComponent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -7,17 +7,19 @@ import com.github.steveice10.opennbt.tag.builtin.ListTag;
|
|||||||
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
||||||
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
import us.myles.ViaVersion.api.PacketWrapper;
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.Via;
|
import us.myles.ViaVersion.api.Via;
|
||||||
import us.myles.ViaVersion.api.minecraft.item.Item;
|
import us.myles.ViaVersion.api.minecraft.item.Item;
|
||||||
import us.myles.ViaVersion.api.protocol.Protocol;
|
import us.myles.ViaVersion.api.protocol.Protocol;
|
||||||
import us.myles.ViaVersion.api.remapper.PacketHandler;
|
import us.myles.ViaVersion.api.remapper.PacketHandler;
|
||||||
import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
||||||
|
import us.myles.ViaVersion.api.rewriters.ComponentRewriter;
|
||||||
import us.myles.ViaVersion.api.rewriters.ItemRewriter;
|
import us.myles.ViaVersion.api.rewriters.ItemRewriter;
|
||||||
import us.myles.ViaVersion.api.type.Type;
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.InventoryNameRewriter;
|
|
||||||
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.Protocol1_14To1_13_2;
|
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.Protocol1_14To1_13_2;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14;
|
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.data.MappingData;
|
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.data.MappingData;
|
||||||
@ -29,6 +31,16 @@ import java.util.concurrent.ThreadLocalRandom;
|
|||||||
public class InventoryPackets {
|
public class InventoryPackets {
|
||||||
private static final String NBT_TAG_NAME = "ViaVersion|" + Protocol1_14To1_13_2.class.getSimpleName();
|
private static final String NBT_TAG_NAME = "ViaVersion|" + Protocol1_14To1_13_2.class.getSimpleName();
|
||||||
private static final Set<String> REMOVED_RECIPE_TYPES = Sets.newHashSet("crafting_special_banneraddpattern", "crafting_special_repairitem");
|
private static final Set<String> REMOVED_RECIPE_TYPES = Sets.newHashSet("crafting_special_banneraddpattern", "crafting_special_repairitem");
|
||||||
|
private static final ComponentRewriter COMPONENT_REWRITER = new ComponentRewriter() {
|
||||||
|
@Override
|
||||||
|
protected void handleTranslate(JsonObject object, String translate) {
|
||||||
|
super.handleTranslate(object, translate);
|
||||||
|
// Mojang decided to remove .name from inventory titles
|
||||||
|
if (translate.startsWith("block.") && translate.endsWith(".name")) {
|
||||||
|
object.addProperty("translate", translate.substring(0, translate.length() - 5));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
public static void register(Protocol protocol) {
|
public static void register(Protocol protocol) {
|
||||||
ItemRewriter itemRewriter = new ItemRewriter(protocol, InventoryPackets::toClient, InventoryPackets::toServer);
|
ItemRewriter itemRewriter = new ItemRewriter(protocol, InventoryPackets::toClient, InventoryPackets::toServer);
|
||||||
@ -43,10 +55,10 @@ public class InventoryPackets {
|
|||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
Short windowsId = wrapper.read(Type.UNSIGNED_BYTE);
|
Short windowsId = wrapper.read(Type.UNSIGNED_BYTE);
|
||||||
String type = wrapper.read(Type.STRING);
|
String type = wrapper.read(Type.STRING);
|
||||||
String title = InventoryNameRewriter.processTranslate(wrapper.read(Type.STRING));
|
JsonElement title = wrapper.read(Type.COMPONENT);
|
||||||
|
COMPONENT_REWRITER.processText(title);
|
||||||
Short slots = wrapper.read(Type.UNSIGNED_BYTE);
|
Short slots = wrapper.read(Type.UNSIGNED_BYTE);
|
||||||
|
|
||||||
|
|
||||||
if (type.equals("EntityHorse")) {
|
if (type.equals("EntityHorse")) {
|
||||||
wrapper.setId(0x1F);
|
wrapper.setId(0x1F);
|
||||||
int entityId = wrapper.read(Type.INT);
|
int entityId = wrapper.read(Type.INT);
|
||||||
@ -101,7 +113,7 @@ public class InventoryPackets {
|
|||||||
}
|
}
|
||||||
|
|
||||||
wrapper.write(Type.VAR_INT, typeId);
|
wrapper.write(Type.VAR_INT, typeId);
|
||||||
wrapper.write(Type.COMPONENT_STRING, title);
|
wrapper.write(Type.COMPONENT, title);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -258,11 +270,7 @@ public class InventoryPackets {
|
|||||||
display.put(ConverterRegistry.convertToTag(NBT_TAG_NAME + "|Lore", ConverterRegistry.convertToValue(lore)));
|
display.put(ConverterRegistry.convertToTag(NBT_TAG_NAME + "|Lore", ConverterRegistry.convertToValue(lore)));
|
||||||
for (Tag loreEntry : lore) {
|
for (Tag loreEntry : lore) {
|
||||||
if (loreEntry instanceof StringTag) {
|
if (loreEntry instanceof StringTag) {
|
||||||
((StringTag) loreEntry).setValue(
|
((StringTag) loreEntry).setValue(ChatRewriter.legacyTextToJson(((StringTag) loreEntry).getValue()).toString());
|
||||||
ChatRewriter.legacyTextToJson(
|
|
||||||
((StringTag) loreEntry).getValue()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ import java.util.Arrays;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class Chunk1_15Type extends PartialType<Chunk, ClientWorld> {
|
public class Chunk1_15Type extends PartialType<Chunk, ClientWorld> {
|
||||||
private static final CompoundTag[] A = new CompoundTag[0];
|
private static final CompoundTag[] EMPTY_COMPOUNDS = new CompoundTag[0];
|
||||||
|
|
||||||
public Chunk1_15Type(ClientWorld param) {
|
public Chunk1_15Type(ClientWorld param) {
|
||||||
super(param, Chunk.class);
|
super(param, Chunk.class);
|
||||||
@ -98,7 +98,7 @@ public class Chunk1_15Type extends PartialType<Chunk, ClientWorld> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Write Block Entities
|
// Write Block Entities
|
||||||
Type.NBT_ARRAY.write(output, chunk.getBlockEntities().toArray(A));
|
Type.NBT_ARRAY.write(output, chunk.getBlockEntities().toArray(EMPTY_COMPOUNDS));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -100,7 +100,7 @@ public class Protocol1_16To1_15_2 extends Protocol<ClientboundPackets1_15, Clien
|
|||||||
registerOutgoing(ClientboundPackets1_15.CHAT_MESSAGE, new PacketRemapper() {
|
registerOutgoing(ClientboundPackets1_15.CHAT_MESSAGE, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.COMPONENT_STRING);
|
map(Type.COMPONENT);
|
||||||
map(Type.BYTE);
|
map(Type.BYTE);
|
||||||
handler(wrapper -> wrapper.write(Type.UUID, ZERO_UUID)); // sender uuid
|
handler(wrapper -> wrapper.write(Type.UUID, ZERO_UUID)); // sender uuid
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ public class InventoryPackets {
|
|||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.COMPONENT_STRING);
|
map(Type.COMPONENT);
|
||||||
|
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
int windowType = wrapper.get(Type.VAR_INT, 1);
|
int windowType = wrapper.get(Type.VAR_INT, 1);
|
||||||
|
@ -17,7 +17,7 @@ import java.util.Arrays;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class Chunk1_16Type extends PartialType<Chunk, ClientWorld> {
|
public class Chunk1_16Type extends PartialType<Chunk, ClientWorld> {
|
||||||
private static final CompoundTag[] A = new CompoundTag[0];
|
private static final CompoundTag[] EMPTY_COMPOUNDS = new CompoundTag[0];
|
||||||
|
|
||||||
public Chunk1_16Type(ClientWorld param) {
|
public Chunk1_16Type(ClientWorld param) {
|
||||||
super(param, Chunk.class);
|
super(param, Chunk.class);
|
||||||
@ -100,7 +100,7 @@ public class Chunk1_16Type extends PartialType<Chunk, ClientWorld> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Write Block Entities
|
// Write Block Entities
|
||||||
Type.NBT_ARRAY.write(output, chunk.getBlockEntities().toArray(A));
|
Type.NBT_ARRAY.write(output, chunk.getBlockEntities().toArray(EMPTY_COMPOUNDS));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,6 +3,7 @@ package us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2;
|
|||||||
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
||||||
import com.github.steveice10.opennbt.tag.builtin.IntTag;
|
import com.github.steveice10.opennbt.tag.builtin.IntTag;
|
||||||
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
import us.myles.ViaVersion.api.PacketWrapper;
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.minecraft.Position;
|
import us.myles.ViaVersion.api.minecraft.Position;
|
||||||
@ -37,9 +38,10 @@ public class Protocol1_9_3To1_9_1_2 extends Protocol<ClientboundPackets1_9, Clie
|
|||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
//read data
|
//read data
|
||||||
Position position = wrapper.read(Type.POSITION);
|
Position position = wrapper.read(Type.POSITION);
|
||||||
String[] lines = new String[4];
|
JsonElement[] lines = new JsonElement[4];
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++) {
|
||||||
lines[i] = wrapper.read(Type.STRING);
|
lines[i] = wrapper.read(Type.COMPONENT);
|
||||||
|
}
|
||||||
|
|
||||||
wrapper.clearInputBuffer();
|
wrapper.clearInputBuffer();
|
||||||
|
|
||||||
@ -54,8 +56,9 @@ public class Protocol1_9_3To1_9_1_2 extends Protocol<ClientboundPackets1_9, Clie
|
|||||||
tag.put(new IntTag("x", position.getX()));
|
tag.put(new IntTag("x", position.getX()));
|
||||||
tag.put(new IntTag("y", position.getY()));
|
tag.put(new IntTag("y", position.getY()));
|
||||||
tag.put(new IntTag("z", position.getZ()));
|
tag.put(new IntTag("z", position.getZ()));
|
||||||
for (int i = 0; i < lines.length; i++)
|
for (int i = 0; i < lines.length; i++) {
|
||||||
tag.put(new StringTag("Text" + (i + 1), lines[i]));
|
tag.put(new StringTag("Text" + (i + 1), lines[i].toString()));
|
||||||
|
}
|
||||||
|
|
||||||
wrapper.write(Type.NBT, tag);
|
wrapper.write(Type.NBT, tag);
|
||||||
}
|
}
|
||||||
|
@ -263,7 +263,7 @@ public class ItemRewriter {
|
|||||||
}
|
}
|
||||||
ListTag pages = tag.get("pages");
|
ListTag pages = tag.get("pages");
|
||||||
if (pages == null) {
|
if (pages == null) {
|
||||||
pages = new ListTag("pages", Collections.<Tag>singletonList(new StringTag(Protocol1_9To1_8.fixJson(""))));
|
pages = new ListTag("pages", Collections.<Tag>singletonList(new StringTag(Protocol1_9To1_8.fixJson("").toString())));
|
||||||
tag.put(pages);
|
tag.put(pages);
|
||||||
item.setTag(tag);
|
item.setTag(tag);
|
||||||
return;
|
return;
|
||||||
@ -273,7 +273,7 @@ public class ItemRewriter {
|
|||||||
if (!(pages.get(i) instanceof StringTag))
|
if (!(pages.get(i) instanceof StringTag))
|
||||||
continue;
|
continue;
|
||||||
StringTag page = pages.get(i);
|
StringTag page = pages.get(i);
|
||||||
page.setValue(Protocol1_9To1_8.fixJson(page.getValue()));
|
page.setValue(Protocol1_9To1_8.fixJson(page.getValue()).toString());
|
||||||
}
|
}
|
||||||
item.setTag(tag);
|
item.setTag(tag);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package us.myles.ViaVersion.protocols.protocol1_9to1_8;
|
package us.myles.ViaVersion.protocols.protocol1_9to1_8;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import us.myles.ViaVersion.api.PacketWrapper;
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.Via;
|
import us.myles.ViaVersion.api.Via;
|
||||||
@ -14,17 +15,32 @@ import us.myles.ViaVersion.packets.State;
|
|||||||
import us.myles.ViaVersion.protocols.protocol1_8.ClientboundPackets1_8;
|
import us.myles.ViaVersion.protocols.protocol1_8.ClientboundPackets1_8;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_8.ServerboundPackets1_8;
|
import us.myles.ViaVersion.protocols.protocol1_8.ServerboundPackets1_8;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata.MetadataRewriter1_9To1_8;
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata.MetadataRewriter1_9To1_8;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9to1_8.packets.*;
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.packets.EntityPackets;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.*;
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.packets.InventoryPackets;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9to1_8.storage.*;
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.packets.PlayerPackets;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.packets.SpawnPackets;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.packets.WorldPackets;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.BossBarProvider;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.BulkChunkTranslatorProvider;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.CommandBlockProvider;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.EntityIdProvider;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.HandItemProvider;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.MainHandProvider;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.MovementTransmitterProvider;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.storage.ClientChunks;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.storage.CommandBlockStorage;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.storage.EntityTracker1_9;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.storage.InventoryTracker;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.storage.MovementTracker;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.storage.PlaceBlockTracker;
|
||||||
import us.myles.ViaVersion.util.GsonUtil;
|
import us.myles.ViaVersion.util.GsonUtil;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class Protocol1_9To1_8 extends Protocol<ClientboundPackets1_8, ClientboundPackets1_9, ServerboundPackets1_8, ServerboundPackets1_9> {
|
public class Protocol1_9To1_8 extends Protocol<ClientboundPackets1_8, ClientboundPackets1_9, ServerboundPackets1_8, ServerboundPackets1_9> {
|
||||||
public static final ValueTransformer<String, String> FIX_JSON = new ValueTransformer<String, String>(Type.STRING) {
|
public static final ValueTransformer<String, JsonElement> FIX_JSON = new ValueTransformer<String, JsonElement>(Type.COMPONENT) {
|
||||||
@Override
|
@Override
|
||||||
public String transform(PacketWrapper wrapper, String line) {
|
public JsonElement transform(PacketWrapper wrapper, String line) {
|
||||||
return fixJson(line);
|
return fixJson(line);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -33,7 +49,7 @@ public class Protocol1_9To1_8 extends Protocol<ClientboundPackets1_8, Clientboun
|
|||||||
super(ClientboundPackets1_8.class, ClientboundPackets1_9.class, ServerboundPackets1_8.class, ServerboundPackets1_9.class);
|
super(ClientboundPackets1_8.class, ClientboundPackets1_9.class, ServerboundPackets1_8.class, ServerboundPackets1_9.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String fixJson(String line) {
|
public static JsonElement fixJson(String line) {
|
||||||
if (line == null || line.equalsIgnoreCase("null")) {
|
if (line == null || line.equalsIgnoreCase("null")) {
|
||||||
line = "{\"text\":\"\"}";
|
line = "{\"text\":\"\"}";
|
||||||
} else {
|
} else {
|
||||||
@ -45,22 +61,21 @@ public class Protocol1_9To1_8 extends Protocol<ClientboundPackets1_8, Clientboun
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
GsonUtil.getGson().fromJson(line, JsonObject.class);
|
return GsonUtil.getGson().fromJson(line, JsonObject.class);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
if (Via.getConfig().isForceJsonTransform()) {
|
if (Via.getConfig().isForceJsonTransform()) {
|
||||||
return constructJson(line);
|
return constructJson(line);
|
||||||
} else {
|
} else {
|
||||||
Via.getPlatform().getLogger().warning("Invalid JSON String: \"" + line + "\" Please report this issue to the ViaVersion Github: " + e.getMessage());
|
Via.getPlatform().getLogger().warning("Invalid JSON String: \"" + line + "\" Please report this issue to the ViaVersion Github: " + e.getMessage());
|
||||||
return "{\"text\":\"\"}";
|
return GsonUtil.getGson().fromJson("{\"text\":\"\"}", JsonObject.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return line;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String constructJson(String text) {
|
private static JsonElement constructJson(String text) {
|
||||||
JsonObject jsonObject = new JsonObject();
|
JsonObject jsonObject = new JsonObject();
|
||||||
jsonObject.addProperty("text", text);
|
jsonObject.addProperty("text", text);
|
||||||
return GsonUtil.getGson().toJson(jsonObject);
|
return jsonObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Item getHandItem(final UserConnection info) {
|
public static Item getHandItem(final UserConnection info) {
|
||||||
|
@ -35,9 +35,8 @@ public class PlayerPackets {
|
|||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
try {
|
try {
|
||||||
JsonObject obj = (JsonObject) GsonUtil.getJsonParser().parse(wrapper.get(Type.STRING, 0));
|
JsonObject obj = (JsonObject) wrapper.get(Type.COMPONENT, 0);
|
||||||
ChatRewriter.toClient(obj, wrapper.user());
|
ChatRewriter.toClient(obj, wrapper.user());
|
||||||
wrapper.set(Type.STRING, 0, obj.toString());
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren