Skip to content

Commit df6f1cf

Browse files
committed
Fix color palette codec
1 parent 2890463 commit df6f1cf

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

common/src/main/java/juuxel/adorn/client/resources/ColorManager.java

+10-5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.google.gson.Gson;
44
import com.google.gson.JsonObject;
55
import com.google.gson.JsonParseException;
6+
import com.mojang.datafixers.util.Either;
67
import com.mojang.serialization.Codec;
78
import com.mojang.serialization.DataResult;
89
import com.mojang.serialization.JsonOps;
@@ -24,7 +25,6 @@
2425
import java.util.HexFormat;
2526
import java.util.List;
2627
import java.util.Map;
27-
import java.util.function.Function;
2828
import java.util.regex.Pattern;
2929

3030
public class ColorManager extends SinglePreparationResourceReloader<Map<Identifier, List<JsonObject>>> {
@@ -100,17 +100,22 @@ private static DataResult<Integer> parseHexColor(String str) {
100100
});
101101
}
102102

103+
private static String writeHexColor(int color) {
104+
var hex = HexFormat.of().withUpperCase().toHexDigits(color);
105+
return '#' + (hex.startsWith("00") ? hex.substring(2) : hex);
106+
}
107+
103108
public record ColorPair(int bg, int fg) {
104109
private static final int DEFAULT_FG = Colors.SCREEN_TEXT;
105110

106111
private static final Codec<Integer> COLOR_CODEC =
107-
Codec.STRING.comapFlatMap(ColorManager::parseHexColor, color -> '#' + HexFormat.of().withUpperCase().toHexDigits(color));
108-
public static final Codec<ColorPair> CODEC = Codec.withAlternative(
112+
Codec.STRING.comapFlatMap(ColorManager::parseHexColor, ColorManager::writeHexColor);
113+
public static final Codec<ColorPair> CODEC = Codec.<ColorPair, ColorPair>either(
109114
RecordCodecBuilder.create(instance -> instance.group(
110115
COLOR_CODEC.fieldOf("bg").forGetter(ColorPair::bg),
111-
COLOR_CODEC.optionalFieldOf("fg", DEFAULT_FG).forGetter(ColorPair::bg)
116+
COLOR_CODEC.optionalFieldOf("fg", DEFAULT_FG).forGetter(ColorPair::fg)
112117
).apply(instance, ColorPair::new)),
113118
COLOR_CODEC.xmap(bg -> new ColorPair(bg, DEFAULT_FG), ColorPair::bg)
114-
);
119+
).xmap(Either::unwrap, pair -> pair.fg == DEFAULT_FG ? Either.right(pair) : Either.left(pair));
115120
}
116121
}

0 commit comments

Comments
 (0)