package net.minecraft.client.gui.font; import com.mojang.serialization.Codec; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.util.StringRepresentable; @Environment(EnvType.CLIENT) public enum FontOption implements StringRepresentable { UNIFORM("uniform"), JAPANESE_VARIANTS("jp"); public static final Codec CODEC = StringRepresentable.fromEnum(FontOption::values); private final String name; private FontOption(final String name) { this.name = name; } @Override public String getSerializedName() { return this.name; } @Environment(EnvType.CLIENT) public static class Filter { private final Map values; public static final Codec CODEC = Codec.unboundedMap(FontOption.CODEC, Codec.BOOL).xmap(FontOption.Filter::new, filter -> filter.values); public static final FontOption.Filter ALWAYS_PASS = new FontOption.Filter(Map.of()); public Filter(Map values) { this.values = values; } public boolean apply(Set options) { for (Entry entry : this.values.entrySet()) { if (options.contains(entry.getKey()) != (Boolean)entry.getValue()) { return false; } } return true; } public FontOption.Filter merge(FontOption.Filter filter) { Map map = new HashMap(filter.values); map.putAll(this.values); return new FontOption.Filter(Map.copyOf(map)); } } }