3
0
Mirror von https://github.com/ViaVersion/ViaBackwards.git synchronisiert 2024-09-07 13:22:54 +02:00

Approximate hex color to chat color, fix show_text hover

TODO: show_entity hover
Dieser Commit ist enthalten in:
KennyTV 2020-04-23 12:25:09 +02:00
Ursprung 2b0745dc2c
Commit b1ca8cc2a0
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 6BE3B555EBC5982B
4 geänderte Dateien mit 141 neuen und 32 gelöschten Zeilen

Datei anzeigen

@ -11,6 +11,7 @@ import us.myles.ViaVersion.api.type.Type;
import us.myles.ViaVersion.packets.State;
import us.myles.viaversion.libs.gson.JsonElement;
import us.myles.viaversion.libs.gson.JsonObject;
import us.myles.viaversion.libs.gson.JsonParser;
import java.util.HashMap;
import java.util.Map;
@ -18,7 +19,8 @@ import java.util.Map;
public class TranslatableRewriter {
private static final Map<String, Map<String, String>> TRANSLATABLES = new HashMap<>();
private final BackwardsProtocol protocol;
protected static final JsonParser JSON_PARSER = new JsonParser();
protected final BackwardsProtocol protocol;
protected final Map<String, String> newTranslatables;
public static void loadTranslatables() {

Datei anzeigen

@ -5,6 +5,7 @@ import nl.matsv.viabackwards.api.BackwardsProtocol;
import nl.matsv.viabackwards.api.entities.storage.EntityTracker;
import nl.matsv.viabackwards.api.rewriters.SoundRewriter;
import nl.matsv.viabackwards.api.rewriters.TranslatableRewriter;
import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.chat.TranslatableRewriter1_16;
import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.data.BackwardsMappings;
import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.packets.BlockItemPackets1_16;
import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.packets.EntityPackets1_16;
@ -16,10 +17,6 @@ import us.myles.ViaVersion.packets.State;
import us.myles.ViaVersion.protocols.protocol1_16to1_15_2.Protocol1_16To1_15_2;
import us.myles.ViaVersion.protocols.protocol1_16to1_15_2.data.MappingData;
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
import us.myles.ViaVersion.util.GsonUtil;
import us.myles.viaversion.libs.gson.JsonElement;
import us.myles.viaversion.libs.gson.JsonObject;
import us.myles.viaversion.libs.gson.JsonPrimitive;
import java.util.UUID;
@ -35,32 +32,7 @@ public class Protocol1_15_2To1_16 extends BackwardsProtocol {
EntityPackets1_16 entityPackets = new EntityPackets1_16(this);
entityPackets.register();
TranslatableRewriter translatableRewriter = new TranslatableRewriter(this) {
@Override
public String processTranslate(String value) {
JsonObject object = GsonUtil.getGson().fromJson(value, JsonObject.class);
JsonElement with = object.get("with");
if (with == null) {
return super.processTranslate(value);
}
for (JsonElement element : with.getAsJsonArray()) {
if (!element.isJsonObject()) continue;
JsonElement hoverEventElement = element.getAsJsonObject().get("hoverEvent");
if (hoverEventElement == null) continue;
JsonObject hoverEvent = hoverEventElement.getAsJsonObject();
JsonElement contentsElement = hoverEvent.remove("contents");
if (contentsElement != null) {
JsonObject values = new JsonObject();
values.add("text", new JsonPrimitive(contentsElement.toString()));
hoverEvent.add("value", values);
}
}
return super.processTranslate(object.toString());
}
};
TranslatableRewriter translatableRewriter = new TranslatableRewriter1_16(this);
translatableRewriter.registerBossBar(0x0D, 0x0D);
translatableRewriter.registerChatMessage(0x0F, 0x0F);
translatableRewriter.registerCombatEvent(0x33, 0x33);

Datei anzeigen

@ -0,0 +1,135 @@
package nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.chat;
import nl.matsv.viabackwards.api.BackwardsProtocol;
import nl.matsv.viabackwards.api.rewriters.TranslatableRewriter;
import us.myles.viaversion.libs.gson.JsonArray;
import us.myles.viaversion.libs.gson.JsonElement;
import us.myles.viaversion.libs.gson.JsonObject;
import us.myles.viaversion.libs.gson.JsonPrimitive;
public class TranslatableRewriter1_16 extends TranslatableRewriter {
private static final ChatColor[] COLORS = {
new ChatColor("black", 0x000000),
new ChatColor("dark_blue", 0x0000aa),
new ChatColor("dark_green", 0x00aa00),
new ChatColor("dark_aqua", 0x00aaaa),
new ChatColor("dark_red", 0xaa0000),
new ChatColor("dark_purple", 0xaa00aa),
new ChatColor("gold", 0xffaa00),
new ChatColor("gray", 0xaaaaaa),
new ChatColor("dark_gray", 0x555555),
new ChatColor("blue", 0x5555ff),
new ChatColor("green", 0x55ff55),
new ChatColor("aqua", 0x55ffff),
new ChatColor("red", 0xff5555),
new ChatColor("light_purple", 0xff55ff),
new ChatColor("yellow", 0xffff55),
new ChatColor("white", 0xffffff)
};
public TranslatableRewriter1_16(BackwardsProtocol protocol) {
super(protocol);
}
@Override
public String processTranslate(String value) {
JsonElement root = JSON_PARSER.parse(value);
if (!root.isJsonObject()) {
return super.processTranslate(value);
}
processTranslate(root);
return super.processTranslate(root.toString());
}
private void processTranslate(JsonElement value) {
if (!value.isJsonObject()) return;
// Iterate all sub components
JsonObject object = value.getAsJsonObject();
JsonArray with = object.getAsJsonArray("with");
if (with != null) {
for (JsonElement element : with) {
processTranslate(element);
}
}
JsonArray extra = object.getAsJsonArray("extra");
if (extra != null) {
for (JsonElement element : extra) {
processTranslate(element);
}
}
// Hoverevent structure changed
JsonObject hoverEvent = object.getAsJsonObject("hoverEvent");
if (hoverEvent != null) {
JsonElement contentsElement = hoverEvent.remove("contents");
String action = hoverEvent.getAsJsonPrimitive("action").getAsString();
if (contentsElement != null) {
if (action.equals("show_text")) {
// text as chat component
hoverEvent.add("value", contentsElement);
} else {
// show_entity and show_item as plain strings in a text field
final JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("text", contentsElement.toString());
hoverEvent.add("value", jsonObject);
//hoverEvent.addProperty("value", contentsElement.toString());
}
}
}
// c o l o r s
JsonPrimitive color = object.getAsJsonPrimitive("color");
if (color != null) {
String colorName = color.getAsString();
if (!colorName.isEmpty() && colorName.charAt(0) == '#') {
int rgb = Integer.parseInt(colorName.substring(1), 16);
String closestChatColor = getClosestChatColor(rgb);
object.addProperty("color", closestChatColor);
}
}
}
private String getClosestChatColor(int rgb) {
int r = (rgb >> 16) & 0xFF;
int g = (rgb >> 8) & 0xFF;
int b = rgb & 0xFF;
ChatColor closest = null;
int smallestDiff = 0;
for (ChatColor color : COLORS) {
if (color.rgb == rgb) {
return color.colorName;
}
// Check by the greatest diff of the 3 values
int rDiff = Math.abs(color.r - r);
int gDiff = Math.abs(color.g - g);
int bDiff = Math.abs(color.b - b);
int maxDiff = Math.max(Math.max(rDiff, gDiff), bDiff);
if (closest == null || maxDiff < smallestDiff) {
closest = color;
smallestDiff = maxDiff;
}
}
return closest.colorName;
}
private static final class ChatColor {
private final String colorName;
private final int rgb;
private final int r, g, b;
ChatColor(String colorName, int rgb) {
this.colorName = colorName;
this.rgb = rgb;
r = (rgb >> 16) & 0xFF;
g = (rgb >> 8) & 0xFF;
b = rgb & 0xFF;
}
}
}

Datei anzeigen

@ -5675,7 +5675,7 @@
"minecraft:chiseled_nether_bricks": "minecraft:nether_bricks",
"minecraft:cracked_nether_bricks": "minecraft:nether_bricks",
"minecraft:quartz_bricks": "minecraft:quartz_block",
"minecraft:chain": "minecraft:air"
"minecraft:chain": "minecraft:iron_bars[east=false,north=false,south=false,waterlogged=false,west=false]"
},
"items": {
"minecraft:crimson_nylium": {