1
0
Fork 0
mirror of https://github.com/GeyserMC/Geyser.git synced 2025-04-17 19:12:14 +02:00

Fix text component hashing

This commit is contained in:
Eclipse 2025-03-28 11:26:15 +00:00
parent 497ff7bb35
commit e8358edf30
No known key found for this signature in database
GPG key ID: 95E6998F82EC938A
3 changed files with 17 additions and 12 deletions
core/src/main/java/org/geysermc/geyser/item/hashing

View file

@ -108,7 +108,7 @@ public interface ComponentHasher {
MinecraftHasher<TextComponent> SIMPLE_TEXT_COMPONENT = MinecraftHasher.STRING.convert(TextComponent::content);
MinecraftHasher<TextComponent> FULL_TEXT_COMPONENT = component("text", builder -> builder
MinecraftHasher<TextComponent> FULL_TEXT_COMPONENT = component(builder -> builder
.accept("text", MinecraftHasher.STRING, TextComponent::content));
MinecraftHasher<TextComponent> TEXT_COMPONENT = MinecraftHasher.dispatch(component -> {
@ -118,22 +118,22 @@ public interface ComponentHasher {
return FULL_TEXT_COMPONENT;
});
MinecraftHasher<TranslatableComponent> TRANSLATABLE_COMPONENT = component("translatable", builder -> builder
MinecraftHasher<TranslatableComponent> TRANSLATABLE_COMPONENT = component(builder -> builder
.accept("translate", MinecraftHasher.STRING, TranslatableComponent::key)
.optionalNullable("fallback", MinecraftHasher.STRING, TranslatableComponent::fallback)); // Arguments are probably not possible
MinecraftHasher<KeybindComponent> KEYBIND_COMPONENT = component("keybind", builder -> builder
MinecraftHasher<KeybindComponent> KEYBIND_COMPONENT = component(builder -> builder
.accept("keybind", MinecraftHasher.STRING, component -> component.keybind()));
MinecraftHasher<ScoreComponent> SCORE_COMPONENT = component("score", builder -> builder
MinecraftHasher<ScoreComponent> SCORE_COMPONENT = component(builder -> builder
.accept("name", MinecraftHasher.STRING, ScoreComponent::name)
.accept("objective", MinecraftHasher.STRING, ScoreComponent::objective));
MinecraftHasher<SelectorComponent> SELECTOR_COMPONENT = component("selector", builder -> builder
MinecraftHasher<SelectorComponent> SELECTOR_COMPONENT = component(builder -> builder
.accept("selector", MinecraftHasher.STRING, SelectorComponent::pattern)
.optionalNullable("separator", COMPONENT, SelectorComponent::separator));
MinecraftHasher<NBTComponent<?, ?>> NBT_COMPONENT = component("nbt", builder -> builder
MinecraftHasher<NBTComponent<?, ?>> NBT_COMPONENT = component(builder -> builder
.accept("nbt", MinecraftHasher.STRING, NBTComponent::nbtPath)
.optional("interpret", MinecraftHasher.BOOL, NBTComponent::interpret, false)
.optionalNullable("separator", COMPONENT, NBTComponent::separator)); // TODO source key, needs kyori update?
@ -155,9 +155,8 @@ public interface ComponentHasher {
throw new IllegalStateException("Unimplemented component hasher: " + component);
};
private static <T extends Component> MinecraftHasher<T> component(String type, MapBuilder<T> componentBuilder) {
private static <T extends Component> MinecraftHasher<T> component(MapBuilder<T> componentBuilder) {
return MinecraftHasher.mapBuilder(builder -> builder
.acceptConstant("type", MinecraftHasher.STRING, type)
.accept(componentBuilder)
.accept(STYLE, Component::style)
.optionalList("extra", COMPONENT, Component::children));

View file

@ -266,7 +266,7 @@ public class DataComponentHashers {
.style(style -> style.color(NamedTextColor.RED).decorate(TextDecoration.ITALIC)), -886479206);
testHash(session, DataComponentTypes.CUSTOM_NAME, Component.text("component with more stuff")
.children(List.of(Component.translatable("a.translate.string", "fallback!")
.style(style -> style.color(TextColor.color(0x446688)).decorate(TextDecoration.BOLD)))), -1261457500);
.style(style -> style.color(TextColor.color(0x446688)).decorate(TextDecoration.BOLD)))), -1591253390);
testHash(session, DataComponentTypes.ITEM_MODEL, MinecraftKey.key("testing"), -689946239);

View file

@ -35,13 +35,15 @@ import java.util.function.Function;
@SuppressWarnings("UnstableApiUsage")
public class MapHasher<T> {
private static final boolean DEBUG = false;
private final MinecraftHashEncoder encoder;
private final T object;
private final Map<HashCode, HashCode> map;
private final Map<String, Object> unhashed;
MapHasher(T object, MinecraftHashEncoder encoder) {
this(object, encoder, new HashMap<>(), new HashMap<>());
this(object, encoder, new HashMap<>(), DEBUG ? new HashMap<>() : null);
}
private MapHasher(T object, MinecraftHashEncoder encoder, Map<HashCode, HashCode> map, Map<String, Object> unhashed) {
@ -57,7 +59,9 @@ public class MapHasher<T> {
}
public <V> MapHasher<T> acceptConstant(String key, MinecraftHasher<V> hasher, V value) {
unhashed.put(key, value);
if (unhashed != null) {
unhashed.put(key, value);
}
return accept(key, hasher.hash(value, encoder));
}
@ -118,7 +122,9 @@ public class MapHasher<T> {
}
public HashCode build() {
System.out.println(unhashed);
if (unhashed != null) {
System.out.println(unhashed);
}
return encoder.map(map);
}
}