3
0
Mirror von https://github.com/ViaVersion/ViaBackwards.git synchronisiert 2024-12-27 00:22:53 +01:00

Merge pull request #84 from Gerrygames/removeUnusedColor

remove unused colors from team prefix/suffix
Dieser Commit ist enthalten in:
Myles 2019-01-23 13:39:20 +00:00 committet von GitHub
Commit 15db59f439
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 4AEE18F83AFDEB23
2 geänderte Dateien mit 162 neuen und 126 gelöschten Zeilen

Datei anzeigen

@ -3,6 +3,7 @@ package nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.packets;
import nl.matsv.viabackwards.ViaBackwards; import nl.matsv.viabackwards.ViaBackwards;
import nl.matsv.viabackwards.api.rewriters.Rewriter; import nl.matsv.viabackwards.api.rewriters.Rewriter;
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.Protocol1_12_2To1_13; import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.Protocol1_12_2To1_13;
import nl.matsv.viabackwards.utils.ChatUtil;
import us.myles.ViaVersion.api.PacketWrapper; import us.myles.ViaVersion.api.PacketWrapper;
import us.myles.ViaVersion.api.minecraft.Position; import us.myles.ViaVersion.api.minecraft.Position;
import us.myles.ViaVersion.api.minecraft.item.Item; import us.myles.ViaVersion.api.minecraft.item.Item;
@ -14,140 +15,143 @@ import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.ChatRewriter;
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.packets.InventoryPackets; import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.packets.InventoryPackets;
public class PlayerPacket1_13 extends Rewriter<Protocol1_12_2To1_13> { public class PlayerPacket1_13 extends Rewriter<Protocol1_12_2To1_13> {
@Override @Override
protected void registerPackets(Protocol1_12_2To1_13 protocol) { protected void registerPackets(Protocol1_12_2To1_13 protocol) {
//Plugin Message //Plugin Message
protocol.out(State.PLAY, 0x19, 0x18, new PacketRemapper() { protocol.out(State.PLAY, 0x19, 0x18, new PacketRemapper() {
@Override @Override
public void registerMap() { public void registerMap() {
handler(new PacketHandler() { handler(new PacketHandler() {
@Override @Override
public void handle(PacketWrapper wrapper) throws Exception { public void handle(PacketWrapper wrapper) throws Exception {
String channel = wrapper.read(Type.STRING); String channel = wrapper.read(Type.STRING);
if (channel.equals("minecraft:trader_list")) { if (channel.equals("minecraft:trader_list")) {
wrapper.write(Type.STRING, "MC|TrList"); wrapper.write(Type.STRING, "MC|TrList");
wrapper.passthrough(Type.INT); //Passthrough Window ID wrapper.passthrough(Type.INT); //Passthrough Window ID
int size = wrapper.passthrough(Type.UNSIGNED_BYTE); int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
//Input Item //Input Item
Item input = wrapper.read(Type.FLAT_ITEM); Item input = wrapper.read(Type.FLAT_ITEM);
BlockItemPackets1_13.toClient(input); BlockItemPackets1_13.toClient(input);
wrapper.write(Type.ITEM, input); wrapper.write(Type.ITEM, input);
//Output Item //Output Item
Item output = wrapper.read(Type.FLAT_ITEM); Item output = wrapper.read(Type.FLAT_ITEM);
BlockItemPackets1_13.toClient(output); BlockItemPackets1_13.toClient(output);
wrapper.write(Type.ITEM, output); wrapper.write(Type.ITEM, output);
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); //Has second item boolean secondItem = wrapper.passthrough(Type.BOOLEAN); //Has second item
if (secondItem) { if (secondItem) {
//Second Item //Second Item
Item second = wrapper.read(Type.FLAT_ITEM); Item second = wrapper.read(Type.FLAT_ITEM);
BlockItemPackets1_13.toClient(second); BlockItemPackets1_13.toClient(second);
wrapper.write(Type.ITEM, second); wrapper.write(Type.ITEM, second);
} }
wrapper.passthrough(Type.BOOLEAN); //Trade disabled wrapper.passthrough(Type.BOOLEAN); //Trade disabled
wrapper.passthrough(Type.INT); //Number of tools uses wrapper.passthrough(Type.INT); //Number of tools uses
wrapper.passthrough(Type.INT); //Maximum number of trade uses wrapper.passthrough(Type.INT); //Maximum number of trade uses
} }
} else { } else {
String oldChannel = InventoryPackets.getOldPluginChannelId(channel); String oldChannel = InventoryPackets.getOldPluginChannelId(channel);
if (oldChannel == null) { if (oldChannel == null) {
ViaBackwards.getPlatform().getLogger().warning("Could not find old channel for " + channel); ViaBackwards.getPlatform().getLogger().warning("Could not find old channel for " + channel);
wrapper.cancel(); wrapper.cancel();
return; return;
} }
wrapper.write(Type.STRING, oldChannel); wrapper.write(Type.STRING, oldChannel);
} }
} }
}); });
} }
}); });
//Scoreboard Objective //Scoreboard Objective
protocol.out(State.PLAY, 0x45, 0x42, new PacketRemapper() { protocol.out(State.PLAY, 0x45, 0x42, new PacketRemapper() {
@Override @Override
public void registerMap() { public void registerMap() {
map(Type.STRING); map(Type.STRING);
map(Type.BYTE); map(Type.BYTE);
handler(new PacketHandler() { handler(new PacketHandler() {
@Override @Override
public void handle(PacketWrapper wrapper) throws Exception { public void handle(PacketWrapper wrapper) throws Exception {
byte mode = wrapper.get(Type.BYTE, 0); byte mode = wrapper.get(Type.BYTE, 0);
if (mode == 0 || mode == 2) { if (mode == 0 || mode == 2) {
String value = wrapper.read(Type.STRING); String value = wrapper.read(Type.STRING);
value = ChatRewriter.jsonTextToLegacy(value); value = ChatRewriter.jsonTextToLegacy(value);
if (value.length() > 32) value = value.substring(0, 32); if (value.length() > 32) value = value.substring(0, 32);
wrapper.write(Type.STRING, value); wrapper.write(Type.STRING, value);
int type = wrapper.read(Type.VAR_INT); int type = wrapper.read(Type.VAR_INT);
wrapper.write(Type.STRING, type == 1 ? "hearts" : "integer"); wrapper.write(Type.STRING, type == 1 ? "hearts" : "integer");
} }
} }
}); });
} }
}); });
//Teams //Teams
protocol.out(State.PLAY, 0x47, 0x44, new PacketRemapper() { protocol.out(State.PLAY, 0x47, 0x44, new PacketRemapper() {
@Override @Override
public void registerMap() { public void registerMap() {
map(Type.STRING); map(Type.STRING);
map(Type.BYTE); map(Type.BYTE);
handler(new PacketHandler() { handler(new PacketHandler() {
@Override @Override
public void handle(PacketWrapper wrapper) throws Exception { public void handle(PacketWrapper wrapper) throws Exception {
byte action = wrapper.get(Type.BYTE, 0); byte action = wrapper.get(Type.BYTE, 0);
if (action == 0 || action == 2) { if (action == 0 || action == 2) {
String displayName = wrapper.read(Type.STRING); String displayName = wrapper.read(Type.STRING);
displayName = ChatRewriter.jsonTextToLegacy(displayName); displayName = ChatRewriter.jsonTextToLegacy(displayName);
if (displayName.length() > 32) displayName = displayName.substring(0, 32); displayName = ChatUtil.removeUnusedColor(displayName, 'f');
wrapper.write(Type.STRING, displayName); if (displayName.length() > 32) displayName = displayName.substring(0, 32);
wrapper.write(Type.STRING, displayName);
byte flags = wrapper.read(Type.BYTE); byte flags = wrapper.read(Type.BYTE);
String nameTagVisibility = wrapper.read(Type.STRING); String nameTagVisibility = wrapper.read(Type.STRING);
String collisionRule = wrapper.read(Type.STRING); String collisionRule = wrapper.read(Type.STRING);
int colour = wrapper.read(Type.VAR_INT); int colour = wrapper.read(Type.VAR_INT);
if (colour == 21) { if (colour == 21) {
colour = -1; colour = -1;
} }
//TODO team color/prefix handling changed from 1.12.2 to 1.13 and to 1.13.1 again afaik //TODO team color/prefix handling changed from 1.12.2 to 1.13 and to 1.13.1 again afaik
String prefix = wrapper.read(Type.STRING); String prefix = wrapper.read(Type.STRING);
String suffix = wrapper.read(Type.STRING); String suffix = wrapper.read(Type.STRING);
prefix = ChatRewriter.jsonTextToLegacy(prefix); prefix = prefix == null || prefix.equals("null") ? "" : ChatRewriter.jsonTextToLegacy(prefix);
prefix += "§" + (colour > -1 && colour <= 15 ? Integer.toHexString(colour) : "r"); prefix += "§" + (colour > -1 && colour <= 15 ? Integer.toHexString(colour) : "r");
if (prefix.length() > 16) prefix = prefix.substring(0, 16); prefix = ChatUtil.removeUnusedColor(prefix, 'f', true);
if (prefix.endsWith("§")) prefix = prefix.substring(0, prefix.length() - 1); if (prefix.length() > 16) prefix = prefix.substring(0, 16);
suffix = ChatRewriter.jsonTextToLegacy(suffix); if (prefix.endsWith("§")) prefix = prefix.substring(0, prefix.length() - 1);
if (suffix.endsWith("§")) suffix = suffix.substring(0, suffix.length() - 1); suffix = suffix == null || suffix.equals("null") ? "" : ChatRewriter.jsonTextToLegacy(suffix);
wrapper.write(Type.STRING, prefix); suffix = ChatUtil.removeUnusedColor(suffix, 'f');
wrapper.write(Type.STRING, suffix); if (suffix.endsWith("§")) suffix = suffix.substring(0, suffix.length() - 1);
wrapper.write(Type.STRING, prefix);
wrapper.write(Type.STRING, suffix);
wrapper.write(Type.BYTE, flags); wrapper.write(Type.BYTE, flags);
wrapper.write(Type.STRING, nameTagVisibility); wrapper.write(Type.STRING, nameTagVisibility);
wrapper.write(Type.STRING, collisionRule); wrapper.write(Type.STRING, collisionRule);
wrapper.write(Type.BYTE, (byte) colour); wrapper.write(Type.BYTE, (byte) colour);
} }
if (action == 0 || action == 3 || action == 4) { if (action == 0 || action == 3 || action == 4) {
wrapper.passthrough(Type.STRING_ARRAY); //Entities wrapper.passthrough(Type.STRING_ARRAY); //Entities
} }
} }
}); });
} }
}); });
// Tab-Complete (clientbound) TODO MODIFIED // Tab-Complete (clientbound) TODO MODIFIED
protocol.out(State.PLAY, 0x10, 0x0E, new PacketRemapper() { protocol.out(State.PLAY, 0x10, 0x0E, new PacketRemapper() {
@Override @Override
public void registerMap() { public void registerMap() {
handler(new PacketHandler() { handler(new PacketHandler() {
@Override @Override
public void handle(PacketWrapper wrapper) throws Exception { public void handle(PacketWrapper wrapper) throws Exception {
int key = wrapper.read(Type.VAR_INT); int key = wrapper.read(Type.VAR_INT);
int start = wrapper.read(Type.VAR_INT); int start = wrapper.read(Type.VAR_INT);
int length = wrapper.read(Type.VAR_INT); int length = wrapper.read(Type.VAR_INT);
@ -159,10 +163,10 @@ public class PlayerPacket1_13 extends Rewriter<Protocol1_12_2To1_13> {
// Ignore tooltip // Ignore tooltip
if (wrapper.read(Type.BOOLEAN)) wrapper.read(Type.STRING); if (wrapper.read(Type.BOOLEAN)) wrapper.read(Type.STRING);
} }
} }
}); });
} }
}); });
// Tab-Complete (serverbound) // Tab-Complete (serverbound)
protocol.in(State.PLAY, 0x05, 0x01, new PacketRemapper() { protocol.in(State.PLAY, 0x05, 0x01, new PacketRemapper() {
@ -185,7 +189,7 @@ public class PlayerPacket1_13 extends Rewriter<Protocol1_12_2To1_13> {
// Ignore fields // Ignore fields
wrapper.read(Type.BOOLEAN); wrapper.read(Type.BOOLEAN);
if (wrapper.read(Type.BOOLEAN)) { if (wrapper.read(Type.BOOLEAN)) {
wrapper.read(Type.POSITION); wrapper.read(Type.POSITION);
} }
} }
}); });
@ -296,8 +300,8 @@ public class PlayerPacket1_13 extends Rewriter<Protocol1_12_2To1_13> {
}); });
} }
@Override @Override
protected void registerRewrites() { protected void registerRewrites() {
} }
} }

