Mirror von
https://github.com/ViaVersion/ViaBackwards.git
synchronisiert 2024-11-20 06:50:10 +01:00
Merge pull request #84 from Gerrygames/removeUnusedColor
remove unused colors from team prefix/suffix
Dieser Commit ist enthalten in:
Commit
15db59f439
@ -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() {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
32
core/src/main/java/nl/matsv/viabackwards/utils/ChatUtil.java
Normale Datei
32
core/src/main/java/nl/matsv/viabackwards/utils/ChatUtil.java
Normale Datei
@ -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();
|
||||||
|
}
|
||||||
|
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren