aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java5
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/CodecUtils.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/Location.java2
-rw-r--r--src/test/java/de/hysky/skyblocker/skyblock/chat/ChatRuleTest.java24
4 files changed, 29 insertions, 8 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java
index d986f9c7..b4e7334a 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java
@@ -20,11 +20,6 @@ public class ChatRulesConfigScreen extends Screen {
}
@Override
- public void setTooltip(Text tooltip) {
- super.setTooltip(tooltip);
- }
-
- @Override
protected void init() {
super.init();
chatRulesConfigListWidget = new ChatRulesConfigListWidget(client, this, width, height - 96, 32, 25);
diff --git a/src/main/java/de/hysky/skyblocker/utils/CodecUtils.java b/src/main/java/de/hysky/skyblocker/utils/CodecUtils.java
index 5b17dfa4..649f2dc4 100644
--- a/src/main/java/de/hysky/skyblocker/utils/CodecUtils.java
+++ b/src/main/java/de/hysky/skyblocker/utils/CodecUtils.java
@@ -44,7 +44,9 @@ public final class CodecUtils {
* @param <E> The enum type
* @return EnumSet codec for the given enum
*/
- public static <E extends Enum<E>> Codec<EnumSet<E>> enumSetCodec(Codec<E> enumCodec) {
- return enumCodec.listOf().xmap(EnumSet::copyOf, List::copyOf);
+ public static <E extends Enum<E>> Codec<EnumSet<E>> enumSetCodec(Codec<E> enumCodec, Class<E> enumClass) {
+ // EnumSet#copyOf finds type from the first element of the list passed to it, so if it's empty the enum type is unknown and an exception is thrown
+ // So we have to manually handle the case where the list empty
+ return enumCodec.listOf().xmap(list -> list.isEmpty() ? EnumSet.noneOf(enumClass) : EnumSet.copyOf(list), List::copyOf);
}
}
diff --git a/src/main/java/de/hysky/skyblocker/utils/Location.java b/src/main/java/de/hysky/skyblocker/utils/Location.java
index 4c3aa6f4..b43783ab 100644
--- a/src/main/java/de/hysky/skyblocker/utils/Location.java
+++ b/src/main/java/de/hysky/skyblocker/utils/Location.java
@@ -47,7 +47,7 @@ public enum Location implements StringIdentifiable {
UNKNOWN("unknown");
public static final Codec<Location> CODEC = StringIdentifiable.createCodec(Location::values);
- public static final Codec<EnumSet<Location>> SET_CODEC = CodecUtils.enumSetCodec(CODEC);
+ public static final Codec<EnumSet<Location>> SET_CODEC = CodecUtils.enumSetCodec(CODEC, Location.class);
/**
* location id from <a href="https://api.hypixel.net/v2/resources/games">Hypixel API</a>
diff --git a/src/test/java/de/hysky/skyblocker/skyblock/chat/ChatRuleTest.java b/src/test/java/de/hysky/skyblocker/skyblock/chat/ChatRuleTest.java
index 1c5004fc..21831918 100644
--- a/src/test/java/de/hysky/skyblocker/skyblock/chat/ChatRuleTest.java
+++ b/src/test/java/de/hysky/skyblocker/skyblock/chat/ChatRuleTest.java
@@ -70,4 +70,28 @@ class ChatRuleTest {
)).getOrThrow()
);
}
+
+ @Test
+ void codecParseEmptySet() {
+ Assertions.assertEquals(
+ EnumSet.noneOf(Location.class),
+ ChatRule.LOCATION_FIXING_CODEC.parse(JsonOps.INSTANCE, JsonOps.INSTANCE.createList(Stream.empty())).getOrThrow()
+ );
+ }
+
+ @Test
+ void codecEncode() {
+ Assertions.assertEquals(
+ JsonOps.INSTANCE.createList(Stream.empty()),
+ ChatRule.LOCATION_FIXING_CODEC.encodeStart(JsonOps.INSTANCE, EnumSet.noneOf(Location.class)).getOrThrow()
+ );
+
+ Assertions.assertEquals(
+ JsonOps.INSTANCE.createList(Stream.of(Location.DWARVEN_MINES, Location.WINTER_ISLAND)
+ .map(Location::asString)
+ .map(JsonOps.INSTANCE::createString)
+ ),
+ ChatRule.LOCATION_FIXING_CODEC.encodeStart(JsonOps.INSTANCE, EnumSet.of(Location.DWARVEN_MINES, Location.WINTER_ISLAND)).getOrThrow()
+ );
+ }
}