Datei anzeigen

@ -0,0 +1,32 @@
package nl.matsv.viabackwards.utils;
import java.util.regex.Pattern;
public class ChatUtil {
private static final Pattern UNUSED_COLOR_PATTERN = Pattern.compile("(?>(?>§[0-fk-or])*(§r|\\Z))|(?>(?>§[0-f])*(§[0-f]))");
private static final Pattern UNUSED_COLOR_PATTERN_PREFIX = Pattern.compile("(?>(?>§[0-fk-or])*(§r))|(?>(?>§[0-f])*(§[0-f]))");
public static String removeUnusedColor(String legacy, char defaultColor) {
return removeUnusedColor(legacy, defaultColor, false);
}
public static String removeUnusedColor(String legacy, char defaultColor, boolean isPrefix) {
if (legacy == null) return null;
Pattern pattern = isPrefix ? UNUSED_COLOR_PATTERN_PREFIX : UNUSED_COLOR_PATTERN;
legacy = pattern.matcher(legacy).replaceAll("$1$2");
StringBuilder builder = new StringBuilder();
char last = defaultColor;
for (int i = 0; i < legacy.length(); i++) {
char current = legacy.charAt(i);
if (current != '§' || i == legacy.length() - 1) {
builder.append(current);
continue;
}
current = legacy.charAt(++i);
if (current == last) continue;
builder.append('§').append(current);
last = current;
}
return builder.toString();
}
}