Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-11-20 06:50:09 +01:00
Use all 1.19.80 Bedrock legacy codes for color downsampling
This will make RGB downsampling a bit more colorful.
Dieser Commit ist enthalten in:
Ursprung
bc66f81630
Commit
abba88112a
@ -29,8 +29,10 @@ import com.github.steveice10.mc.protocol.data.DefaultComponentSerializer;
|
|||||||
import com.github.steveice10.mc.protocol.data.game.scoreboard.TeamColor;
|
import com.github.steveice10.mc.protocol.data.game.scoreboard.TeamColor;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TranslatableComponent;
|
import net.kyori.adventure.text.TranslatableComponent;
|
||||||
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
import net.kyori.adventure.text.renderer.TranslatableComponentRenderer;
|
import net.kyori.adventure.text.renderer.TranslatableComponentRenderer;
|
||||||
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||||
|
import net.kyori.adventure.text.serializer.legacy.CharacterAndFormat;
|
||||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.TextPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.TextPacket;
|
||||||
@ -48,6 +50,9 @@ public class MessageTranslator {
|
|||||||
// Possible TODO: replace the legacy hover event serializer with an empty one since we have no use for hover events
|
// Possible TODO: replace the legacy hover event serializer with an empty one since we have no use for hover events
|
||||||
private static final GsonComponentSerializer GSON_SERIALIZER;
|
private static final GsonComponentSerializer GSON_SERIALIZER;
|
||||||
|
|
||||||
|
private static final LegacyComponentSerializer LEGACY_SERIALIZER;
|
||||||
|
private static final String ALL_COLORS;
|
||||||
|
|
||||||
// Store team colors for player names
|
// Store team colors for player names
|
||||||
private static final Map<TeamColor, String> TEAM_COLORS = new EnumMap<>(TeamColor.class);
|
private static final Map<TeamColor, String> TEAM_COLORS = new EnumMap<>(TeamColor.class);
|
||||||
|
|
||||||
@ -93,6 +98,48 @@ public class MessageTranslator {
|
|||||||
GSON_SERIALIZER = new GsonComponentSerializerWrapper(source);
|
GSON_SERIALIZER = new GsonComponentSerializerWrapper(source);
|
||||||
// Tell MCProtocolLib to use this serializer, too.
|
// Tell MCProtocolLib to use this serializer, too.
|
||||||
DefaultComponentSerializer.set(GSON_SERIALIZER);
|
DefaultComponentSerializer.set(GSON_SERIALIZER);
|
||||||
|
|
||||||
|
LegacyComponentSerializer legacySerializer;
|
||||||
|
String allColors;
|
||||||
|
try {
|
||||||
|
Class.forName("net.kyori.adventure.text.serializer.legacy.CharacterAndFormat");
|
||||||
|
|
||||||
|
List<CharacterAndFormat> formats = new ArrayList<>(CharacterAndFormat.defaults());
|
||||||
|
// The following two do not yet exist on Bedrock - https://bugs.mojang.com/browse/MCPE-41729
|
||||||
|
formats.remove(CharacterAndFormat.STRIKETHROUGH);
|
||||||
|
formats.remove(CharacterAndFormat.UNDERLINED);
|
||||||
|
|
||||||
|
formats.add(CharacterAndFormat.characterAndFormat('g', TextColor.color(221, 214, 5))); // Minecoin Gold
|
||||||
|
// Add the new characters implemented in 1.19.80
|
||||||
|
formats.add(CharacterAndFormat.characterAndFormat('h', TextColor.color(227, 212, 209))); // Quartz
|
||||||
|
formats.add(CharacterAndFormat.characterAndFormat('i', TextColor.color(206, 212, 202))); // Iron
|
||||||
|
formats.add(CharacterAndFormat.characterAndFormat('j', TextColor.color(68, 58, 59))); // Netherite
|
||||||
|
formats.add(CharacterAndFormat.characterAndFormat('m', TextColor.color(151, 22, 7))); // Redstone
|
||||||
|
formats.add(CharacterAndFormat.characterAndFormat('n', TextColor.color(180, 104, 77))); // Copper
|
||||||
|
formats.add(CharacterAndFormat.characterAndFormat('p', TextColor.color(222, 177, 45))); // Gold
|
||||||
|
formats.add(CharacterAndFormat.characterAndFormat('q', TextColor.color(17, 160, 54))); // Emerald
|
||||||
|
formats.add(CharacterAndFormat.characterAndFormat('s', TextColor.color(44, 186, 168))); // Diamond
|
||||||
|
formats.add(CharacterAndFormat.characterAndFormat('t', TextColor.color(33, 73, 123))); // Lapis
|
||||||
|
formats.add(CharacterAndFormat.characterAndFormat('u', TextColor.color(154, 92, 198))); // Amethyst
|
||||||
|
|
||||||
|
legacySerializer = LegacyComponentSerializer.legacySection().toBuilder()
|
||||||
|
.formats(formats)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
StringBuilder colorBuilder = new StringBuilder();
|
||||||
|
for (CharacterAndFormat format : formats) {
|
||||||
|
if (format.format() instanceof TextColor) {
|
||||||
|
colorBuilder.append(format.character());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
allColors = colorBuilder.toString();
|
||||||
|
} catch (ClassNotFoundException ignored) {
|
||||||
|
// Velocity doesn't have this yet.
|
||||||
|
legacySerializer = LegacyComponentSerializer.legacySection();
|
||||||
|
allColors = "0123456789abcdef";
|
||||||
|
}
|
||||||
|
LEGACY_SERIALIZER = legacySerializer;
|
||||||
|
ALL_COLORS = allColors;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -107,7 +154,7 @@ public class MessageTranslator {
|
|||||||
// Translate any components that require it
|
// Translate any components that require it
|
||||||
message = RENDERER.render(message, locale);
|
message = RENDERER.render(message, locale);
|
||||||
|
|
||||||
String legacy = LegacyComponentSerializer.legacySection().serialize(message);
|
String legacy = LEGACY_SERIALIZER.serialize(message);
|
||||||
|
|
||||||
StringBuilder finalLegacy = new StringBuilder();
|
StringBuilder finalLegacy = new StringBuilder();
|
||||||
char[] legacyChars = legacy.toCharArray();
|
char[] legacyChars = legacy.toCharArray();
|
||||||
@ -123,16 +170,13 @@ public class MessageTranslator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
char next = legacyChars[++i];
|
char next = legacyChars[++i];
|
||||||
if (next != 'm' && next != 'n') {
|
if (ALL_COLORS.indexOf(next) != -1) {
|
||||||
// Strikethrough and underline do not exist on Bedrock
|
|
||||||
if ((next >= '0' && next <= '9') || (next >= 'a' && next <= 'f')) {
|
|
||||||
// Append this color code, as well as a necessary reset code
|
// Append this color code, as well as a necessary reset code
|
||||||
if (!lastFormatReset) {
|
if (!lastFormatReset) {
|
||||||
finalLegacy.append(RESET);
|
finalLegacy.append(RESET);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finalLegacy.append(BASE).append(next);
|
finalLegacy.append(BASE).append(next);
|
||||||
}
|
|
||||||
lastFormatReset = next == 'r';
|
lastFormatReset = next == 'r';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ protocol = "3.0.0.Beta1-SNAPSHOT"
|
|||||||
raknet = "0.0.1.Final-SNAPSHOT"
|
raknet = "0.0.1.Final-SNAPSHOT"
|
||||||
mcauthlib = "d9d773e"
|
mcauthlib = "d9d773e"
|
||||||
mcprotocollib = "1.19.4-math2-SNAPSHOT"
|
mcprotocollib = "1.19.4-math2-SNAPSHOT"
|
||||||
adventure = "4.14.0-20230418.205641-5"
|
adventure = "4.14.0-20230424.215040-7"
|
||||||
adventure-platform = "4.1.2"
|
adventure-platform = "4.1.2"
|
||||||
junit = "5.9.2"
|
junit = "5.9.2"
|
||||||
checkerframework = "3.19.0"
|
checkerframework = "3.19.0"
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren