diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6c4a87c..eb47391 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,11 +1,11 @@ # jf-scripts version is in settings.gradle.kts [versions] -minecraft = "1.20.6" -yarn = "build.1" +minecraft = "1.21-pre4" +yarn = "build.3" fabric-loader = "0.15.11" -fabric-api = "0.97.8+1.20.6" +fabric-api = "0.100.0+1.21" jf-commons = "1.7-SNAPSHOT" -modmenu = "10.0.0-beta.1" +modmenu = "11.0.0-beta.1" annotations = "24.1.0" javapoet = "1.13.0" diff --git a/libjf-base/src/main/java/io/gitlab/jfronny/libjf/ResourcePath.java b/libjf-base/src/main/java/io/gitlab/jfronny/libjf/ResourcePath.java index d7a31d8..3e4371f 100644 --- a/libjf-base/src/main/java/io/gitlab/jfronny/libjf/ResourcePath.java +++ b/libjf-base/src/main/java/io/gitlab/jfronny/libjf/ResourcePath.java @@ -22,7 +22,7 @@ public class ResourcePath { case "data" -> ResourceType.SERVER_DATA; default -> throw new IllegalStateException("Unexpected value for resource type: " + s1[0] + " in: " + name); }; - id = new Identifier(s1[1], s1[2]); + id = Identifier.of(s1[1], s1[2]); } public Identifier getId() { diff --git a/libjf-config-core-v2/src/main/java/io/gitlab/jfronny/libjf/config/api/v2/dsl/CategoryBuilder.java b/libjf-config-core-v2/src/main/java/io/gitlab/jfronny/libjf/config/api/v2/dsl/CategoryBuilder.java index af74762..47aeae6 100644 --- a/libjf-config-core-v2/src/main/java/io/gitlab/jfronny/libjf/config/api/v2/dsl/CategoryBuilder.java +++ b/libjf-config-core-v2/src/main/java/io/gitlab/jfronny/libjf/config/api/v2/dsl/CategoryBuilder.java @@ -39,6 +39,15 @@ public interface CategoryBuilder> { Builder value(String id, T def, double min, double max, Type type, int width, Supplier get, Consumer set); Builder value(EntryInfo entry); + /** + * Adds a migration to the category. + * Migrations are used to update the config when the format changes. + * They MUST consume the element and may use it to update the internal state. + * + * @param element The element to migrate + * @param migration The migration to apply + * @return this + */ @ApiStatus.Experimental Builder addMigration(String element, Migration migration); String getId(); diff --git a/libjf-config-core-v2/src/main/java/io/gitlab/jfronny/libjf/config/impl/dsl/DefaultConfigIO.java b/libjf-config-core-v2/src/main/java/io/gitlab/jfronny/libjf/config/impl/dsl/DefaultConfigIO.java index 4543b28..b13b0c3 100644 --- a/libjf-config-core-v2/src/main/java/io/gitlab/jfronny/libjf/config/impl/dsl/DefaultConfigIO.java +++ b/libjf-config-core-v2/src/main/java/io/gitlab/jfronny/libjf/config/impl/dsl/DefaultConfigIO.java @@ -40,8 +40,10 @@ public class DefaultConfigIO { try { if (reader.peek() != Token.BEGIN_OBJECT) { LibJf.LOGGER.error("Invalid config: Not a JSON object for " + id); + reader.skipValue(); return; } + //TODO take advantage of commons-serialize's single-item view to permit illegal entries without messing up the rest Set appeared = new HashSet<>(); reader.beginObject(); while (reader.peek() != Token.END_OBJECT) { diff --git a/libjf-config-core-v2/src/main/java/io/gitlab/jfronny/libjf/config/impl/dsl/DslConfigCategory.java b/libjf-config-core-v2/src/main/java/io/gitlab/jfronny/libjf/config/impl/dsl/DslConfigCategory.java index 64b8255..3d71779 100644 --- a/libjf-config-core-v2/src/main/java/io/gitlab/jfronny/libjf/config/impl/dsl/DslConfigCategory.java +++ b/libjf-config-core-v2/src/main/java/io/gitlab/jfronny/libjf/config/impl/dsl/DslConfigCategory.java @@ -39,7 +39,7 @@ public class DslConfigCategory implements ConfigCategory { this.presets = presets.entrySet().stream().collect(Collectors.toMap( Map.Entry::getKey, t -> () -> t.getValue().accept(this), - (u, v) -> v, + (u, v) -> () -> { u.run(); v.run(); }, LinkedHashMap::new )); this.referencedConfigs = referencedConfigs; diff --git a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/RequestRouter.java b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/RequestRouter.java index f3faecb..f591588 100644 --- a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/RequestRouter.java +++ b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/RequestRouter.java @@ -10,6 +10,7 @@ import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.minecraft.network.PacketByteBuf; +import net.minecraft.util.Identifier; import java.util.*; @@ -30,6 +31,10 @@ public class RequestRouter { PayloadTypeRegistry.configurationC2S().register(ConfigurationCompletePacket.ID, ConfigurationCompletePacket.CODEC); } + public static Identifier id(String path) { + return Identifier.of(MOD_ID, path); + } + public static void acceptResponse(ResponsePacket response, PacketSender responseSender) { Request request = currentRequests.remove(response.request()); if (request != null) { diff --git a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationCompletePacket.java b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationCompletePacket.java index c405860..97eb27d 100644 --- a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationCompletePacket.java +++ b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationCompletePacket.java @@ -4,10 +4,9 @@ import io.gitlab.jfronny.libjf.config.impl.network.RequestRouter; import io.netty.buffer.ByteBuf; import net.minecraft.network.codec.PacketCodec; import net.minecraft.network.packet.CustomPayload; -import net.minecraft.util.Identifier; public record ConfigurationCompletePacket() implements CustomPayload { - public static final CustomPayload.Id ID = new CustomPayload.Id<>(new Identifier(RequestRouter.MOD_ID, "handshake_complete")); + public static final CustomPayload.Id ID = new CustomPayload.Id<>(RequestRouter.id("handshake_complete")); public static final PacketCodec CODEC = PacketCodec.unit(new ConfigurationCompletePacket()); @Override diff --git a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationPacket.java b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationPacket.java index 9c17bbb..d3121fe 100644 --- a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationPacket.java +++ b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationPacket.java @@ -5,10 +5,9 @@ import io.netty.buffer.ByteBuf; import net.minecraft.network.codec.PacketCodec; import net.minecraft.network.codec.PacketCodecs; import net.minecraft.network.packet.CustomPayload; -import net.minecraft.util.Identifier; public record ConfigurationPacket(int version) implements CustomPayload { - public static final CustomPayload.Id ID = new CustomPayload.Id<>(new Identifier(RequestRouter.MOD_ID, "handshake")); + public static final CustomPayload.Id ID = new CustomPayload.Id<>(RequestRouter.id("handshake")); public static final PacketCodec CODEC = PacketCodecs.INTEGER.xmap(ConfigurationPacket::new, ConfigurationPacket::version); @Override diff --git a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/RequestPacket.java b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/RequestPacket.java index 0dcffb3..21fd69b 100644 --- a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/RequestPacket.java +++ b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/RequestPacket.java @@ -6,14 +6,12 @@ import net.minecraft.network.PacketByteBuf; import net.minecraft.network.codec.PacketCodec; import net.minecraft.network.codec.PacketCodecs; import net.minecraft.network.packet.CustomPayload; -import net.minecraft.util.Identifier; import org.jetbrains.annotations.Nullable; import java.util.Optional; -import java.util.function.Function; public record RequestPacket(long request, @Nullable Long parent, String name, PacketByteBuf aux) implements CustomPayload { - public static final Id ID = new CustomPayload.Id<>(new Identifier(RequestRouter.MOD_ID, "request")); + public static final Id ID = new CustomPayload.Id<>(RequestRouter.id("request")); public static final PacketCodec CODEC = PacketCodec.tuple( PacketCodecs.VAR_LONG, RequestPacket::request, PacketCodecs.optional(PacketCodecs.VAR_LONG), RequestPacket::optionalParent, diff --git a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ResponsePacket.java b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ResponsePacket.java index 433b3c9..83030d7 100644 --- a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ResponsePacket.java +++ b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ResponsePacket.java @@ -6,10 +6,9 @@ import net.minecraft.network.PacketByteBuf; import net.minecraft.network.codec.PacketCodec; import net.minecraft.network.codec.PacketCodecs; import net.minecraft.network.packet.CustomPayload; -import net.minecraft.util.Identifier; public record ResponsePacket(long request, int status, PacketByteBuf aux) implements CustomPayload { - public static final CustomPayload.Id ID = new CustomPayload.Id<>(new Identifier(RequestRouter.MOD_ID, "response")); + public static final CustomPayload.Id ID = new CustomPayload.Id<>(RequestRouter.id("response")); public static final PacketCodec CODEC = PacketCodec.tuple( PacketCodecs.VAR_LONG, ResponsePacket::request, PacketCodecs.INTEGER, ResponsePacket::status, diff --git a/libjf-config-ui-tiny/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/TinyConfigScreen.java b/libjf-config-ui-tiny/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/TinyConfigScreen.java index cb7d499..a27c9a0 100644 --- a/libjf-config-ui-tiny/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/TinyConfigScreen.java +++ b/libjf-config-ui-tiny/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/TinyConfigScreen.java @@ -139,6 +139,7 @@ public class TinyConfigScreen extends ScreenWithSaveHook { } private boolean tabsWouldOverflow(Collection categories) { + // Mirrors TabNavigationWidget#init int tabNavWidth = this.width; int headerWidth = Math.min(400, tabNavWidth) - 28; int singleHeaderWidth = MathHelper.roundUpToMultiple(headerWidth / categories.size(), 2); diff --git a/libjf-config-ui-tiny/src/testmod/java/io/gitlab/jfronny/libjf/config/test/tiny/TestConfig.java b/libjf-config-ui-tiny/src/testmod/java/io/gitlab/jfronny/libjf/config/test/tiny/TestConfig.java index dc48443..24b2b1b 100644 --- a/libjf-config-ui-tiny/src/testmod/java/io/gitlab/jfronny/libjf/config/test/tiny/TestConfig.java +++ b/libjf-config-ui-tiny/src/testmod/java/io/gitlab/jfronny/libjf/config/test/tiny/TestConfig.java @@ -26,15 +26,14 @@ public class TestConfig implements JfCustomConfig { .category("nestedCa", builder2 -> builder2.value("doubleValue", doubleValue2, 12, 47, () -> doubleValue2, v -> doubleValue2 = v)) ).category("ca2", builder1 -> builder1 .value("value2", value2, () -> value2, v -> value2 = v) - ).category("ca3", builder1 -> builder1 .value("value3", value3, () -> value3, v -> value3 = v) + ).category("ca3", builder1 -> builder1 + .value("value3", value4, -5, 12, () -> value4, v -> value4 = v) ).category("ca4", builder1 -> builder1 - .value("value4", value4, -5, 12, () -> value4, v -> value4 = v) + .value("value4", value5, () -> value5, v -> value5 = v) ).category("ca5", builder1 -> builder1 - .value("value5", value5, () -> value5, v -> value5 = v) + .value("value5", value6, () -> value6, v -> value6 = v) ).category("ca6", builder1 -> builder1 - .value("value6", value6, () -> value6, v -> value6 = v) - ).category("ca7", builder1 -> builder1 .value("mappy", map, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, Type.ofToken(new TypeToken>() {}), 100, () -> map, v -> map = v) ) ); diff --git a/libjf-config-ui-tiny/src/testmod/resources/assets/libjf-config-ui-tiny-testmod/lang/en_us.json b/libjf-config-ui-tiny/src/testmod/resources/assets/libjf-config-ui-tiny-testmod/lang/en_us.json index c2ae08f..8c84a91 100644 --- a/libjf-config-ui-tiny/src/testmod/resources/assets/libjf-config-ui-tiny-testmod/lang/en_us.json +++ b/libjf-config-ui-tiny/src/testmod/resources/assets/libjf-config-ui-tiny-testmod/lang/en_us.json @@ -18,5 +18,5 @@ "libjf-config-ui-tiny-testmod.jfconfig.ca5.value5": "Value 5", "libjf-config-ui-tiny-testmod.jfconfig.ca6.title": "Category 6", "libjf-config-ui-tiny-testmod.jfconfig.ca6.tooltip": "This is category 6", - "libjf-config-ui-tiny-testmod.jfconfig.ca6.value6": "Value 6" + "libjf-config-ui-tiny-testmod.jfconfig.ca6.mappy": "Value 6" } diff --git a/libjf-data-v0/src/client/resources/assets/lang/en_us.json b/libjf-data-v0/src/client/resources/assets/lang/en_us.json new file mode 100644 index 0000000..1759f6a --- /dev/null +++ b/libjf-data-v0/src/client/resources/assets/lang/en_us.json @@ -0,0 +1,4 @@ +{ + "tag.item.libjf.overpowered": "Overpowered", + "tag.item.libjf.shulker_boxes_illegal": "Illegal in Shulker Boxes" +} \ No newline at end of file diff --git a/libjf-data-v0/src/main/java/io/gitlab/jfronny/libjf/data/Tags.java b/libjf-data-v0/src/main/java/io/gitlab/jfronny/libjf/data/Tags.java index cc65456..434b4e7 100644 --- a/libjf-data-v0/src/main/java/io/gitlab/jfronny/libjf/data/Tags.java +++ b/libjf-data-v0/src/main/java/io/gitlab/jfronny/libjf/data/Tags.java @@ -7,6 +7,6 @@ import net.minecraft.registry.tag.TagKey; import net.minecraft.util.Identifier; public class Tags { - public static final TagKey SHULKER_ILLEGAL = TagKey.of(RegistryKeys.ITEM, new Identifier(LibJf.MOD_ID, "shulker_boxes_illegal")); - public static final TagKey OVERPOWERED = TagKey.of(RegistryKeys.ITEM, new Identifier(LibJf.MOD_ID, "overpowered")); + public static final TagKey SHULKER_ILLEGAL = TagKey.of(RegistryKeys.ITEM, Identifier.of(LibJf.MOD_ID, "shulker_boxes_illegal")); + public static final TagKey OVERPOWERED = TagKey.of(RegistryKeys.ITEM, Identifier.of(LibJf.MOD_ID, "overpowered")); } diff --git a/libjf-data-v0/src/main/resources/data/libjf/tags/items/overpowered.json b/libjf-data-v0/src/main/resources/data/libjf/tags/item/overpowered.json similarity index 100% rename from libjf-data-v0/src/main/resources/data/libjf/tags/items/overpowered.json rename to libjf-data-v0/src/main/resources/data/libjf/tags/item/overpowered.json diff --git a/libjf-data-v0/src/main/resources/data/libjf/tags/items/shulker_boxes_illegal.json b/libjf-data-v0/src/main/resources/data/libjf/tags/item/shulker_boxes_illegal.json similarity index 100% rename from libjf-data-v0/src/main/resources/data/libjf/tags/items/shulker_boxes_illegal.json rename to libjf-data-v0/src/main/resources/data/libjf/tags/item/shulker_boxes_illegal.json diff --git a/libjf-data-v0/src/testmod/resources/data/libjf/tags/items/overpowered.json b/libjf-data-v0/src/testmod/resources/data/libjf/tags/item/overpowered.json similarity index 100% rename from libjf-data-v0/src/testmod/resources/data/libjf/tags/items/overpowered.json rename to libjf-data-v0/src/testmod/resources/data/libjf/tags/item/overpowered.json diff --git a/libjf-data-v0/src/testmod/resources/data/libjf/tags/items/shulker_boxes_illegal.json b/libjf-data-v0/src/testmod/resources/data/libjf/tags/item/shulker_boxes_illegal.json similarity index 100% rename from libjf-data-v0/src/testmod/resources/data/libjf/tags/items/shulker_boxes_illegal.json rename to libjf-data-v0/src/testmod/resources/data/libjf/tags/item/shulker_boxes_illegal.json diff --git a/libjf-mainhttp-v0/src/main/java/io/gitlab/jfronny/libjf/mainhttp/impl/mixin/ServerNetworkIo$1Mixin.java b/libjf-mainhttp-v0/src/main/java/io/gitlab/jfronny/libjf/mainhttp/impl/mixin/ServerNetworkIo$1Mixin.java index 38c164c..cf04ef2 100644 --- a/libjf-mainhttp-v0/src/main/java/io/gitlab/jfronny/libjf/mainhttp/impl/mixin/ServerNetworkIo$1Mixin.java +++ b/libjf-mainhttp-v0/src/main/java/io/gitlab/jfronny/libjf/mainhttp/impl/mixin/ServerNetworkIo$1Mixin.java @@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(targets = "net.minecraft.server.ServerNetworkIo$1") public class ServerNetworkIo$1Mixin { - @Inject(method = "initChannel(Lio/netty/channel/Channel;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;addHandlers(Lio/netty/channel/ChannelPipeline;Lnet/minecraft/network/NetworkSide;Lnet/minecraft/network/handler/PacketSizeLogger;)V")) + @Inject(method = "initChannel(Lio/netty/channel/Channel;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;addHandlers(Lio/netty/channel/ChannelPipeline;Lnet/minecraft/network/NetworkSide;ZLnet/minecraft/network/handler/PacketSizeLogger;)V")) private void inject(Channel channel, CallbackInfo ci) { channel.pipeline().addAfter("legacy_query", "libjf_http", new HttpDecoder()); }