Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-10-08 11:10:06 +02:00
Fix possible NPE in 1.13 component rewriting
Dieser Commit ist enthalten in:
Ursprung
d159047dc0
Commit
1afa441571
@ -25,12 +25,9 @@ import com.viaversion.viaversion.libs.kyori.adventure.text.format.TextDecoration
|
|||||||
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||||
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.gson.legacyimpl.NBTLegacyHoverEventSerializer;
|
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.gson.legacyimpl.NBTLegacyHoverEventSerializer;
|
||||||
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.ComponentRewriter1_13;
|
|
||||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
|
||||||
|
|
||||||
public final class ChatRewriter {
|
public final class ChatRewriter {
|
||||||
public static final GsonComponentSerializer HOVER_GSON_SERIALIZER = GsonComponentSerializer.builder().emitLegacyHoverEvent().legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get()).build();
|
public static final GsonComponentSerializer HOVER_GSON_SERIALIZER = GsonComponentSerializer.builder().emitLegacyHoverEvent().legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get()).build();
|
||||||
private static final ComponentRewriter COMPONENT_REWRITER = new ComponentRewriter1_13();
|
|
||||||
|
|
||||||
public static String legacyTextToJsonString(String message, boolean itemData) {
|
public static String legacyTextToJsonString(String message, boolean itemData) {
|
||||||
Component component = Component.text(builder -> {
|
Component component = Component.text(builder -> {
|
||||||
@ -63,7 +60,8 @@ public final class ChatRewriter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated/*(forRemoval = true)*/
|
||||||
public static void processTranslate(JsonElement value) {
|
public static void processTranslate(JsonElement value) {
|
||||||
COMPONENT_REWRITER.processText(value);
|
Via.getManager().getProtocolManager().getProtocol(Protocol1_13To1_12_2.class).getComponentRewriter().processText(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.blockconnections
|
|||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.blockconnections.providers.BlockConnectionProvider;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.blockconnections.providers.BlockConnectionProvider;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.blockconnections.providers.PacketBlockConnectionProvider;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.blockconnections.providers.PacketBlockConnectionProvider;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.BlockIdData;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.BlockIdData;
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.ComponentRewriter1_13;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.MappingData;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.MappingData;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.RecipeData;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.RecipeData;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.StatisticData;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.StatisticData;
|
||||||
@ -60,6 +61,7 @@ import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.storage.BlockCon
|
|||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.storage.BlockStorage;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.storage.BlockStorage;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.storage.TabCompleteTracker;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.storage.TabCompleteTracker;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
|
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||||
import com.viaversion.viaversion.rewriter.SoundRewriter;
|
import com.viaversion.viaversion.rewriter.SoundRewriter;
|
||||||
import com.viaversion.viaversion.util.ChatColorUtil;
|
import com.viaversion.viaversion.util.ChatColorUtil;
|
||||||
import com.viaversion.viaversion.util.GsonUtil;
|
import com.viaversion.viaversion.util.GsonUtil;
|
||||||
@ -78,6 +80,7 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol<ClientboundPackets1_1
|
|||||||
private static final Set<Character> FORMATTING_CODES = Sets.newHashSet('k', 'l', 'm', 'n', 'o', 'r');
|
private static final Set<Character> FORMATTING_CODES = Sets.newHashSet('k', 'l', 'm', 'n', 'o', 'r');
|
||||||
private final EntityRewriter entityRewriter = new MetadataRewriter1_13To1_12_2(this);
|
private final EntityRewriter entityRewriter = new MetadataRewriter1_13To1_12_2(this);
|
||||||
private final ItemRewriter itemRewriter = new InventoryPackets(this);
|
private final ItemRewriter itemRewriter = new InventoryPackets(this);
|
||||||
|
private final ComponentRewriter componentRewriter = new ComponentRewriter1_13(this);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
SCOREBOARD_TEAM_NAME_REWRITE.put('0', 'g');
|
SCOREBOARD_TEAM_NAME_REWRITE.put('0', 'g');
|
||||||
@ -170,7 +173,7 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol<ClientboundPackets1_1
|
|||||||
registerClientbound(State.LOGIN, 0x0, 0x0, new PacketRemapper() {
|
registerClientbound(State.LOGIN, 0x0, 0x0, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
handler(wrapper -> ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT)));
|
handler(wrapper -> componentRewriter.processText(wrapper.passthrough(Type.COMPONENT)));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -267,28 +270,10 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol<ClientboundPackets1_1
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_12_1.BOSSBAR, new PacketRemapper() {
|
|
||||||
@Override
|
componentRewriter.registerBossBar(ClientboundPackets1_12_1.BOSSBAR);
|
||||||
public void registerMap() {
|
componentRewriter.registerComponentPacket(ClientboundPackets1_12_1.CHAT_MESSAGE);
|
||||||
map(Type.UUID);
|
|
||||||
map(Type.VAR_INT);
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
int action = wrapper.get(Type.VAR_INT, 0);
|
|
||||||
if (action == 0 || action == 3) {
|
|
||||||
ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
registerClientbound(ClientboundPackets1_12_1.CHAT_MESSAGE, new PacketRemapper() {
|
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
registerClientbound(ClientboundPackets1_12_1.TAB_COMPLETE, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_12_1.TAB_COMPLETE, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
@ -335,7 +320,7 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol<ClientboundPackets1_1
|
|||||||
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
|
||||||
handler(wrapper -> ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT))); // Title
|
handler(wrapper -> componentRewriter.processText(wrapper.passthrough(Type.COMPONENT))); // Title
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -378,12 +363,7 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol<ClientboundPackets1_1
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_12_1.DISCONNECT, new PacketRemapper() {
|
componentRewriter.registerComponentPacket(ClientboundPackets1_12_1.DISCONNECT);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_12_1.EFFECT, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_12_1.EFFECT, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
@ -439,22 +419,9 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol<ClientboundPackets1_1
|
|||||||
handler(wrapper -> wrapper.write(Type.STRING, "viaversion:legacy/" + wrapper.read(Type.VAR_INT)));
|
handler(wrapper -> wrapper.write(Type.STRING, "viaversion:legacy/" + wrapper.read(Type.VAR_INT)));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
registerClientbound(ClientboundPackets1_12_1.COMBAT_EVENT, new PacketRemapper() {
|
|
||||||
@Override
|
componentRewriter.registerCombatEvent(ClientboundPackets1_12_1.COMBAT_EVENT);
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // Event
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
if (wrapper.get(Type.VAR_INT, 0) == 2) { // Entity dead
|
|
||||||
wrapper.passthrough(Type.VAR_INT); // Player id
|
|
||||||
wrapper.passthrough(Type.INT); // Entity id
|
|
||||||
ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
registerClientbound(ClientboundPackets1_12_1.MAP_DATA, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_12_1.MAP_DATA, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
@ -682,21 +649,8 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol<ClientboundPackets1_1
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_12_1.TITLE, new PacketRemapper() {
|
componentRewriter.registerTitle(ClientboundPackets1_12_1.TITLE);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // Action
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
int action = wrapper.get(Type.VAR_INT, 0);
|
|
||||||
if (action >= 0 && action <= 2) {
|
|
||||||
ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// New 0x4C - Stop Sound
|
// New 0x4C - Stop Sound
|
||||||
|
|
||||||
new SoundRewriter(this).registerSound(ClientboundPackets1_12_1.SOUND);
|
new SoundRewriter(this).registerSound(ClientboundPackets1_12_1.SOUND);
|
||||||
@ -707,8 +661,8 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol<ClientboundPackets1_1
|
|||||||
handler(new PacketHandler() {
|
handler(new PacketHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT));
|
componentRewriter.processText(wrapper.passthrough(Type.COMPONENT));
|
||||||
ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT));
|
componentRewriter.processText(wrapper.passthrough(Type.COMPONENT));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -732,8 +686,8 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol<ClientboundPackets1_1
|
|||||||
|
|
||||||
// Display data
|
// Display data
|
||||||
if (wrapper.passthrough(Type.BOOLEAN)) {
|
if (wrapper.passthrough(Type.BOOLEAN)) {
|
||||||
ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT)); // Title
|
componentRewriter.processText(wrapper.passthrough(Type.COMPONENT)); // Title
|
||||||
ChatRewriter.processTranslate(wrapper.passthrough(Type.COMPONENT)); // Description
|
componentRewriter.processText(wrapper.passthrough(Type.COMPONENT)); // Description
|
||||||
Item icon = wrapper.read(Type.ITEM);
|
Item icon = wrapper.read(Type.ITEM);
|
||||||
itemRewriter.handleItemToClient(icon);
|
itemRewriter.handleItemToClient(icon);
|
||||||
wrapper.write(Type.FLAT_ITEM, icon); // Translate item to flat item
|
wrapper.write(Type.FLAT_ITEM, icon); // Translate item to flat item
|
||||||
@ -1123,4 +1077,8 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol<ClientboundPackets1_1
|
|||||||
public ItemRewriter getItemRewriter() {
|
public ItemRewriter getItemRewriter() {
|
||||||
return itemRewriter;
|
return itemRewriter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ComponentRewriter getComponentRewriter() {
|
||||||
|
return componentRewriter;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,10 +39,6 @@ public class ComponentRewriter1_13 extends ComponentRewriter {
|
|||||||
super(protocol);
|
super(protocol);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ComponentRewriter1_13() {
|
|
||||||
super(Via.getManager().getProtocolManager().getProtocol(Protocol1_13To1_12_2.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleHoverEvent(JsonObject hoverEvent) {
|
protected void handleHoverEvent(JsonObject hoverEvent) {
|
||||||
super.handleHoverEvent(hoverEvent);
|
super.handleHoverEvent(hoverEvent);
|
||||||
|
@ -22,11 +22,16 @@ 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 com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
|
import com.viaversion.viaversion.api.Via;
|
||||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.Protocol1_13To1_12_2;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.providers.BlockEntityProvider;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.providers.BlockEntityProvider;
|
||||||
|
|
||||||
public class CommandBlockHandler implements BlockEntityProvider.BlockEntityHandler {
|
public class CommandBlockHandler implements BlockEntityProvider.BlockEntityHandler {
|
||||||
|
|
||||||
|
private final Protocol1_13To1_12_2 protocol = Via.getManager().getProtocolManager().getProtocol(Protocol1_13To1_12_2.class);
|
||||||
|
|
||||||
@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");
|
||||||
@ -36,7 +41,7 @@ public class CommandBlockHandler implements BlockEntityProvider.BlockEntityHandl
|
|||||||
Tag out = tag.get("LastOutput");
|
Tag out = tag.get("LastOutput");
|
||||||
if (out instanceof StringTag) {
|
if (out instanceof StringTag) {
|
||||||
JsonElement value = JsonParser.parseString(((StringTag) out).getValue());
|
JsonElement value = JsonParser.parseString(((StringTag) out).getValue());
|
||||||
ChatRewriter.processTranslate(value);
|
protocol.getComponentRewriter().processText(value);
|
||||||
((StringTag) out).setValue(value.toString());
|
((StringTag) out).setValue(value.toString());
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren