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:
parent
497ff7bb35
commit
e8358edf30
3 changed files with 17 additions and 12 deletions
core/src/main/java/org/geysermc/geyser/item/hashing
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue