From aa8ccd1fd7a8d19bb8ccfcea6ab16ae62bbf4e43 Mon Sep 17 00:00:00 2001 From: Anastasia Chrysanthemum Date: Thu, 1 Jan 2026 05:41:22 +1100 Subject: [PATCH] refactor: Jspecify + cleanup. --- CHANGELOG.md | 3 +- README.md | 12 +- .../main/kotlin/conventions.xplat.gradle.kts | 3 +- .../GreenhouseConfigPlatformHelperFabric.java | 4 +- fabric/src/main/resources/fabric.mod.json | 4 +- gradle/libs.versions.toml | 2 +- .../config/impl/GreenhouseConfigNeoForge.java | 2 +- .../resources/META-INF/neoforge.mods.toml | 2 +- .../config/api/v3/GreenhouseConfigEvents.java | 18 +-- .../api/v3/config/GreenhouseConfigHolder.java | 69 ++++---- .../v3/config/GreenhouseConfigValueCodec.java | 2 +- .../GreenhouseInheritedConfigHolder.java | 9 +- .../api/v3/config/InheritedConfigValue.java | 5 +- ...AbstractGreenhouseConfigHolderBuilder.java | 8 +- .../config/builder/ConfigRecordBuilder.java | 39 +++-- .../GreenhouseConfigHolderBuilder.java | 4 +- ...reenhouseInheritedConfigHolderBuilder.java | 3 +- .../api/v3/config/builder/package-info.java | 4 + .../config/api/v3/config/package-info.java | 4 + .../api/v3/dfu/DataFixerBuilderFunctions.java | 3 +- .../dfu/GreenhouseConfigDataFixerBuilder.java | 15 +- .../fix/GreenhouseConfigRemoveFieldsFix.java | 3 +- .../dfu/fix/GreenhouseConfigSetFieldsFix.java | 11 +- .../config/api/v3/dfu/fix/package-info.java | 4 + .../config/api/v3/dfu/package-info.java | 4 + .../schema/GreenhouseConfigSchemaBuilder.java | 8 +- .../v3/dfu/schema/MapTypeTemplateBuilder.java | 1 - .../api/v3/dfu/schema/package-info.java | 4 + .../api/v3/lang/GreenhouseConfigLang.java | 2 +- .../config/api/v3/lang/package-info.java | 4 + .../config/api/v3/package-info.java | 4 + .../config/api/v3/registry/LateHolder.java | 43 +++-- .../config/api/v3/registry/LateHolderSet.java | 71 ++++---- .../config/api/v3/registry/package-info.java | 4 + .../config/api/v3/util/package-info.java | 4 + .../config/impl/GreenhouseConfigImpl.java | 151 ++++++++++-------- .../client/GreenhouseConfigClientImpl.java | 6 +- .../GreenhouseConfigClientPacketHandlers.java | 2 +- .../impl/client/network/package-info.java | 6 + .../config/impl/client/package-info.java | 6 + .../impl/client/platform/package-info.java | 6 + .../client/platform/side/package-info.java | 6 + .../impl/codec/CommentedConfigCodec.java | 21 +-- .../config/impl/codec/CommonFieldEntry.java | 3 +- .../config/impl/codec/ConfigRecordCodec.java | 21 ++- .../config/impl/codec/FieldEntry.java | 5 +- .../codec/InheritedConfigRecordCodec.java | 25 ++- .../config/impl/codec/LateHolderCodec.java | 15 +- .../config/impl/codec/LateHolderSetCodec.java | 15 +- .../network/ConfigRecordStreamCodec.java | 19 ++- .../network/LateHolderSetStreamCodec.java | 19 ++- .../codec/network/LateHolderStreamCodec.java | 13 +- .../impl/codec/network/StreamFieldEntry.java | 6 +- .../impl/codec/network/package-info.java | 6 + .../config/impl/codec/package-info.java | 6 + .../AbstractGreenhouseConfigHolderImpl.java | 69 +++++--- .../config/GreenhouseConfigHolderImpl.java | 43 +++-- .../GreenhouseInheritedConfigHolderImpl.java | 40 +++-- ...ractGreenhouseConfigHolderBuilderImpl.java | 67 ++++---- .../builder/ConfigRecordBuilderImpl.java | 24 +-- .../GreenhouseConfigHolderBuilderImpl.java | 43 ++--- ...houseInheritedConfigHolderBuilderImpl.java | 44 ++--- .../impl/config/builder/package-info.java | 6 + .../config/impl/config/package-info.java | 6 + .../impl/dfu/GreenhouseConfigSchema.java | 5 +- .../config/impl/dfu/package-info.java | 6 + ...SyncGreenhouseConfigClientboundPacket.java | 19 +-- .../network/clientbound/package-info.java | 6 + .../QueryGreenhouseConfigPacket.java | 7 +- .../network/serverbound/package-info.java | 6 + .../greenhouse/config/impl/package-info.java | 6 + .../config/impl/platform/package-info.java | 6 + .../side/GreenhouseConfigSideHelper.java | 3 +- .../impl/platform/side/package-info.java | 6 + .../impl/server/dedicated/package-info.java | 6 + .../dedicated/platform/package-info.java | 6 + .../dedicated/platform/side/package-info.java | 6 + .../config/impl/server/package-info.java | 6 + .../config/impl/util/ReflectionUtils.java | 20 ++- .../config/impl/util/package-info.java | 6 + .../config/test/GreenhouseConfigTest.java | 17 +- .../client/GreenhouseConfigTestClient.java | 2 +- .../client/gui/GradientRectRenderState.java | 9 +- .../screen/GreenhouseConfigTestScreen.java | 7 +- .../client/screen/widget/ColorWidget.java | 23 ++- .../config/test/command/TestCommand.java | 2 +- .../config/test/config/CommonConfig.java | 24 +-- .../test/config/RecordCodecBuilderConfig.java | 2 +- .../config/test/config/SplitCommonConfig.java | 3 +- .../mixin/client/Accessor_GuiGraphics.java | 1 + .../tags/worldgen/biome/greens.json | 8 +- .../greenhouseconfig_test.mixins.json | 22 +-- 92 files changed, 764 insertions(+), 557 deletions(-) create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/fix/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/schema/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/api/v3/lang/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/api/v3/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/api/v3/registry/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/api/v3/util/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/client/network/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/client/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/client/platform/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/client/platform/side/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/codec/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/config/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/dfu/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/network/clientbound/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/network/serverbound/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/platform/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/platform/side/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/server/dedicated/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/server/dedicated/platform/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/server/dedicated/platform/side/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/server/package-info.java create mode 100644 xplat/src/main/java/lgbt/greenhouse/config/impl/util/package-info.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 05f71d1..c465bac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ -This is the v3.0.0 Release of Greenhouse Config, whihc is additionally the first release to be hosted on Forgejo instead of GitHub. +This is the v3.0.0 Release of Greenhouse Config, which is additionally the first release to be hosted on the Greenhouse Forgejo instead +of GitHub. Greenhouse Config has been rewritten from the ground up to allow for a better experience. ## Changes diff --git a/README.md b/README.md index 88d78d9..a8aaa83 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,14 @@ # Greenhouse Config + ### The most overengineered config library out there! Greenhouse Config is a config library pretty much made for myself (MerchantCalico), and anyone within Greenhouse. -Featuring a rich config builder system, it utilizes Codecs/DFU to write and read config files, as well as being able to data-fix when out of date. +Featuring a rich config builder system, it utilizes Codecs/DFU to write and read config files, as well as being able to +data-fix when out of date. ### Greenhouse Config supports the following configuration languages through [Polyamory](https://git.greenhouse.lgbt/Modding/polyamory)... + - [JSONC](https://jsonc.org/) - [JSON](https://www.json.org/json-en.html)* @@ -13,7 +16,8 @@ Featuring a rich config builder system, it utilizes Codecs/DFU to write and read ### Depending on the Library -When depending on Greenhouse Config, please make sure to include the mod inside your JAR. This is simply to avoid making users have to download a separate dependency that is explicitly not on CurseForge or Modrinth. +When depending on Greenhouse Config, please make sure to include the mod inside your JAR. This is simply to avoid making +users have to download a separate dependency that is explicitly not on CurseForge or Modrinth. ```kotlin repositories { @@ -44,9 +48,11 @@ greenhouse_config_version = 3.0.0+1.21.11 ``` ### Have you seen that one XKCD comic about standards? + Quoted from [kdl.dev](https://kdl.dev/). > Yes. I have. Please stop linking me to it. -Greenhouse Config is not meant to be a standard, it's simply my own methodology for doing configuration which I separated from my own mods to avoid having duplicate code across them. +Greenhouse Config is not meant to be a standard, it's simply my own methodology for doing configuration which I +separated from my own mods to avoid having duplicate code across them. At the end of the day, you should mod with tools you enjoy using, whether it be Greenhouse Config or something else. diff --git a/build_logic/src/main/kotlin/conventions.xplat.gradle.kts b/build_logic/src/main/kotlin/conventions.xplat.gradle.kts index 09597ff..31faf49 100644 --- a/build_logic/src/main/kotlin/conventions.xplat.gradle.kts +++ b/build_logic/src/main/kotlin/conventions.xplat.gradle.kts @@ -100,7 +100,8 @@ tasks { "sources" to "${Properties.FORGEJO_URL}/${Properties.FORGEJO_REPO}" ) - val processResourcesTasks = listOf("processResources", "processTestResources", "processDatagenResources", "processGametestResources") + val processResourcesTasks = + listOf("processResources", "processTestResources", "processDatagenResources", "processGametestResources") withType().matching { processResourcesTasks.contains(it.name) }.configureEach { inputs.properties(expandProps) diff --git a/fabric/src/main/java/lgbt/greenhouse/config/impl/platform/GreenhouseConfigPlatformHelperFabric.java b/fabric/src/main/java/lgbt/greenhouse/config/impl/platform/GreenhouseConfigPlatformHelperFabric.java index 83b51cf..9dae1f3 100644 --- a/fabric/src/main/java/lgbt/greenhouse/config/impl/platform/GreenhouseConfigPlatformHelperFabric.java +++ b/fabric/src/main/java/lgbt/greenhouse/config/impl/platform/GreenhouseConfigPlatformHelperFabric.java @@ -41,14 +41,14 @@ public class GreenhouseConfigPlatformHelperFabric implements GreenhouseConfigPla @Override public void sendSyncConfigPacketClientbound(GreenhouseConfigHolder holder, MinecraftServer server, ServerPlayer player) { - if (!((AbstractGreenhouseConfigHolderImpl)holder).canSync() || !ServerPlayNetworking.canSend(player, SyncGreenhouseConfigClientboundPacket.TYPE) || server.isSingleplayerOwner(player.nameAndId())) + if (!((AbstractGreenhouseConfigHolderImpl) holder).canSync() || !ServerPlayNetworking.canSend(player, SyncGreenhouseConfigClientboundPacket.TYPE) || server.isSingleplayerOwner(player.nameAndId())) return; ServerPlayNetworking.send(player, new SyncGreenhouseConfigClientboundPacket(holder.getModId())); } @Override public boolean sendQueryConfigPacketServerbound(GreenhouseConfigHolder holder) { - if (!((AbstractGreenhouseConfigHolderImpl)holder).canSync() || !ClientPlayNetworking.canSend(QueryGreenhouseConfigPacket.TYPE) || Minecraft.getInstance().hasSingleplayerServer()) + if (!((AbstractGreenhouseConfigHolderImpl) holder).canSync() || !ClientPlayNetworking.canSend(QueryGreenhouseConfigPacket.TYPE) || Minecraft.getInstance().hasSingleplayerServer()) return false; ClientPlayNetworking.send(new QueryGreenhouseConfigPacket(holder)); return true; diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 4573176..90a1ea1 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -37,7 +37,9 @@ }, "custom": { "modmenu": { - "badges": [ "library" ] + "badges": [ + "library" + ] } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8953a69..3fd1256 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,7 +19,7 @@ neoforge = "21.11.6-beta" # Dependencies polyamory = "1.0.0-beta.8" polyamory-dfu = "1.0.0-beta.9" -polyamory-lang-jsonc = "1.0.0-beta.6" +polyamory-lang-jsonc = "1.0.0-beta.8" yumi-mc-foundation = "1.0.0-beta.1+1.21.11" diff --git a/neoforge/src/main/java/lgbt/greenhouse/config/impl/GreenhouseConfigNeoForge.java b/neoforge/src/main/java/lgbt/greenhouse/config/impl/GreenhouseConfigNeoForge.java index b7815af..ff797b9 100644 --- a/neoforge/src/main/java/lgbt/greenhouse/config/impl/GreenhouseConfigNeoForge.java +++ b/neoforge/src/main/java/lgbt/greenhouse/config/impl/GreenhouseConfigNeoForge.java @@ -14,6 +14,6 @@ public class GreenhouseConfigNeoForge { event.registrar("3.0.0") .optional() .commonToClient(SyncGreenhouseConfigClientboundPacket.TYPE, SyncGreenhouseConfigClientboundPacket.STREAM_CODEC) - .playToServer(QueryGreenhouseConfigPacket.TYPE, QueryGreenhouseConfigPacket.STREAM_CODEC, (packet, ctx) -> packet.handle((ServerPlayer)ctx.player())); + .playToServer(QueryGreenhouseConfigPacket.TYPE, QueryGreenhouseConfigPacket.STREAM_CODEC, (packet, ctx) -> packet.handle((ServerPlayer) ctx.player())); } } diff --git a/neoforge/src/test/resources/META-INF/neoforge.mods.toml b/neoforge/src/test/resources/META-INF/neoforge.mods.toml index 24c561e..76de27c 100644 --- a/neoforge/src/test/resources/META-INF/neoforge.mods.toml +++ b/neoforge/src/test/resources/META-INF/neoforge.mods.toml @@ -19,7 +19,7 @@ ${mod_description} config = "${mod_id}_test.mixins.json" [[accessTransformers]] -file="greenhouseconfig_test.cfg" +file = "greenhouseconfig_test.cfg" [[dependencies.${ mod_id }]] modId = "neoforge" diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/GreenhouseConfigEvents.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/GreenhouseConfigEvents.java index 473a2ef..cd620f5 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/GreenhouseConfigEvents.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/GreenhouseConfigEvents.java @@ -7,7 +7,7 @@ import lgbt.greenhouse.config.api.v3.config.GreenhouseConfigHolder; import net.minecraft.core.RegistryAccess; import net.minecraft.resources.Identifier; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.HashMap; @@ -25,32 +25,32 @@ public class GreenhouseConfigEvents { public static void onConfigLoaded(GreenhouseConfigHolder holder, ConfigLoadCallback callback) { //noinspection unchecked - CONFIG_LOADED_EVENTS.computeIfAbsent(holder, CONFIG_LOADED::forContext).register((ConfigLoadCallback)callback); + CONFIG_LOADED_EVENTS.computeIfAbsent(holder, CONFIG_LOADED::forContext).register((ConfigLoadCallback) callback); } public static void onConfigLoaded(Identifier phase, GreenhouseConfigHolder holder, ConfigLoadCallback callback) { //noinspection unchecked - CONFIG_LOADED_EVENTS.computeIfAbsent(holder, CONFIG_LOADED::forContext).register(phase, (ConfigLoadCallback)callback); + CONFIG_LOADED_EVENTS.computeIfAbsent(holder, CONFIG_LOADED::forContext).register(phase, (ConfigLoadCallback) callback); } public static void onRegistryPopulated(GreenhouseConfigHolder holder, RegistryPopulationCallback callback) { //noinspection unchecked - REGISTRY_POPULATION_EVENTS.computeIfAbsent(holder, REGISTRY_POPULATED::forContext).register((RegistryPopulationCallback)callback); + REGISTRY_POPULATION_EVENTS.computeIfAbsent(holder, REGISTRY_POPULATED::forContext).register((RegistryPopulationCallback) callback); } public static void onRegistryPopulated(Identifier phase, GreenhouseConfigHolder holder, RegistryPopulationCallback callback) { //noinspection unchecked - REGISTRY_POPULATION_EVENTS.computeIfAbsent(holder, REGISTRY_POPULATED::forContext).register(phase, (RegistryPopulationCallback)callback); + REGISTRY_POPULATION_EVENTS.computeIfAbsent(holder, REGISTRY_POPULATED::forContext).register(phase, (RegistryPopulationCallback) callback); } public static void onRegistryDepopulated(GreenhouseConfigHolder holder, RegistryDepopulationCallback callback) { //noinspection unchecked - REGISTRY_DEPOPULATION_EVENTS.computeIfAbsent(holder, REGISTRY_DEPOPULATED::forContext).register((RegistryDepopulationCallback)callback); + REGISTRY_DEPOPULATION_EVENTS.computeIfAbsent(holder, REGISTRY_DEPOPULATED::forContext).register((RegistryDepopulationCallback) callback); } public static void onRegistryDepopulated(Identifier phase, GreenhouseConfigHolder holder, RegistryDepopulationCallback callback) { //noinspection unchecked - REGISTRY_DEPOPULATION_EVENTS.computeIfAbsent(holder, REGISTRY_DEPOPULATED::forContext).register(phase, (RegistryDepopulationCallback)callback); + REGISTRY_DEPOPULATION_EVENTS.computeIfAbsent(holder, REGISTRY_DEPOPULATED::forContext).register(phase, (RegistryDepopulationCallback) callback); } @SuppressWarnings("unchecked") @@ -69,7 +69,7 @@ public class GreenhouseConfigEvents { if (REGISTRY_POPULATION_EVENTS.containsKey(holder)) { REGISTRY_POPULATION_EVENTS.get(holder) .invoker() - .onRegistryPopulation((GreenhouseConfigHolder)holder, registries); + .onRegistryPopulation((GreenhouseConfigHolder) holder, registries); } } @@ -79,7 +79,7 @@ public class GreenhouseConfigEvents { if (REGISTRY_DEPOPULATION_EVENTS.containsKey(holder)) { REGISTRY_DEPOPULATION_EVENTS.get(holder) .invoker() - .onRegistryDepopulation((GreenhouseConfigHolder)holder); + .onRegistryDepopulation((GreenhouseConfigHolder) holder); } } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/GreenhouseConfigHolder.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/GreenhouseConfigHolder.java index ea808a0..010bcfe 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/GreenhouseConfigHolder.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/GreenhouseConfigHolder.java @@ -11,12 +11,13 @@ import net.minecraft.core.RegistryAccess; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.function.Consumer; /** * An interface for a Greenhouse Config. + * * @param */ @ApiStatus.NonExtendable @@ -28,14 +29,13 @@ public interface GreenhouseConfigHolder { *

* Config langs can be found in the lgbt.greenhouse.config.api.v3.lang package. * - * @param clazz The config class. - * @param modId The mod ID to name the config file after. - * @param configLang The config lang to use for this config. Determines how the file is stored. - * @param side The side to register the config on. + * @param clazz The config class. + * @param modId The mod ID to name the config file after. + * @param configLang The config lang to use for this config. Determines how the file is stored. + * @param side The side to register the config on. * @param configBuilderConsumer A consumer used for configuring the config builder. + * @param The config class. * @return The registered config holder. - * @param The config class. - * * @see GreenhouseConfigSide */ static GreenhouseConfigHolder register(Class clazz, @@ -44,7 +44,8 @@ public interface GreenhouseConfigHolder { GreenhouseConfigLang configLang, GreenhouseConfigSide side, Consumer> configBuilderConsumer) { - return register(clazz, modId, schemaVersion, configLang, side, configBuilderConsumer, fixerBuilder -> {}); + return register(clazz, modId, schemaVersion, configLang, side, configBuilderConsumer, fixerBuilder -> { + }); } /** @@ -54,18 +55,17 @@ public interface GreenhouseConfigHolder { *

* Config langs can be found in the lgbt.greenhouse.config.api.v3.lang package. * - * @param clazz The config class. - * @param modId The mod ID to name the config file after. - * @param schemaVersion The schema version of this config. - * @param configLang The config lang to use for this config. Determines how the file is stored. - * @param side The side to register the config on. + * @param clazz The config class. + * @param modId The mod ID to name the config file after. + * @param schemaVersion The schema version of this config. + * @param configLang The config lang to use for this config. Determines how the file is stored. + * @param side The side to register the config on. * @param configBuilderConsumer A consumer used for configuring the config builder. - * @param fixerBuilderConsumer A consumer used for configuring the data fixer builder. + * @param fixerBuilderConsumer A consumer used for configuring the data fixer builder. + * @param The config class. * @return The registered config holder. - * @param The config class. - * - * @see GreenhouseConfigSide * @throws IllegalArgumentException If the schema version is less than 1. + * @see GreenhouseConfigSide */ static GreenhouseConfigHolder register(Class clazz, String modId, @@ -74,7 +74,7 @@ public interface GreenhouseConfigHolder { GreenhouseConfigSide side, Consumer> configBuilderConsumer, Consumer fixerBuilderConsumer) { - GreenhouseConfigHolderBuilderImpl configBuilder = (GreenhouseConfigHolderBuilderImpl)builder(clazz, modId, schemaVersion, configLang, configBuilderConsumer, fixerBuilderConsumer); + GreenhouseConfigHolderBuilderImpl configBuilder = (GreenhouseConfigHolderBuilderImpl) builder(clazz, modId, schemaVersion, configLang, configBuilderConsumer, fixerBuilderConsumer); return GreenhouseConfigImpl.registerConfig(configBuilder.build(), side); } @@ -86,36 +86,35 @@ public interface GreenhouseConfigHolder { *

* Config langs can be found in the lgbt.greenhouse.config.api.v3.lang package. * - * @param clazz The config class. - * @param modId The mod ID to name the config file after. - * @param configLang The config lang to use for this config. Determines how the file is stored. + * @param clazz The config class. + * @param modId The mod ID to name the config file after. + * @param configLang The config lang to use for this config. Determines how the file is stored. * @param configBuilderConsumer A consumer used for configuring the config builder. + * @param The config class. * @return The registered config holder. - * @param The config class. - * * @see GreenhouseConfigSide */ static GreenhouseConfigHolderBuilder builder(Class clazz, - String modId, + String modId, int schemaVersion, - GreenhouseConfigLang configLang, - Consumer> configBuilderConsumer) { - return builder(clazz, modId, schemaVersion, configLang, configBuilderConsumer, fixerBuilder -> {}); + GreenhouseConfigLang configLang, + Consumer> configBuilderConsumer) { + return builder(clazz, modId, schemaVersion, configLang, configBuilderConsumer, fixerBuilder -> { + }); } /** * Creates a config builder with an included data fixer. * Useful for creating a base config for {@link lgbt.greenhouse.config.api.v3.config.GreenhouseInheritedConfigHolder} in the case of having unique values for both the dedicated server impl and client impl. * - * @param clazz The config class. - * @param modId The mod ID to name the config file after. - * @param schemaVersion The schema version of this config. - * @param configLang The config lang to use for this config. Determines how the file is stored. + * @param clazz The config class. + * @param modId The mod ID to name the config file after. + * @param schemaVersion The schema version of this config. + * @param configLang The config lang to use for this config. Determines how the file is stored. * @param configBuilderConsumer A consumer used for configuring the config builder. - * @param fixerBuilderConsumer A consumer used for configuring the data fixer builder. + * @param fixerBuilderConsumer A consumer used for configuring the data fixer builder. + * @param The config class. * @return The registered config holder. - * @param The config class. - * * @throws IllegalArgumentException If the schema version is less than 1. */ static GreenhouseConfigHolderBuilder builder(Class clazz, @@ -164,7 +163,7 @@ public interface GreenhouseConfigHolder { /** * Saves a new config value, immediately causing a reload after. * - * @param config The config value to save. + * @param config The config value to save. * @param registries The {@link RegistryAccess} for use within reloading related events. */ default void save(Config config, @Nullable RegistryAccess registries) { diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/GreenhouseConfigValueCodec.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/GreenhouseConfigValueCodec.java index 9ea1628..116ee12 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/GreenhouseConfigValueCodec.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/GreenhouseConfigValueCodec.java @@ -1,7 +1,7 @@ package lgbt.greenhouse.config.api.v3.config; import com.mojang.serialization.*; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.function.Supplier; import java.util.stream.Stream; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/GreenhouseInheritedConfigHolder.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/GreenhouseInheritedConfigHolder.java index 36acf8f..07711ff 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/GreenhouseInheritedConfigHolder.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/GreenhouseInheritedConfigHolder.java @@ -15,6 +15,7 @@ import java.util.function.Consumer; /** * An interface for a Greenhouse Config with inherited values from a common config. + * * @param > */ @ApiStatus.NonExtendable @@ -25,7 +26,8 @@ public interface GreenhouseInheritedConfigHolder extends Green GreenhouseConfigLang configLang, GreenhouseConfigSide side, Consumer> builderConsumer) { - return register(clazz, inheritedConfig, schemaVersion, configLang, side, builderConsumer, fixerBuilder -> {}); + return register(clazz, inheritedConfig, schemaVersion, configLang, side, builderConsumer, fixerBuilder -> { + }); } static GreenhouseInheritedConfigHolder register(Class clazz, @@ -47,7 +49,8 @@ public interface GreenhouseInheritedConfigHolder extends Green GreenhouseConfigLang configLang, GreenhouseConfigSide side, Consumer> builderConsumer) { - return register(clazz, inheritedConfig, schemaVersion, configLang, side, builderConsumer, fixerBuilder -> {}); + return register(clazz, inheritedConfig, schemaVersion, configLang, side, builderConsumer, fixerBuilder -> { + }); } static GreenhouseInheritedConfigHolder register(Class clazz, @@ -58,7 +61,7 @@ public interface GreenhouseInheritedConfigHolder extends Green Consumer> builderConsumer, Consumer dataFixerConsumer) { - GreenhouseConfigDataFixerBuilder fixerBuilder = ((GreenhouseConfigHolderBuilderImpl)inheritedConfig).getFixerBuilder().copy(); + GreenhouseConfigDataFixerBuilder fixerBuilder = ((GreenhouseConfigHolderBuilderImpl) inheritedConfig).getFixerBuilder().copy(); dataFixerConsumer.accept(fixerBuilder); GreenhouseInheritedConfigHolderBuilderImpl configBuilder = new GreenhouseInheritedConfigHolderBuilderImpl<>(inheritedConfig, clazz, configLang, fixerBuilder, schemaVersion); diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/InheritedConfigValue.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/InheritedConfigValue.java index d045cf3..3632bde 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/InheritedConfigValue.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/InheritedConfigValue.java @@ -1,5 +1,4 @@ package lgbt.greenhouse.config.api.v3.config; -import org.jetbrains.annotations.NotNull; - -public record InheritedConfigValue(@NotNull Inherited inherited, @NotNull Extra extra) {} +public record InheritedConfigValue(Inherited inherited, Extra extra) { +} diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/AbstractGreenhouseConfigHolderBuilder.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/AbstractGreenhouseConfigHolderBuilder.java index b1bafa1..b1a3f59 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/AbstractGreenhouseConfigHolderBuilder.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/AbstractGreenhouseConfigHolderBuilder.java @@ -13,10 +13,10 @@ import java.util.function.Consumer; /** * A base {@link GreenhouseConfigHolder} builder interface. * - * @param Any local data for this config, resolved through loading a file. + * @param Any local data for this config, resolved through loading a file. * @param Any networkable data for this config, resolved when joining a server on the client. - * @param The config class. - * @param The implementation of this builder. Should always return this class. + * @param The config class. + * @param The implementation of this builder. Should always return this class. */ @ApiStatus.NonExtendable public interface AbstractGreenhouseConfigHolderBuilder> extends ConfigRecordBuilder { @@ -68,7 +68,6 @@ public interface AbstractGreenhouseConfigHolderBuilder codec); @@ -79,5 +78,6 @@ public interface AbstractGreenhouseConfigHolderBuilder Impl withRegistryHolder(String key, @Nullable String comments, - ResourceKey> registry, - ResourceKey<@NotNull T> defaultValue, - Function> getter) { + ResourceKey> registry, + ResourceKey defaultValue, + Function> getter) { LateHolder holder = LateHolder.create(defaultValue); - GreenhouseConfigImpl.lateHolderRegistryCallback(getRootConfig(), getModId(), rootConfig -> (LateHolder)getter.apply(getter().apply(rootConfig))); + GreenhouseConfigImpl.lateHolderRegistryCallback(getRootConfig(), getModId(), rootConfig -> (LateHolder) getter.apply(getter().apply(rootConfig))); return withValue(key, comments, LateHolder.codec(registry), holder, getter); } default Impl withRegistryHolders(String key, @Nullable String comments, - ResourceKey> registry, - Function> getter, + ResourceKey> registry, + Function> getter, Consumer> consumer) { LateHolderSet.Builder builder = LateHolderSet.builder(registry); consumer.accept(builder); - GreenhouseConfigImpl.lateHolderSetRegistryCallback(getRootConfig(), getModId(), rootConfig -> (LateHolderSet)getter.apply(getter().apply(rootConfig))); + GreenhouseConfigImpl.lateHolderSetRegistryCallback(getRootConfig(), getModId(), rootConfig -> (LateHolderSet) getter.apply(getter().apply(rootConfig))); LateHolderSet holderSet = builder.build(); return withValue(key, comments, LateHolderSet.codec(registry), @@ -75,17 +74,17 @@ public interface ConfigRecordBuilder Impl withNetworkSerializedValue(String key, @Nullable String comments, Codec codec, - StreamCodec streamCodec, + StreamCodec streamCodec, V defaultValue, Function getter); default Impl withNetworkSerializedRegistryHolder(String key, @Nullable String comments, - ResourceKey> registry, - ResourceKey<@NotNull T> defaultValue, - Function> getter) { + ResourceKey> registry, + ResourceKey defaultValue, + Function> getter) { LateHolder holder = LateHolder.create(defaultValue); - GreenhouseConfigImpl.lateHolderRegistryCallback(getRootConfig(), getModId(), rootConfig -> (LateHolder)getter.apply(getter().apply(rootConfig))); + GreenhouseConfigImpl.lateHolderRegistryCallback(getRootConfig(), getModId(), rootConfig -> (LateHolder) getter.apply(getter().apply(rootConfig))); return withNetworkSerializedValue(key, comments, LateHolder.codec(registry), LateHolder.streamCodec(registry), @@ -94,25 +93,25 @@ public interface ConfigRecordBuilder Impl withNetworkSerializedRegistryHolders(String key, @Nullable String comments, - ResourceKey> registry, - Function> getter, + ResourceKey> registry, + Function> getter, Consumer> consumer) { LateHolderSet.Builder builder = LateHolderSet.builder(registry); consumer.accept(builder); - GreenhouseConfigImpl.lateHolderSetRegistryCallback(getRootConfig(), getModId(), rootConfig -> (LateHolderSet)getter.apply(getter().apply(rootConfig))); + GreenhouseConfigImpl.lateHolderSetRegistryCallback(getRootConfig(), getModId(), rootConfig -> (LateHolderSet) getter.apply(getter().apply(rootConfig))); return withNetworkSerializedValue(key, comments, LateHolderSet.codec(registry), LateHolderSet.streamCodec(registry), builder.build(), getter); } - @NotNull + String getModId(); - @NotNull + AbstractGreenhouseConfigHolderBuilder getRootConfig(); - @NotNull + Function getter(); boolean allowNetworkSerialization(); diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/GreenhouseConfigHolderBuilder.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/GreenhouseConfigHolderBuilder.java index ce793b4..c1afa38 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/GreenhouseConfigHolderBuilder.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/GreenhouseConfigHolderBuilder.java @@ -5,7 +5,6 @@ import lgbt.greenhouse.config.api.v3.config.GreenhouseConfigValueCodec; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; /** * @@ -19,8 +18,7 @@ public interface GreenhouseConfigHolderBuilder extends AbstractGreenhous * * @param streamCodec A stream codec for networkable data. * @return This builder. - * * @see GreenhouseConfigValueCodec */ - GreenhouseConfigHolderBuilder directNetworkSerializable(Codec codec, StreamCodec<@NotNull FriendlyByteBuf, @NotNull Config> streamCodec); + GreenhouseConfigHolderBuilder directNetworkSerializable(Codec codec, StreamCodec streamCodec); } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/GreenhouseInheritedConfigHolderBuilder.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/GreenhouseInheritedConfigHolderBuilder.java index 3ab55f1..e44981a 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/GreenhouseInheritedConfigHolderBuilder.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/GreenhouseInheritedConfigHolderBuilder.java @@ -10,4 +10,5 @@ import org.jetbrains.annotations.ApiStatus; * @see AbstractGreenhouseConfigHolderBuilder */ @ApiStatus.NonExtendable -public interface GreenhouseInheritedConfigHolderBuilder extends AbstractGreenhouseConfigHolderBuilder, GreenhouseInheritedConfigHolderBuilder> {} +public interface GreenhouseInheritedConfigHolderBuilder extends AbstractGreenhouseConfigHolderBuilder, GreenhouseInheritedConfigHolderBuilder> { +} diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/package-info.java new file mode 100644 index 0000000..2782b4b --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/builder/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package lgbt.greenhouse.config.api.v3.config.builder; + +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/package-info.java new file mode 100644 index 0000000..a00bf6f --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/config/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package lgbt.greenhouse.config.api.v3.config; + +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/DataFixerBuilderFunctions.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/DataFixerBuilderFunctions.java index e001582..f751cdc 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/DataFixerBuilderFunctions.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/DataFixerBuilderFunctions.java @@ -11,7 +11,8 @@ import lgbt.greenhouse.config.api.v3.dfu.schema.GreenhouseConfigSchemaBuilder; */ public record DataFixerBuilderFunctions(Schema schemaConsumer, Fix fixFunction) { public static DataFixerBuilderFunctions sameSchema(Fix fixFunction) { - return create(builder -> {}, fixFunction); + return create(builder -> { + }, fixFunction); } public static DataFixerBuilderFunctions create(Schema schemaConsumer, Fix fixFunction) { diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/GreenhouseConfigDataFixerBuilder.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/GreenhouseConfigDataFixerBuilder.java index 7d8eee0..c5c6332 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/GreenhouseConfigDataFixerBuilder.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/GreenhouseConfigDataFixerBuilder.java @@ -3,14 +3,17 @@ package lgbt.greenhouse.config.api.v3.dfu; import com.mojang.datafixers.DataFixer; import com.mojang.datafixers.DataFixerBuilder; import com.mojang.datafixers.schemas.Schema; -import it.unimi.dsi.fastutil.ints.*; +import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectSortedMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectSortedMaps; +import it.unimi.dsi.fastutil.ints.IntIntPair; import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import lgbt.greenhouse.config.api.v3.dfu.schema.GreenhouseConfigSchemaBuilder; import lgbt.greenhouse.config.api.v3.lang.GreenhouseConfigLang; import lgbt.greenhouse.config.impl.GreenhouseConfigConstants; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class GreenhouseConfigDataFixerBuilder { private final int dataVersion; @@ -18,7 +21,7 @@ public class GreenhouseConfigDataFixerBuilder { private final Object2ObjectMap schemas = new Object2ObjectArrayMap<>(); private final Object2ObjectMap fixes = new Object2ObjectArrayMap<>(); - private final Int2ObjectMap> previousLangs = new Int2ObjectArrayMap<>(); + private final Int2ObjectSortedMap> previousLangs = new Int2ObjectAVLTreeMap<>(); private DataFixer built = null; @@ -108,11 +111,11 @@ public class GreenhouseConfigDataFixerBuilder { } @ApiStatus.Internal - public Int2ObjectMap> getPreviousLangs() { + public Int2ObjectSortedMap> getPreviousLangs() { if (previousLangs.isEmpty()) { - return Int2ObjectMaps.emptyMap(); + return Int2ObjectSortedMaps.emptyMap(); } - return Int2ObjectMaps.unmodifiable(previousLangs); + return Int2ObjectSortedMaps.unmodifiable(previousLangs); } @ApiStatus.Internal diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/fix/GreenhouseConfigRemoveFieldsFix.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/fix/GreenhouseConfigRemoveFieldsFix.java index 2c1982f..133364e 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/fix/GreenhouseConfigRemoveFieldsFix.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/fix/GreenhouseConfigRemoveFieldsFix.java @@ -30,9 +30,8 @@ public class GreenhouseConfigRemoveFieldsFix extends DataFix { * * * @param outputSchema The output schema, should be the value within the function in which you created this fix from. - * @param toRemove A collection of values to remove. Record keys are separated by . + * @param toRemove A collection of values to remove. Record keys are separated by . * @return The configured data fix. - * * @see Dynamic */ public static GreenhouseConfigRemoveFieldsFix create(Schema outputSchema, String... toRemove) { diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/fix/GreenhouseConfigSetFieldsFix.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/fix/GreenhouseConfigSetFieldsFix.java index 61e6b5c..0219b0e 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/fix/GreenhouseConfigSetFieldsFix.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/fix/GreenhouseConfigSetFieldsFix.java @@ -6,7 +6,9 @@ import com.mojang.datafixers.schemas.Schema; import com.mojang.serialization.Dynamic; import lgbt.greenhouse.config.api.v3.dfu.GreenhouseConfigDFUTypeReferences; -import java.util.*; +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.Map; import java.util.function.Function; /** @@ -42,11 +44,10 @@ public class GreenhouseConfigSetFieldsFix extends DataFix { * * * @param outputSchema The output schema, should be the value within the function in which you created this fix from. - * @param newValues A collection of values to add. Record keys are separated by . - *

- * The new value function will operate on either a previously existing {@link Dynamic} value at the specified path, or an empty map if not present. + * @param newValues A collection of values to add. Record keys are separated by . + *

+ * The new value function will operate on either a previously existing {@link Dynamic} value at the specified path, or an empty map if not present. * @return The configured data fix. - * * @see Dynamic */ public static GreenhouseConfigSetFieldsFix create(Schema outputSchema, Map, Dynamic>> newValues) { diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/fix/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/fix/package-info.java new file mode 100644 index 0000000..e79700f --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/fix/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package lgbt.greenhouse.config.api.v3.dfu.fix; + +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/package-info.java new file mode 100644 index 0000000..f0f9766 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package lgbt.greenhouse.config.api.v3.dfu; + +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/schema/GreenhouseConfigSchemaBuilder.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/schema/GreenhouseConfigSchemaBuilder.java index a7e984a..4b9a9fd 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/schema/GreenhouseConfigSchemaBuilder.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/schema/GreenhouseConfigSchemaBuilder.java @@ -4,7 +4,10 @@ import com.mojang.datafixers.schemas.Schema; import lgbt.greenhouse.config.impl.dfu.GreenhouseConfigSchema; import org.jetbrains.annotations.ApiStatus; -import java.util.*; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; import java.util.function.BiFunction; import java.util.stream.Collectors; @@ -12,7 +15,8 @@ public class GreenhouseConfigSchemaBuilder { private final Map fields = new LinkedHashMap<>(); private final Set excludedFields = new LinkedHashSet<>(); - public GreenhouseConfigSchemaBuilder() {} + public GreenhouseConfigSchemaBuilder() { + } public GreenhouseConfigSchemaBuilder withField(String key, TypeTemplateBuilder type) { fields.put(key, type); diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/schema/MapTypeTemplateBuilder.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/schema/MapTypeTemplateBuilder.java index 1262bf7..90707fe 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/schema/MapTypeTemplateBuilder.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/schema/MapTypeTemplateBuilder.java @@ -15,7 +15,6 @@ public class MapTypeTemplateBuilder implements TypeTemplateBuilder { private final Set excludedFields = new HashSet<>(); - public MapTypeTemplateBuilder withField(String key, TypeTemplateBuilder value) { fields.put(key, value); return this; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/schema/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/schema/package-info.java new file mode 100644 index 0000000..51d1337 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/dfu/schema/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package lgbt.greenhouse.config.api.v3.dfu.schema; + +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/lang/GreenhouseConfigLang.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/lang/GreenhouseConfigLang.java index 5f80f17..d414706 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/lang/GreenhouseConfigLang.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/lang/GreenhouseConfigLang.java @@ -29,7 +29,7 @@ public interface GreenhouseConfigLang { /** * Writes a config object to a writer. * - * @param writer The writer to write to. + * @param writer The writer to write to. * @param element The element to write. * @throws IOException If an error occurs while writing the config object to the writer. */ diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/lang/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/lang/package-info.java new file mode 100644 index 0000000..72a726e --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/lang/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package lgbt.greenhouse.config.api.v3.lang; + +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/package-info.java new file mode 100644 index 0000000..47be7c8 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package lgbt.greenhouse.config.api.v3; + +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/registry/LateHolder.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/registry/LateHolder.java index 7aaf425..adc613d 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/registry/LateHolder.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/registry/LateHolder.java @@ -14,7 +14,6 @@ import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.Identifier; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagKey; -import org.jetbrains.annotations.NotNull; import java.util.Optional; import java.util.function.Consumer; @@ -26,11 +25,11 @@ import java.util.stream.Stream; * * @param The type of objects inside this HolderSet. */ -public class LateHolder implements Holder<@NotNull T>, Late { - private final ResourceKey<@NotNull T> key; - private Holder<@NotNull T> holder; +public class LateHolder implements Holder, Late { + private final ResourceKey key; + private Holder holder; - public LateHolder(ResourceKey<@NotNull T> key) { + public LateHolder(ResourceKey key) { this.key = key; } @@ -41,7 +40,7 @@ public class LateHolder implements Holder<@NotNull T>, Late { * @param The type of objects within the LateHolder. * @return A {@link LateHolder} codec. */ - public static Codec> codec(ResourceKey> registry) { + public static Codec> codec(ResourceKey> registry) { return new LateHolderCodec<>(registry); } @@ -52,7 +51,7 @@ public class LateHolder implements Holder<@NotNull T>, Late { * @param The type of objects within the LateHolder. * @return A {@link LateHolder} stream/packet codec. */ - public static StreamCodec<@NotNull ByteBuf, @NotNull Holder<@NotNull T>> streamCodec(ResourceKey> registry) { + public static StreamCodec> streamCodec(ResourceKey> registry) { return new LateHolderStreamCodec<>(registry); } @@ -63,7 +62,7 @@ public class LateHolder implements Holder<@NotNull T>, Late { * @param The type of the object within this LateHolder. * @return A LateHolder pointing towards a specific resource. */ - public static LateHolder create(ResourceKey<@NotNull T> key) { + public static LateHolder create(ResourceKey key) { return new LateHolder<>(key); } @@ -101,7 +100,7 @@ public class LateHolder implements Holder<@NotNull T>, Late { } @Override - public boolean is(@NotNull Identifier id) { + public boolean is(Identifier id) { if (!isBound()) { return false; } @@ -109,7 +108,7 @@ public class LateHolder implements Holder<@NotNull T>, Late { } @Override - public boolean is(@NotNull ResourceKey<@NotNull T> key) { + public boolean is(ResourceKey key) { if (!isBound()) { return false; } @@ -117,7 +116,7 @@ public class LateHolder implements Holder<@NotNull T>, Late { } @Override - public boolean is(@NotNull Predicate> predicate) { + public boolean is(Predicate> predicate) { if (!isBound()) { return false; } @@ -125,7 +124,7 @@ public class LateHolder implements Holder<@NotNull T>, Late { } @Override - public boolean is(@NotNull TagKey<@NotNull T> tagKey) { + public boolean is(TagKey tagKey) { if (!isBound()) { return false; } @@ -133,7 +132,7 @@ public class LateHolder implements Holder<@NotNull T>, Late { } @Override - public boolean is(@NotNull Holder<@NotNull T> holder) { + public boolean is(Holder holder) { if (!isBound()) { return false; } @@ -141,41 +140,41 @@ public class LateHolder implements Holder<@NotNull T>, Late { return holder.is(holder); } - @NotNull + @Override - public Stream> tags() { + public Stream> tags() { if (!isBound()) { return Stream.empty(); } return holder.tags(); } - @NotNull + @Override - public Either, T> unwrap() { + public Either, T> unwrap() { return Either.left(key); } - @NotNull + @Override - public Optional> unwrapKey() { + public Optional> unwrapKey() { return Optional.of(key); } @Override - public @NotNull Kind kind() { + public Kind kind() { return Kind.REFERENCE; } @Override - public boolean canSerializeIn(@NotNull HolderOwner<@NotNull T> holderOwner) { + public boolean canSerializeIn(HolderOwner holderOwner) { return true; } /** * The resource key of the object inside this holder. */ - public ResourceKey<@NotNull T> key() { + public ResourceKey key() { return key; } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/registry/LateHolderSet.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/registry/LateHolderSet.java index fca8a70..92963d3 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/registry/LateHolderSet.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/registry/LateHolderSet.java @@ -14,12 +14,9 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagKey; import net.minecraft.util.RandomSource; import net.minecraft.util.Util; -import org.apache.commons.compress.utils.Lists; -import org.jetbrains.annotations.NotNull; import java.util.*; import java.util.function.Consumer; -import java.util.function.Function; import java.util.stream.Stream; /** @@ -27,13 +24,13 @@ import java.util.stream.Stream; * * @param The class of the objects to be stored within this holderset. */ -public class LateHolderSet implements Late, HolderSet<@NotNull T> { - private final ResourceKey> registry; - private final List<@NotNull Either, ResourceKey<@NotNull T>>> values; - private List> holders; +public class LateHolderSet implements Late, HolderSet { + private final ResourceKey> registry; + private final List, ResourceKey>> values; + private List> holders; - private LateHolderSet(ResourceKey> registry, - List<@NotNull Either, ResourceKey<@NotNull T>>> values) { + private LateHolderSet(ResourceKey> registry, + List, ResourceKey>> values) { this.registry = registry; this.values = values; } @@ -45,7 +42,7 @@ public class LateHolderSet implements Late, HolderSet<@NotNull T> { * @param The type of objects within the LateHolderSet. * @return A {@link LateHolderSet} codec. */ - public static Codec> codec(ResourceKey> registry) { + public static Codec> codec(ResourceKey> registry) { return new LateHolderSetCodec<>(registry); } @@ -56,7 +53,7 @@ public class LateHolderSet implements Late, HolderSet<@NotNull T> { * @param The type of objects within the LateHolderSet. * @return A {@link LateHolderSet} stream/packet codec. */ - public static StreamCodec<@NotNull ByteBuf, @NotNull HolderSet<@NotNull T>> streamCodec(final ResourceKey> registry) { + public static StreamCodec> streamCodec(final ResourceKey> registry) { return new LateHolderSetStreamCodec<>(registry); } @@ -67,13 +64,13 @@ public class LateHolderSet implements Late, HolderSet<@NotNull T> { * @param The type of objects within the LateHolderSet. * @return A LateHolderSet builder. */ - public static Builder builder(final ResourceKey> registry) { + public static Builder builder(final ResourceKey> registry) { return new Builder<>(registry); } @Override public void populate(HolderLookup.Provider registries, Consumer onException) { - ImmutableList.Builder<@NotNull Holder<@NotNull T>> immutableList = ImmutableList.builder(); + ImmutableList.Builder> immutableList = ImmutableList.builder(); var optionalRegistry = registries.lookup(registry); if (optionalRegistry.isEmpty()) { @@ -84,13 +81,13 @@ public class LateHolderSet implements Late, HolderSet<@NotNull T> { List errors = new ArrayList<>(); for (var value : values) { - DataResult>> holders = value.map( + DataResult>> holders = value.map( tagKey -> registry.get(tagKey) .map(holderSet -> DataResult.success(holderSet.stream().toList())) .orElse(DataResult.error(() -> "\t - Failed to find tag '" + tagKey.location() + "' in registry '" + tagKey.registry() + "'")), resourceKey -> registry.get(resourceKey) - .map(holder -> DataResult.success(List.of((Holder<@NotNull T>)holder))) - .orElse(DataResult.error(() -> "\t - Failed to find value '" + resourceKey.identifier() + "' in registry '" + resourceKey.registry() +"'")) + .map(holder -> DataResult.success(List.of((Holder) holder))) + .orElse(DataResult.error(() -> "\t - Failed to find value '" + resourceKey.identifier() + "' in registry '" + resourceKey.registry() + "'")) ); if (holders.isError()) { errors.add(holders.error().orElseThrow().message()); @@ -110,8 +107,8 @@ public class LateHolderSet implements Late, HolderSet<@NotNull T> { } @Override - @NotNull - public Stream> stream() { + + public Stream> stream() { if (!isBound()) { return Stream.empty(); } @@ -129,23 +126,23 @@ public class LateHolderSet implements Late, HolderSet<@NotNull T> { } @Override - @NotNull - public Either, List>> unwrap() { + + public Either, List>> unwrap() { if (!isBound()) { throw new NullPointerException("LateHolderSet is not bound"); } return Either.right(holders); } - @NotNull + @Override - public Optional> getRandomElement(@NotNull RandomSource randomSource) { + public Optional> getRandomElement(RandomSource randomSource) { return Util.getRandomSafe(holders, randomSource); } - @NotNull + @Override - public Holder<@NotNull T> get(int i) { + public Holder get(int i) { if (!isBound()) { throw new NullPointerException("LateHolderSet is not bound"); } @@ -153,7 +150,7 @@ public class LateHolderSet implements Late, HolderSet<@NotNull T> { } @Override - public boolean contains(@NotNull Holder<@NotNull T> holder) { + public boolean contains(Holder holder) { if (!isBound()) { return false; } @@ -161,45 +158,45 @@ public class LateHolderSet implements Late, HolderSet<@NotNull T> { } @Override - public boolean canSerializeIn(@NotNull HolderOwner<@NotNull T> holderOwner) { + public boolean canSerializeIn(HolderOwner holderOwner) { return true; } - @NotNull + @Override - public Optional> unwrapKey() { + public Optional> unwrapKey() { return Optional.empty(); } @Override - public @NotNull Iterator> iterator() { + public Iterator> iterator() { if (!isBound()) { return Collections.emptyIterator(); } return holders.iterator(); } - public List<@NotNull Either, ResourceKey<@NotNull T>>> getKeys() { + public List, ResourceKey>> getKeys() { return values; } public static class Builder { - private final ResourceKey> registry; - private final ImmutableList.Builder<@NotNull Either, ResourceKey<@NotNull T>>> listBuilder = ImmutableList.builder(); + private final ResourceKey> registry; + private final ImmutableList.Builder, ResourceKey>> listBuilder = ImmutableList.builder(); - public Builder(ResourceKey> registry) { + public Builder(ResourceKey> registry) { this.registry = registry; } @SafeVarargs - public final Builder addElements(ResourceKey<@NotNull T>... keys) { - listBuilder.addAll(Arrays.stream(keys).map(Either::, ResourceKey<@NotNull T>>right).toList()); + public final Builder addElements(ResourceKey... keys) { + listBuilder.addAll(Arrays.stream(keys).map(Either::, ResourceKey>right).toList()); return this; } @SafeVarargs - public final Builder addTags(TagKey<@NotNull T>... tags) { - listBuilder.addAll(Arrays.stream(tags).map(Either::, ResourceKey<@NotNull T>>left).toList()); + public final Builder addTags(TagKey... tags) { + listBuilder.addAll(Arrays.stream(tags).map(Either::, ResourceKey>left).toList()); return this; } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/registry/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/registry/package-info.java new file mode 100644 index 0000000..6c0671b --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/registry/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package lgbt.greenhouse.config.api.v3.registry; + +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/api/v3/util/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/util/package-info.java new file mode 100644 index 0000000..3abfa0f --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/api/v3/util/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package lgbt.greenhouse.config.api.v3.util; + +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/GreenhouseConfigImpl.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/GreenhouseConfigImpl.java index 8b177b4..7faec77 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/GreenhouseConfigImpl.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/GreenhouseConfigImpl.java @@ -3,7 +3,9 @@ package lgbt.greenhouse.config.impl; import com.google.common.collect.ImmutableList; import com.google.gson.Gson; import com.google.gson.stream.JsonWriter; -import com.mojang.serialization.*; +import com.mojang.serialization.DataResult; +import com.mojang.serialization.Dynamic; +import com.mojang.serialization.JsonOps; import lgbt.greenhouse.config.api.v3.GreenhouseConfigEvents; import lgbt.greenhouse.config.api.v3.GreenhouseConfigSide; import lgbt.greenhouse.config.api.v3.config.GreenhouseConfigHolder; @@ -23,10 +25,12 @@ import lgbt.greenhouse.polyamory.dfu.impl.CommentedValueWithoutInternal; import lgbt.greenhouse.polyamory.lang.jsonc.api.JsonCFormat; import lgbt.greenhouse.polyamory.lang.jsonc.api.dfu.JsonCOps; import net.minecraft.core.RegistryAccess; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; -import java.io.*; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.nio.ByteBuffer; @@ -51,8 +55,7 @@ public class GreenhouseConfigImpl { private static final Map, Object> LOCAL_CONFIGS = new HashMap<>(); private static final Map, Object> NETWORKABLE_CONFIGS = new HashMap<>(); - private static final String CONFIG_LANG_ERROR = "This is not a fault of the developer implementing the config, Please report this to https://git.greenhouse.lgbt/Modding/polyamory or whoever the developer of the config language they used's author instead."; - + private static final String CONFIG_LANG_ERROR = "This is not a fault of the developer implementing the config, Please report this to https://git.greenhouse.lgbt/Modding/polyamory or wherever the repository of the config language they used is instead"; public static > H registerConfig(H configHolder, GreenhouseConfigSide side) { if (!registrationOpen) @@ -67,72 +70,70 @@ public class GreenhouseConfigImpl { } @SuppressWarnings("unchecked") - @Nullable public static Config getLocalConfig(GreenhouseConfigHolder holder) { // Resolve to the client config if the common config is not present. var resolvedHolder = resolveSidedHolder(holder); var localData = getLocalData(resolvedHolder); var networkData = getNetworkData(resolvedHolder); - if (localData == null && networkData == null) { - return null; - } - - Object config = ((AbstractGreenhouseConfigHolderImpl)resolvedHolder).getConfig(localData, networkData); + Object config = ((AbstractGreenhouseConfigHolderImpl) resolvedHolder).getConfig(localData, networkData); if ( resolvedHolder != holder - && config instanceof InheritedConfigValue inherited - && ((AbstractGreenhouseConfigHolderImpl) holder).getClazz() != InheritedConfigValue.class + && config instanceof InheritedConfigValue inherited + && ((AbstractGreenhouseConfigHolderImpl) holder).getClazz() != InheritedConfigValue.class ) { - return (Config)inherited.inherited(); + return (Config) inherited.inherited(); } - return (Config)config; + return (Config) config; } - @Nullable public static LocalData getLocalData(GreenhouseConfigHolder holder) { + if (!LOCAL_CONFIGS.containsKey(holder)) { + throw new NullPointerException("Config holder '" + holder.getModId() + "' is not loaded on the current side"); + } //noinspection unchecked return (LocalData) LOCAL_CONFIGS.get(holder); } - @SuppressWarnings("unchecked") - @Nullable public static NetworkData getNetworkData(GreenhouseConfigHolder holder) { if (NETWORKABLE_CONFIGS.containsKey(holder)) { return (NetworkData) NETWORKABLE_CONFIGS.get(holder); } - return (NetworkData) LOCAL_CONFIGS.get(holder); + return getLocalData(holder); } @SuppressWarnings("unchecked") - @Nullable - public static AbstractGreenhouseConfigHolderImpl getConfigHolder(String name) { - return (AbstractGreenhouseConfigHolderImpl) CONFIG_HOLDERS.get(name); + public static AbstractGreenhouseConfigHolderImpl getConfigHolder(String modId) { + var configHolder = (AbstractGreenhouseConfigHolderImpl) CONFIG_HOLDERS.get(modId); + if (configHolder == null) { + throw new NullPointerException("Could not find config holder '" + modId + "'"); + } + return configHolder; } public static void reloadConfig(GreenhouseConfigHolder holder, @Nullable RegistryAccess registryAccess) { // Resolve to the client config if the common config is not present. GreenhouseConfigHolder resolvedHolder = resolveSidedHolder(holder); - Object config = loadConfig(resolvedHolder, false); + Object config = loadConfig(resolvedHolder); //noinspection unchecked AbstractGreenhouseConfigHolderImpl holderImpl = (AbstractGreenhouseConfigHolderImpl) resolvedHolder; - if (!LOCAL_CONFIGS.containsKey(holder) && !NETWORKABLE_CONFIGS.containsKey(holder)) { + if (!LOCAL_CONFIGS.containsKey(resolvedHolder) && !NETWORKABLE_CONFIGS.containsKey(resolvedHolder)) { throw new IllegalStateException("Unable to reload config '" + holder.getModId() + "' as it was not loaded"); } Object localData = holderImpl.getLocalData(config); Object networkData = holderImpl.getNetworkData(config); - if (LOCAL_CONFIGS.containsKey(holder)) { - LOCAL_CONFIGS.put(holder, localData); + if (LOCAL_CONFIGS.containsKey(resolvedHolder)) { + LOCAL_CONFIGS.put(resolvedHolder, localData); } - if (NETWORKABLE_CONFIGS.containsKey(holder)) { - NETWORKABLE_CONFIGS.put(holder, networkData); + if (NETWORKABLE_CONFIGS.containsKey(resolvedHolder)) { + NETWORKABLE_CONFIGS.put(resolvedHolder, networkData); } if (DEMAPPED_CONFIG_HOLDERS.containsKey(resolvedHolder)) { GreenhouseConfigEvents.invokeConfigLoadedEvents(DEMAPPED_CONFIG_HOLDERS.get(resolvedHolder), registryAccess); @@ -148,9 +149,9 @@ public class GreenhouseConfigImpl { } //noinspection unchecked - AbstractGreenhouseConfigHolderImpl holderImpl = (AbstractGreenhouseConfigHolderImpl)holder; + AbstractGreenhouseConfigHolderImpl holderImpl = (AbstractGreenhouseConfigHolderImpl) holder; //noinspection unchecked - GreenhouseConfigLang lang = (GreenhouseConfigLang)holderImpl.getConfigLang(); + GreenhouseConfigLang lang = (GreenhouseConfigLang) holderImpl.getConfigLang(); File file = GreenhouseConfigConstants.getPlatformHelper() .getConfigDir() @@ -221,8 +222,8 @@ public class GreenhouseConfigImpl { for (GreenhouseConfigHolder holder : CONFIG_HOLDERS.values()) { //noinspection unchecked - AbstractGreenhouseConfigHolderImpl holderImpl = (AbstractGreenhouseConfigHolderImpl)holder; - var config = loadConfig(holder, true); + AbstractGreenhouseConfigHolderImpl holderImpl = (AbstractGreenhouseConfigHolderImpl) holder; + var config = loadConfig(holder); var localData = holderImpl.getLocalData(config); var networkData = holderImpl.getNetworkData(config); @@ -300,17 +301,17 @@ public class GreenhouseConfigImpl { } } - @NotNull + public static Collection createSyncPackets() { - ImmutableList.Builder<@NotNull SyncGreenhouseConfigClientboundPacket> list = ImmutableList.builder(); + ImmutableList.Builder list = ImmutableList.builder(); for (Map.Entry, Object> entry : NETWORKABLE_CONFIGS.entrySet()) { - var networkCodec = ((AbstractGreenhouseConfigHolderImpl)entry.getKey()).getStreamCodec(); + var networkCodec = ((AbstractGreenhouseConfigHolderImpl) entry.getKey()).getStreamCodec(); if (networkCodec != null) { list.add(new SyncGreenhouseConfigClientboundPacket(entry.getKey().getModId(), entry.getValue())); } } for (Map.Entry, Object> entry : LOCAL_CONFIGS.entrySet()) { - var networkCodec = ((AbstractGreenhouseConfigHolderImpl )entry.getKey()).getStreamCodec(); + var networkCodec = ((AbstractGreenhouseConfigHolderImpl) entry.getKey()).getStreamCodec(); if (networkCodec != null) { list.add(new SyncGreenhouseConfigClientboundPacket(entry.getKey().getModId(), entry.getValue())); } @@ -318,12 +319,12 @@ public class GreenhouseConfigImpl { return list.build(); } - @NotNull - private static Config loadConfig(GreenhouseConfigHolder holder, boolean shouldWrite) { + + private static Config loadConfig(GreenhouseConfigHolder holder) { //noinspection DuplicatedCode - AbstractGreenhouseConfigHolderImpl holderImpl = (AbstractGreenhouseConfigHolderImpl)holder; + AbstractGreenhouseConfigHolderImpl holderImpl = (AbstractGreenhouseConfigHolderImpl) holder; //noinspection unchecked - GreenhouseConfigLang lang = (GreenhouseConfigLang)holderImpl.getConfigLang(); + GreenhouseConfigLang lang = (GreenhouseConfigLang) holderImpl.getConfigLang(); File file = GreenhouseConfigConstants.getPlatformHelper() .getConfigDir() @@ -335,10 +336,19 @@ public class GreenhouseConfigImpl { try { if (file.exists()) { - Lang contents = lang.read(new FileReader(file)); int schemaVersion = readSchemaVersion(holder.getModId(), file.toPath(), holderImpl.getFallbackSchemaVersion()); if (schemaVersion != holderImpl.getSchemaVersion() && holderImpl.getFixer() != null) { - @Nullable Lang fixed = holderImpl.getFixer() + Lang contents; + GreenhouseConfigLang oldLang = holderImpl.getPreviousLang(schemaVersion); + + if (oldLang != null) { + OldLang oldContents = oldLang.read(new FileReader(file)); + contents = oldLang.getOps().convertTo(lang.getOps(), oldContents); + } else { + contents = lang.read(new FileReader(file)); + } + + Lang fixed = holderImpl.getFixer() .update(GreenhouseConfigDFUTypeReferences.CONFIG, new Dynamic<>(lang.getOps(), contents), schemaVersion, holderImpl.getSchemaVersion()) .getValue(); @@ -347,43 +357,40 @@ public class GreenhouseConfigImpl { DataResult> commentedParsed = holderImpl.getCommentedCodec() .parse(lang.getOps(), lang.mergeComments(fixed, contents)); - if (shouldWrite) { - holderImpl.getCommentedCodec().encodeDefaultComments(); - Lang reEncoded = holderImpl.getCommentedCodec().encodeStart(lang.getOps(), commentedParsed.resultOrPartial().orElseThrow()) - .getOrThrow(s -> new IllegalStateException("Failed to re-encode broken fields in data-fixed config '" + configFileName + "'. " + CONFIG_LANG_ERROR + " " + s)); - saveConfigInternal(lang, reEncoded, file); - } + holderImpl.getCommentedCodec().encodeDefaultComments(); + Lang reEncoded = holderImpl.getCommentedCodec().encodeStart(lang.getOps(), commentedParsed.resultOrPartial().orElseThrow()) + .getOrThrow(s -> new IllegalStateException("Failed to re-encode broken fields in data-fixed config. " + CONFIG_LANG_ERROR + " " + s)); + saveConfigInternal(lang, reEncoded, file); parsed = commentedParsed.map(CommentedValue::value); } else { parsed = holderImpl.getCodec().parse(lang.getOps(), fixed); - if (shouldWrite) { - Lang reEncoded = holderImpl.getCodec() - .encodeStart(lang.getOps(), parsed.resultOrPartial().orElseThrow()) - .getOrThrow(s -> new IllegalStateException("Failed to re-encode broken fields in data-fixed config '" + configFileName + "'. " + CONFIG_LANG_ERROR + " " + s)); - saveConfigInternal(lang, reEncoded, file); - } + Lang reEncoded = holderImpl.getCodec() + .encodeStart(lang.getOps(), parsed.resultOrPartial().orElseThrow()) + .getOrThrow(s -> new IllegalStateException("Failed to re-encode broken fields in data-fixed config. " + CONFIG_LANG_ERROR + " " + s)); + saveConfigInternal(lang, reEncoded, file); } if (parsed.resultOrPartial(s -> CONFIG_LOAD_LOG.warn("Could not completely fix config file '{}'. {}", configFileName, s)).isEmpty()) { - throw new IllegalStateException("Could not fix old config file '" + configFileName + "'. Falling back to the default values... " + parsed.error().orElseThrow().message()); + throw new IllegalStateException("Could not fix old config file '" + configFileName + "'. " + parsed.error().orElseThrow().message()); } return parsed.resultOrPartial() .orElse(holderImpl.getDefaultValue().get()); } + Lang contents = lang.read(new FileReader(file)); DataResult parsed; if (commented) { DataResult> commentedParsed = holderImpl.getCommentedCodec() .parse(lang.getOps(), contents); - if (!commentedParsed.isSuccess() && shouldWrite) { + if (!commentedParsed.isSuccess()) { holderImpl.getCommentedCodec().encodeDefaultComments(); Lang reEncoded = holderImpl.getCommentedCodec() .encodeStart(lang.getOps(), commentedParsed.resultOrPartial().orElseThrow()) - .getOrThrow(s -> new IllegalStateException("Failed to re-encode broken config fields '" + configFileName + "'. " + CONFIG_LANG_ERROR + " " + s)); + .getOrThrow(s -> new IllegalStateException("Failed to re-encode broken config fields. " + CONFIG_LANG_ERROR + " " + s)); saveConfigInternal(lang, reEncoded, file); } @@ -392,23 +399,27 @@ public class GreenhouseConfigImpl { parsed = holderImpl.getCodec() .parse(lang.getOps(), contents); - if (!parsed.isSuccess() && shouldWrite) { + if (!parsed.isSuccess()) { Lang reEncoded = holderImpl.getCodec() .encodeStart(lang.getOps(), parsed.resultOrPartial().orElseThrow()) - .getOrThrow(s -> new IllegalStateException("Failed to re-encode broken config fields '" + configFileName + "'. " + CONFIG_LANG_ERROR + " " + s)); + .getOrThrow(s -> new IllegalStateException("Failed to re-encode broken config fields. " + CONFIG_LANG_ERROR + " " + s)); saveConfigInternal(lang, reEncoded, file); } } if (!parsed.hasResultOrPartial()) { - throw new IllegalStateException("Could not load old config file '" + configFileName + "'. Falling back to the default values... " + parsed.error().orElseThrow().message()); + throw new IllegalStateException("Could not load old config file. " + parsed.error().orElseThrow().message()); } return parsed - .resultOrPartial(s -> CONFIG_LOAD_LOG.warn("Could not completely load config file '{}'. {}", configFileName, s)) + .resultOrPartial(error -> CONFIG_LOAD_LOG.warn("Could not completely load config file '{}'. {}", configFileName, error)) .orElse(holderImpl.getDefaultValue().get()); } + } catch (Exception e) { + CONFIG_LOAD_LOG.error("Failed to load config from file '{}'. Falling back to the default values...", configFileName, e); + } + try { DataResult encoded; if (commented) { holderImpl.getCommentedCodec().encodeDefaultComments(); @@ -418,16 +429,14 @@ public class GreenhouseConfigImpl { } if (encoded.resultOrPartial().isEmpty()) { - throw new IllegalStateException("Failed to encode default config '" + configFileName + "'. " + CONFIG_LANG_ERROR + " " + encoded.error().orElseThrow().message()); + throw new IllegalStateException(encoded.error().orElseThrow().message()); } - if (shouldWrite) { - saveConfigInternal(lang, encoded.resultOrPartial().get(), file); - } + saveConfigInternal(lang, encoded.resultOrPartial().get(), file); return holderImpl.getDefaultValue().get(); } catch (Exception e) { - CONFIG_LOAD_LOG.error("Failed to load config from file '{}'", configFileName, e); + CONFIG_LOAD_LOG.error("Failed to encode default values to file {}. {}", configFileName, CONFIG_LANG_ERROR, e); } return holderImpl.getDefaultValue().get(); @@ -464,6 +473,7 @@ public class GreenhouseConfigImpl { // If the above doesn't exist, try to check for the file attribute view as per old Greenhouse Config files. var userAttributes = Files.getFileAttributeView(path, UserDefinedFileAttributeView.class); + //noinspection ConstantValue if (userAttributes != null && userAttributes.list().contains("GreenhouseConfigSchemaVersion")) { ByteBuffer buffer = ByteBuffer.allocate(userAttributes.size("GreenhouseConfigSchemaVersion")); userAttributes.read("GreenhouseConfigSchemaVersion", buffer); @@ -490,6 +500,7 @@ public class GreenhouseConfigImpl { Files.createDirectories(metaDataPath); } var dosFileAttributeView = Files.getFileAttributeView(metaDataPath, DosFileAttributeView.class); + //noinspection ConstantValue if (dosFileAttributeView != null) { dosFileAttributeView.setHidden(true); } @@ -518,6 +529,7 @@ public class GreenhouseConfigImpl { new Gson().toJson(MetaFileData.CODEC.encodeStart(JsonOps.INSTANCE, metaFileData).getOrThrow(), jsonWriter); } var attributes = Files.getFileAttributeView(path, UserDefinedFileAttributeView.class); + //noinspection ConstantValue if (attributes != null && attributes.list().contains("GreenhouseConfigSchemaVersion")) { attributes.delete("GreenhouseConfigSchemaVersion"); } @@ -533,7 +545,7 @@ public class GreenhouseConfigImpl { } String modId = holder.getModId(); GreenhouseConfigHolder potentialHolder = CONFIG_HOLDERS.get(modId); - if (((AbstractGreenhouseConfigHolderImpl)potentialHolder).getClazz() != ((AbstractGreenhouseConfigHolderImpl)holder).getClazz()) { + if (((AbstractGreenhouseConfigHolderImpl) potentialHolder).getClazz() != ((AbstractGreenhouseConfigHolderImpl) holder).getClazz()) { if (!(potentialHolder.get() instanceof InheritedConfigValue inherited) || inherited.inherited().getClass() != ((AbstractGreenhouseConfigHolderImpl) holder).getClazz()) { throw new NullPointerException("Attempted to resolve common/dedicated config when it is not of the same type as the client config"); } @@ -543,5 +555,6 @@ public class GreenhouseConfigImpl { return holder; } - private record ConfigEntry(GreenhouseConfigHolder configHolder, GreenhouseConfigSide side) {} + private record ConfigEntry(GreenhouseConfigHolder configHolder, GreenhouseConfigSide side) { + } } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/client/GreenhouseConfigClientImpl.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/client/GreenhouseConfigClientImpl.java index 04b9115..364a44f 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/client/GreenhouseConfigClientImpl.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/client/GreenhouseConfigClientImpl.java @@ -1,10 +1,10 @@ package lgbt.greenhouse.config.impl.client; import lgbt.greenhouse.config.api.v3.config.GreenhouseConfigHolder; -import lgbt.greenhouse.config.impl.config.AbstractGreenhouseConfigHolderImpl; import lgbt.greenhouse.config.impl.GreenhouseConfigConstants; import lgbt.greenhouse.config.impl.GreenhouseConfigImpl; -import org.jetbrains.annotations.Nullable; +import lgbt.greenhouse.config.impl.config.AbstractGreenhouseConfigHolderImpl; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import java.util.HashMap; @@ -24,7 +24,7 @@ public class GreenhouseConfigClientImpl { var resolvedHolder = GreenhouseConfigImpl.resolveSidedHolder(holder); if (!local && SYNCED_CONFIGS.containsKey(resolvedHolder)) { //noinspection unchecked - return ((AbstractGreenhouseConfigHolderImpl)holder).getConfig(GreenhouseConfigImpl.getLocalData(resolvedHolder), (NetworkData)SYNCED_CONFIGS.get(resolvedHolder)); + return ((AbstractGreenhouseConfigHolderImpl) holder).getConfig(GreenhouseConfigImpl.getLocalData(resolvedHolder), (NetworkData) SYNCED_CONFIGS.get(resolvedHolder)); } return GreenhouseConfigImpl.getLocalConfig(holder); } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/client/network/GreenhouseConfigClientPacketHandlers.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/client/network/GreenhouseConfigClientPacketHandlers.java index 7118b2b..b985479 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/client/network/GreenhouseConfigClientPacketHandlers.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/client/network/GreenhouseConfigClientPacketHandlers.java @@ -1,8 +1,8 @@ package lgbt.greenhouse.config.impl.client.network; -import lgbt.greenhouse.config.impl.config.AbstractGreenhouseConfigHolderImpl; import lgbt.greenhouse.config.impl.GreenhouseConfigImpl; import lgbt.greenhouse.config.impl.client.GreenhouseConfigClientImpl; +import lgbt.greenhouse.config.impl.config.AbstractGreenhouseConfigHolderImpl; import lgbt.greenhouse.config.impl.network.clientbound.SyncGreenhouseConfigClientboundPacket; public class GreenhouseConfigClientPacketHandlers { diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/client/network/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/client/network/package-info.java new file mode 100644 index 0000000..b2a75d1 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/client/network/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.client.network; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/client/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/client/package-info.java new file mode 100644 index 0000000..d36da1a --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/client/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.client; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/client/platform/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/client/platform/package-info.java new file mode 100644 index 0000000..a3b7419 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/client/platform/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.client.platform; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/client/platform/side/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/client/platform/side/package-info.java new file mode 100644 index 0000000..f4bcf77 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/client/platform/side/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.client.platform.side; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/CommentedConfigCodec.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/CommentedConfigCodec.java index 37b5fcb..4bfdfff 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/CommentedConfigCodec.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/CommentedConfigCodec.java @@ -14,9 +14,11 @@ import lgbt.greenhouse.polyamory.core.api.data.PolyamoryMap; import lgbt.greenhouse.polyamory.dfu.api.PolyamoryOps; import lgbt.greenhouse.polyamory.dfu.api.codec.CommentedValue; import lgbt.greenhouse.polyamory.dfu.api.codec.CommentedValueCodec; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; @@ -73,7 +75,7 @@ public class CommentedConfigCodec implements Codec> { private void addCommentsEncode(PolyamoryOps ops, PolyamoryBuilder builder, CodecFieldEntry entry) { if ( builder.getComments().values().stream().allMatch(List::isEmpty) - && entry.data() != null + && entry.data() != null ) { builder.addComment(createCommentStringFromEntry(ops, entry), PolyamoryComment.Style.SINGLE_LINE, PolyamoryComment.Position.HEADER); } @@ -99,7 +101,7 @@ public class CommentedConfigCodec implements Codec> { comments += "\n"; } //noinspection unchecked - comments += "Default Value: " + ((Codec)entry.data().codec()).encodeStart(ops, entry.data().defaultValue()) + comments += "Default Value: " + ((Codec) entry.data().codec()).encodeStart(ops, entry.data().defaultValue()) .getOrThrow() .toFormattedString(ops.getFormat()::writer); } @@ -142,7 +144,7 @@ public class CommentedConfigCodec implements Codec> { if (originalFieldEntry.codec() instanceof ConfigRecordCodec recordCodec) { //noinspection CastCanBeRemovedNarrowingVariableType - list.addAll(getCommentEntries((ConfigRecordCodec) recordCodec, (Function)getter, fieldEntry)); + list.addAll(getCommentEntries((ConfigRecordCodec) recordCodec, (Function) getter, fieldEntry)); } }); return list; @@ -169,7 +171,7 @@ public class CommentedConfigCodec implements Codec> { if (originalFieldEntry.codec() instanceof ConfigRecordCodec recordCodec) { //noinspection CastCanBeRemovedNarrowingVariableType - list.addAll(getCommentEntries((ConfigRecordCodec) recordCodec, (Function)getter, fieldEntry)); + list.addAll(getCommentEntries((ConfigRecordCodec) recordCodec, (Function) getter, fieldEntry)); } }); configRecordCodec.extraEntries.forEach((key, entry) -> { @@ -189,7 +191,7 @@ public class CommentedConfigCodec implements Codec> { if (originalFieldEntry.codec() instanceof ConfigRecordCodec recordCodec) { //noinspection CastCanBeRemovedNarrowingVariableType - list.addAll(getCommentEntries((ConfigRecordCodec) recordCodec, (Function)getter, fieldEntry)); + list.addAll(getCommentEntries((ConfigRecordCodec) recordCodec, (Function) getter, fieldEntry)); } }); return list; @@ -224,7 +226,7 @@ public class CommentedConfigCodec implements Codec> { currentEntry.key, new CodecFieldEntry.Data<>( configValueCodec.comments, - (Codec)configValueCodec.elementCodec, + (Codec) configValueCodec.elementCodec, configValueCodec.defaultValue.get() ), currentEntry.parent @@ -287,6 +289,7 @@ public class CommentedConfigCodec implements Codec> { } } - private record Data(@Nullable String comments, Codec codec, V defaultValue) {} + private record Data(@Nullable String comments, Codec codec, V defaultValue) { + } } } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/CommonFieldEntry.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/CommonFieldEntry.java index 862bf76..7370c84 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/CommonFieldEntry.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/CommonFieldEntry.java @@ -4,10 +4,11 @@ import java.util.function.Function; public interface CommonFieldEntry { V defaultValue(); + Function getter(); default CommonFieldEntry castForList() { //noinspection unchecked - return (CommonFieldEntry)this; + return (CommonFieldEntry) this; } } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/ConfigRecordCodec.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/ConfigRecordCodec.java index 860a33d..d438347 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/ConfigRecordCodec.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/ConfigRecordCodec.java @@ -7,27 +7,26 @@ import com.mojang.serialization.DynamicOps; import com.mojang.serialization.MapCodec; import lgbt.greenhouse.config.api.v3.config.GreenhouseConfigValueCodec; import lgbt.greenhouse.config.impl.util.ReflectionUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.lang.reflect.Constructor; import java.util.*; import java.util.function.Supplier; public class ConfigRecordCodec implements Codec { - @NotNull + protected final String modId; - @NotNull + protected final Supplier defaultValue; - @NotNull + public final Map, FieldEntry>> entries; @Nullable protected Constructor constructor = null; - public ConfigRecordCodec(@NotNull String modId, - @NotNull Supplier supplier, - @NotNull Map> entries) { + public ConfigRecordCodec(String modId, + Supplier supplier, + Map> entries) { this.modId = modId; this.defaultValue = supplier; this.entries = createCodecEntriesMapSingle(entries, supplier.get()); @@ -48,7 +47,7 @@ public class ConfigRecordCodec implements Codec { if (constructor == null) { constructor = ReflectionUtils.findConstructorForValues(defaultValue.get().getClass(), parameters); } - var pair = Pair.of((C)constructor.newInstance(parameters), input); + var pair = Pair.of((C) constructor.newInstance(parameters), input); if (dataResult.isError()) { return DataResult.error(dataResult.error().orElseThrow().messageSupplier(), pair); } @@ -96,11 +95,11 @@ public class ConfigRecordCodec implements Codec { return DataResult.success(values); } - protected Map, FieldEntry>> createCodecEntriesMapSingle(@NotNull Map> entries, V defaultValue) { + protected Map, FieldEntry>> createCodecEntriesMapSingle(Map> entries, V defaultValue) { HashMap, FieldEntry>> map = new LinkedHashMap<>(); entries.forEach((key, fieldEntry) -> { //noinspection unchecked - map.put(key, Pair.of(GreenhouseConfigValueCodec.create(fieldEntry.key(), fieldEntry.comments(), (Codec)fieldEntry.codec(), fieldEntry.getter().apply(defaultValue)), fieldEntry)); + map.put(key, Pair.of(GreenhouseConfigValueCodec.create(fieldEntry.key(), fieldEntry.comments(), (Codec) fieldEntry.codec(), fieldEntry.getter().apply(defaultValue)), fieldEntry)); }); return map; } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/FieldEntry.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/FieldEntry.java index f960a9a..27d6b89 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/FieldEntry.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/FieldEntry.java @@ -1,7 +1,7 @@ package lgbt.greenhouse.config.impl.codec; import com.mojang.serialization.Codec; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.function.Function; @@ -9,5 +9,6 @@ public record FieldEntry(String key, @Nullable String comments, Codec codec, V defaultValue, - Function getter) implements CommonFieldEntry {} + Function getter) implements CommonFieldEntry { +} diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/InheritedConfigRecordCodec.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/InheritedConfigRecordCodec.java index b736a80..145c818 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/InheritedConfigRecordCodec.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/InheritedConfigRecordCodec.java @@ -7,17 +7,16 @@ import com.mojang.serialization.DynamicOps; import com.mojang.serialization.MapCodec; import lgbt.greenhouse.config.api.v3.config.InheritedConfigValue; import lgbt.greenhouse.config.impl.util.ReflectionUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.lang.reflect.Constructor; import java.util.*; import java.util.function.Supplier; -public class InheritedConfigRecordCodec extends ConfigRecordCodec> { - @NotNull +public class InheritedConfigRecordCodec extends ConfigRecordCodec> { + public final Map, FieldEntry>> inheritedEntries; - @NotNull + public final Map, FieldEntry>> extraEntries; @Nullable @@ -25,17 +24,17 @@ public class InheritedConfigRecordCodec extends ConfigRecordCodec extraConstructor = null; - public InheritedConfigRecordCodec(@NotNull String modId, - @NotNull Supplier> supplier, - @NotNull Map> inheritedEntries, - @NotNull Map> extraEntries) { + public InheritedConfigRecordCodec(String modId, + Supplier> supplier, + Map> inheritedEntries, + Map> extraEntries) { super(modId, supplier, Collections.emptyMap()); this.inheritedEntries = createCodecEntriesMapSingle(inheritedEntries, supplier.get().inherited()); this.extraEntries = createCodecEntriesMapSingle(extraEntries, supplier.get().extra()); } @Override - public DataResult, T>> decode(DynamicOps ops, T input) { + public DataResult, T>> decode(DynamicOps ops, T input) { DataResult inheritedResult = createParameters(ops, input, inheritedEntries); DataResult extraResult = createParameters(ops, input, extraEntries); @@ -52,13 +51,13 @@ public class InheritedConfigRecordCodec extends ConfigRecordCodec(inherited, extra), input)); } catch (Throwable e) { @@ -67,7 +66,7 @@ public class InheritedConfigRecordCodec extends ConfigRecordCodec DataResult encode(InheritedConfigValue input, DynamicOps ops, T prefix) { + public DataResult encode(InheritedConfigValue input, DynamicOps ops, T prefix) { Set operatedKeys = new HashSet<>(); HashMap toMerge = new HashMap<>(); var builder = ops.mapBuilder(); diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/LateHolderCodec.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/LateHolderCodec.java index 981451e..ae2135f 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/LateHolderCodec.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/LateHolderCodec.java @@ -10,27 +10,26 @@ import net.minecraft.core.Registry; import net.minecraft.resources.Identifier; import net.minecraft.resources.RegistryFixedCodec; import net.minecraft.resources.ResourceKey; -import org.jetbrains.annotations.NotNull; public class LateHolderCodec implements Codec> { - @NotNull - private final ResourceKey> registryKey; - private final RegistryFixedCodec<@NotNull E> registryFixedCodec; - public LateHolderCodec(@NotNull ResourceKey> registry) { + private final ResourceKey> registryKey; + private final RegistryFixedCodec registryFixedCodec; + + public LateHolderCodec(ResourceKey> registry) { this.registryKey = registry; this.registryFixedCodec = RegistryFixedCodec.create(registryKey); } @Override - public DataResult, T>> decode(DynamicOps ops, T value) { + public DataResult, T>> decode(DynamicOps ops, T value) { String string = ops.getStringValue(value).getOrThrow(); - ResourceKey<@NotNull E> key = ResourceKey.create(registryKey, Identifier.parse(string)); + ResourceKey key = ResourceKey.create(registryKey, Identifier.parse(string)); return DataResult.success(Pair.of(LateHolder.create(key), value)); } @Override - public DataResult encode(Holder<@NotNull E> input, DynamicOps ops, T prefix) { + public DataResult encode(Holder input, DynamicOps ops, T prefix) { if (input instanceof LateHolder lateHolder) { return Identifier.CODEC.encode(lateHolder.key().identifier(), ops, prefix); } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/LateHolderSetCodec.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/LateHolderSetCodec.java index 376db6c..3fe6854 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/LateHolderSetCodec.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/LateHolderSetCodec.java @@ -12,17 +12,16 @@ import net.minecraft.core.Registry; import net.minecraft.resources.Identifier; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagKey; -import org.jetbrains.annotations.NotNull; -public class LateHolderSetCodec implements Codec<@NotNull HolderSet<@NotNull E>> { - private final ResourceKey> registryKey; +public class LateHolderSetCodec implements Codec> { + private final ResourceKey> registryKey; - public LateHolderSetCodec(ResourceKey> registry) { + public LateHolderSetCodec(ResourceKey> registry) { registryKey = registry; } @Override - public @NotNull DataResult, T>> decode(DynamicOps ops, @NotNull T value) { + public DataResult, T>> decode(DynamicOps ops, T value) { LateHolderSet.Builder builder = LateHolderSet.builder(registryKey); if (ops.getStream(value).isSuccess()) { ops.getStream(value).getOrThrow().filter(t -> ops.getStringValue(t).isSuccess()).forEach(t -> { @@ -45,7 +44,7 @@ public class LateHolderSetCodec implements Codec<@NotNull HolderSet<@NotNull } @Override - public @NotNull DataResult encode(@NotNull HolderSet<@NotNull E> holderSet, @NotNull DynamicOps ops, @NotNull T prefix) { + public DataResult encode(HolderSet holderSet, DynamicOps ops, T prefix) { if (holderSet instanceof LateHolderSet late) { if (late.getKeys().size() == 1) { return DataResult.success(ops.createString(late.getKeys().getFirst().map( @@ -55,14 +54,14 @@ public class LateHolderSetCodec implements Codec<@NotNull HolderSet<@NotNull } ListBuilder builder = ops.listBuilder(); - for (Either, ResourceKey<@NotNull E>> key : late.getKeys()) { + for (Either, ResourceKey> key : late.getKeys()) { key .ifLeft(tagKey -> builder.add(ops.createString("#" + tagKey.location()))) .ifRight(resourceKey -> builder.add(ops.createString(resourceKey.identifier().toString()))); } return DataResult.success(builder.build(prefix).getOrThrow()); } - if (holderSet instanceof HolderSet.Named<@NotNull E> named) + if (holderSet instanceof HolderSet.Named named) return DataResult.success(ops.createString("#" + named.key().location())); return Identifier.CODEC.listOf() .encode(holderSet.stream() diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/ConfigRecordStreamCodec.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/ConfigRecordStreamCodec.java index 37a6061..dd05786 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/ConfigRecordStreamCodec.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/ConfigRecordStreamCodec.java @@ -5,8 +5,7 @@ import lgbt.greenhouse.config.impl.GreenhouseConfigConstants; import lgbt.greenhouse.config.impl.util.ReflectionUtils; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import java.lang.reflect.Constructor; @@ -14,20 +13,20 @@ import java.util.Arrays; import java.util.List; import java.util.function.Supplier; -public class ConfigRecordStreamCodec implements StreamCodec<@NotNull FriendlyByteBuf, @NotNull C> { +public class ConfigRecordStreamCodec implements StreamCodec { public static final Logger DECODING_LOGGER = GreenhouseConfigConstants.getLogger("Config Network Decoding"); - @NotNull + private final String modId; - @NotNull + private final Supplier defaultValue; - @NotNull + private final List> entries; @Nullable private Constructor constructor = null; - public ConfigRecordStreamCodec(@NotNull String modId, @NotNull Supplier defaultValue, - @NotNull List> entries) { + public ConfigRecordStreamCodec(String modId, Supplier defaultValue, + List> entries) { this.modId = modId; this.defaultValue = defaultValue; this.entries = entries; @@ -41,7 +40,7 @@ public class ConfigRecordStreamCodec implements StreamCodec<@NotNull Friendly while (index < values.length) { try { //noinspection unchecked - StreamCodec<@NotNull FriendlyByteBuf, @NotNull Object> streamCodec = (StreamCodec<@NotNull FriendlyByteBuf, @NotNull Object>)entries.get(index).streamCodec(); + StreamCodec streamCodec = (StreamCodec) entries.get(index).streamCodec(); values[index] = streamCodec.decode(buf); } catch (DecoderException e) { DECODING_LOGGER.error("Failed to decode value for config '{}'", modId, e); @@ -66,7 +65,7 @@ public class ConfigRecordStreamCodec implements StreamCodec<@NotNull Friendly public void encode(FriendlyByteBuf buf, C config) { for (var entry : entries) { //noinspection unchecked - StreamCodec<@NotNull FriendlyByteBuf, @NotNull Object> streamCodec = (StreamCodec<@NotNull FriendlyByteBuf, @NotNull Object>) entry.streamCodec(); + StreamCodec streamCodec = (StreamCodec) entry.streamCodec(); streamCodec.cast().encode(buf, entry.getter().apply(config)); } } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/LateHolderSetStreamCodec.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/LateHolderSetStreamCodec.java index a37d20f..719a878 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/LateHolderSetStreamCodec.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/LateHolderSetStreamCodec.java @@ -11,21 +11,20 @@ import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.Identifier; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagKey; -import org.jetbrains.annotations.NotNull; import java.util.Optional; -public class LateHolderSetStreamCodec implements StreamCodec<@NotNull ByteBuf, @NotNull HolderSet<@NotNull T>> { - private final ResourceKey> registry; - private final StreamCodec<@NotNull ByteBuf, @NotNull ResourceKey<@NotNull T>> holderCodec; +public class LateHolderSetStreamCodec implements StreamCodec> { + private final ResourceKey> registry; + private final StreamCodec> holderCodec; - public LateHolderSetStreamCodec(ResourceKey> registry) { + public LateHolderSetStreamCodec(ResourceKey> registry) { this.registry = registry; this.holderCodec = ResourceKey.streamCodec(registry); } @Override - public @NotNull HolderSet<@NotNull T> decode(@NotNull ByteBuf buf) { + public HolderSet decode(ByteBuf buf) { int i = VarInt.read(buf) - 1; LateHolderSet.Builder builder = LateHolderSet.builder(registry); if (i == -1) { @@ -44,8 +43,8 @@ public class LateHolderSetStreamCodec implements StreamCodec<@NotNull ByteBuf } @Override - public void encode(@NotNull ByteBuf buf, @NotNull HolderSet<@NotNull T> holderSet) { - Optional> optional = holderSet.unwrapKey(); + public void encode(ByteBuf buf, HolderSet holderSet) { + Optional> optional = holderSet.unwrapKey(); if (optional.isPresent()) { VarInt.write(buf, -1); Identifier.STREAM_CODEC.encode(buf, optional.get().location()); @@ -53,7 +52,7 @@ public class LateHolderSetStreamCodec implements StreamCodec<@NotNull ByteBuf VarInt.write(buf, holderSet.size() + 1); if (holderSet instanceof LateHolderSet late) { - for (Either, ResourceKey<@NotNull T>> value : late.getKeys()) { + for (Either, ResourceKey> value : late.getKeys()) { if (value.left().isPresent()) { buf.writeBoolean(true); Identifier.STREAM_CODEC.encode(buf, value.left().orElseThrow().location()); @@ -63,7 +62,7 @@ public class LateHolderSetStreamCodec implements StreamCodec<@NotNull ByteBuf } } } else { - for (Holder<@NotNull T> value : holderSet) { + for (Holder value : holderSet) { buf.writeBoolean(false); holderCodec.encode(buf, value.unwrapKey().orElseThrow()); } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/LateHolderStreamCodec.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/LateHolderStreamCodec.java index 35c70b0..1b07e7a 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/LateHolderStreamCodec.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/LateHolderStreamCodec.java @@ -6,23 +6,22 @@ import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceKey; -import org.jetbrains.annotations.NotNull; -public class LateHolderStreamCodec implements StreamCodec<@NotNull ByteBuf, @NotNull Holder<@NotNull T>> { - private final StreamCodec<@NotNull ByteBuf, @NotNull ResourceKey<@NotNull T>> keyCodec; +public class LateHolderStreamCodec implements StreamCodec> { + private final StreamCodec> keyCodec; - public LateHolderStreamCodec(ResourceKey> registry) { + public LateHolderStreamCodec(ResourceKey> registry) { keyCodec = ResourceKey.streamCodec(registry); } @Override - public @NotNull Holder<@NotNull T> decode(@NotNull ByteBuf buf) { - ResourceKey<@NotNull T> resourceKey = keyCodec.decode(buf); + public Holder decode(ByteBuf buf) { + ResourceKey resourceKey = keyCodec.decode(buf); return LateHolder.create(resourceKey); } @Override - public void encode(@NotNull ByteBuf buf, @NotNull Holder<@NotNull T> holder) { + public void encode(ByteBuf buf, Holder holder) { if (holder instanceof LateHolder lateHolder) { keyCodec.encode(buf, lateHolder.key()); return; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/StreamFieldEntry.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/StreamFieldEntry.java index 4371e66..027fbe8 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/StreamFieldEntry.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/StreamFieldEntry.java @@ -2,10 +2,10 @@ package lgbt.greenhouse.config.impl.codec.network; import lgbt.greenhouse.config.impl.codec.CommonFieldEntry; import net.minecraft.network.codec.StreamCodec; -import org.jetbrains.annotations.NotNull; import java.util.function.Function; -public record StreamFieldEntry(StreamCodec streamCodec, +public record StreamFieldEntry(StreamCodec streamCodec, V defaultValue, - Function getter) implements CommonFieldEntry {} + Function getter) implements CommonFieldEntry { +} diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/package-info.java new file mode 100644 index 0000000..6eafb95 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/network/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.codec.network; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/package-info.java new file mode 100644 index 0000000..f0965e2 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/codec/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.codec; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/config/AbstractGreenhouseConfigHolderImpl.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/AbstractGreenhouseConfigHolderImpl.java index 746d47e..0ab2d49 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/config/AbstractGreenhouseConfigHolderImpl.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/AbstractGreenhouseConfigHolderImpl.java @@ -2,6 +2,7 @@ package lgbt.greenhouse.config.impl.config; import com.mojang.datafixers.DataFixer; import com.mojang.serialization.Codec; +import it.unimi.dsi.fastutil.ints.Int2ObjectSortedMap; import lgbt.greenhouse.config.api.v3.GreenhouseConfigEvents; import lgbt.greenhouse.config.api.v3.config.GreenhouseConfigHolder; import lgbt.greenhouse.config.api.v3.lang.GreenhouseConfigLang; @@ -9,54 +10,58 @@ import lgbt.greenhouse.config.impl.codec.CommentedConfigCodec; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.function.Supplier; public abstract class AbstractGreenhouseConfigHolderImpl implements GreenhouseConfigHolder { - @NotNull + private final Class clazz; - @NotNull + private final String modId; - @NotNull + private final GreenhouseConfigLang configLang; - @NotNull + + private final Int2ObjectSortedMap> previousLangs; + private final Supplier defaultValue; - @NotNull + private final Codec codec; @Nullable private CommentedConfigCodec commentedCodec; @Nullable - private final StreamCodec<@NotNull FriendlyByteBuf, @NotNull NetworkData> streamCodec; + private final StreamCodec streamCodec; @Nullable private final DataFixer fixer; private final int schemaVersion; private final int fallbackSchemaVersion; - public AbstractGreenhouseConfigHolderImpl(@NotNull Class clazz, - @NotNull String modId, - @NotNull GreenhouseConfigLang configLang, - @NotNull Supplier defaultValue, - @NotNull Codec codec, - @Nullable StreamCodec<@NotNull FriendlyByteBuf, @NotNull NetworkData> streamCodec, + public AbstractGreenhouseConfigHolderImpl(Class clazz, + int schemaVersion, + int fallbackSchemaVersion, + String modId, + GreenhouseConfigLang configLang, + Supplier defaultValue, + Codec codec, + @Nullable StreamCodec streamCodec, @Nullable DataFixer fixer, - int schemaVersion, int fallbackSchemaVersion, - @Nullable GreenhouseConfigEvents.ConfigLoadCallback loadCallback, - @Nullable GreenhouseConfigEvents.RegistryPopulationCallback populationCallback, - @Nullable GreenhouseConfigEvents.RegistryDepopulationCallback depopulationCallback) { + Int2ObjectSortedMap> previousLangs, + GreenhouseConfigEvents.@Nullable ConfigLoadCallback loadCallback, + GreenhouseConfigEvents.@Nullable RegistryPopulationCallback populationCallback, + GreenhouseConfigEvents.@Nullable RegistryDepopulationCallback depopulationCallback) { this.clazz = clazz; + this.schemaVersion = schemaVersion; + this.fallbackSchemaVersion = fallbackSchemaVersion; this.modId = modId; this.configLang = configLang; this.defaultValue = defaultValue; this.codec = codec; this.streamCodec = streamCodec; this.fixer = fixer; - this.schemaVersion = schemaVersion; - this.fallbackSchemaVersion = fallbackSchemaVersion; + this.previousLangs = previousLangs; if (loadCallback != null) { GreenhouseConfigEvents.onConfigLoaded(this, loadCallback); @@ -69,23 +74,23 @@ public abstract class AbstractGreenhouseConfigHolderImpl getConfigLang() { return configLang; } - @NotNull + public Supplier getDefaultValue() { return defaultValue; } - @NotNull + public Codec getCodec() { return codec; } @@ -103,7 +108,7 @@ public abstract class AbstractGreenhouseConfigHolderImpl getStreamCodec() { + public StreamCodec getStreamCodec() { return streamCodec; } @@ -116,7 +121,6 @@ public abstract class AbstractGreenhouseConfigHolderImpl getClazz() { return clazz; } @@ -129,7 +133,20 @@ public abstract class AbstractGreenhouseConfigHolderImpl GreenhouseConfigLang getPreviousLang(int schemaVersion) { + var entry = previousLangs.subMap(0, schemaVersion + 1).lastEntry(); + if (entry != null) { + //noinspection unchecked + return (GreenhouseConfigLang) entry.getValue(); + } + return null; + } + public abstract Config getConfig(LocalData localData, NetworkData networkData); + public abstract LocalData getLocalData(Config config); + public abstract NetworkData getNetworkData(Config config); } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/config/GreenhouseConfigHolderImpl.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/GreenhouseConfigHolderImpl.java index 0d98ab7..8a4c7b0 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/config/GreenhouseConfigHolderImpl.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/GreenhouseConfigHolderImpl.java @@ -2,43 +2,52 @@ package lgbt.greenhouse.config.impl.config; import com.mojang.datafixers.DataFixer; import com.mojang.serialization.Codec; +import it.unimi.dsi.fastutil.ints.Int2ObjectSortedMap; import lgbt.greenhouse.config.api.v3.GreenhouseConfigEvents; import lgbt.greenhouse.config.api.v3.lang.GreenhouseConfigLang; import lgbt.greenhouse.config.impl.config.builder.GreenhouseConfigHolderBuilderImpl; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.function.Supplier; public class GreenhouseConfigHolderImpl extends AbstractGreenhouseConfigHolderImpl { private final GreenhouseConfigHolderBuilderImpl builder; - public GreenhouseConfigHolderImpl(@NotNull Class clazz, - @NotNull String modId, + public GreenhouseConfigHolderImpl(Class clazz, + int schemaVersion, + int fallbackSchemaVersion, + String modId, GreenhouseConfigLang configLang, - @NotNull Supplier defaultValue, - @NotNull Codec codec, - @Nullable StreamCodec<@NotNull FriendlyByteBuf, @NotNull Config> streamCodec, + Supplier defaultValue, + Codec codec, + @Nullable StreamCodec streamCodec, @Nullable DataFixer fixer, - int schemaVersion, int fallbackSchemaVersion, - @NotNull GreenhouseConfigHolderBuilderImpl builder, - @Nullable GreenhouseConfigEvents.ConfigLoadCallback loadCallback, - @Nullable GreenhouseConfigEvents.RegistryPopulationCallback populationCallback, - @Nullable GreenhouseConfigEvents.RegistryDepopulationCallback depopulationCallback) { + Int2ObjectSortedMap> previousLangs, + GreenhouseConfigHolderBuilderImpl builder, + GreenhouseConfigEvents.@Nullable ConfigLoadCallback loadCallback, + GreenhouseConfigEvents.@Nullable RegistryPopulationCallback populationCallback, + GreenhouseConfigEvents.@Nullable RegistryDepopulationCallback depopulationCallback) { super( clazz, - modId, configLang, + schemaVersion, + fallbackSchemaVersion, + modId, + configLang, defaultValue, - codec, streamCodec, - fixer, schemaVersion, fallbackSchemaVersion, - loadCallback, populationCallback, depopulationCallback + codec, + streamCodec, + fixer, + previousLangs, + loadCallback, + populationCallback, + depopulationCallback ); this.builder = builder; } - @NotNull + public GreenhouseConfigHolderBuilderImpl getBuilder() { return builder; } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/config/GreenhouseInheritedConfigHolderImpl.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/GreenhouseInheritedConfigHolderImpl.java index fdd472b..da4cd56 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/config/GreenhouseInheritedConfigHolderImpl.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/GreenhouseInheritedConfigHolderImpl.java @@ -2,38 +2,46 @@ package lgbt.greenhouse.config.impl.config; import com.mojang.datafixers.DataFixer; import com.mojang.serialization.Codec; +import it.unimi.dsi.fastutil.ints.Int2ObjectSortedMap; import lgbt.greenhouse.config.api.v3.GreenhouseConfigEvents; import lgbt.greenhouse.config.api.v3.config.GreenhouseInheritedConfigHolder; import lgbt.greenhouse.config.api.v3.config.InheritedConfigValue; import lgbt.greenhouse.config.api.v3.lang.GreenhouseConfigLang; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.function.Supplier; public class GreenhouseInheritedConfigHolderImpl extends AbstractGreenhouseConfigHolderImpl> implements GreenhouseInheritedConfigHolder { - public GreenhouseInheritedConfigHolderImpl(@NotNull Class> clazz, - @NotNull String modId, - @NotNull GreenhouseConfigLang configLang, - @NotNull Supplier> defaultValue, - @NotNull Codec> codec, - @Nullable StreamCodec<@NotNull FriendlyByteBuf, @NotNull Inherited> streamCodec, - @Nullable DataFixer fixer, + public GreenhouseInheritedConfigHolderImpl(Class> clazz, int schemaVersion, int fallbackSchemaVersion, - @Nullable GreenhouseConfigEvents.ConfigLoadCallback> loadCallback, - @Nullable GreenhouseConfigEvents.RegistryPopulationCallback> populationCallback, - @Nullable GreenhouseConfigEvents.RegistryDepopulationCallback> depopulationCallback) { + String modId, + GreenhouseConfigLang configLang, + Supplier> defaultValue, + Codec> codec, + @Nullable StreamCodec streamCodec, + @Nullable DataFixer fixer, + Int2ObjectSortedMap> previousLang, + GreenhouseConfigEvents.@Nullable ConfigLoadCallback> loadCallback, + GreenhouseConfigEvents.@Nullable RegistryPopulationCallback> populationCallback, + GreenhouseConfigEvents.@Nullable RegistryDepopulationCallback> depopulationCallback) { super( clazz, - modId, configLang, + schemaVersion, + fallbackSchemaVersion, + modId, + configLang, defaultValue, - codec, streamCodec, - fixer, schemaVersion, fallbackSchemaVersion, - loadCallback, populationCallback, depopulationCallback + codec, + streamCodec, + fixer, + previousLang, + loadCallback, + populationCallback, + depopulationCallback ); } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/AbstractGreenhouseConfigHolderBuilderImpl.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/AbstractGreenhouseConfigHolderBuilderImpl.java index 95bb3c1..ea4c0b7 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/AbstractGreenhouseConfigHolderBuilderImpl.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/AbstractGreenhouseConfigHolderBuilderImpl.java @@ -8,24 +8,24 @@ import lgbt.greenhouse.config.api.v3.config.builder.AbstractGreenhouseConfigHold import lgbt.greenhouse.config.api.v3.dfu.GreenhouseConfigDataFixerBuilder; import lgbt.greenhouse.config.api.v3.lang.GreenhouseConfigLang; import lgbt.greenhouse.config.impl.codec.CommonFieldEntry; -import lgbt.greenhouse.config.impl.codec.FieldEntry; import lgbt.greenhouse.config.impl.codec.ConfigRecordCodec; +import lgbt.greenhouse.config.impl.codec.FieldEntry; import lgbt.greenhouse.config.impl.util.ReflectionUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; -import java.util.*; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.function.Consumer; @SuppressWarnings("unchecked") public abstract class AbstractGreenhouseConfigHolderBuilderImpl, Impl extends GreenhouseConfigHolder> implements AbstractGreenhouseConfigHolderBuilder { - @NotNull + protected final String modId; - @NotNull + protected final Class localDataClazz; - @NotNull + protected final Class networkDataClazz; - @NotNull + protected final GreenhouseConfigLang configLang; protected final int dataVersion; @@ -35,27 +35,24 @@ public abstract class AbstractGreenhouseConfigHolderBuilderImpl codec; - @NotNull + protected final GreenhouseConfigDataFixerBuilder fixerBuilder; @Nullable protected DataFixer fixer; - @NotNull + protected final Map> fields = new LinkedHashMap<>(); - @Nullable - protected GreenhouseConfigEvents.ConfigLoadCallback loadCallback; - @Nullable - protected GreenhouseConfigEvents.RegistryPopulationCallback populationCallback; - @Nullable - protected GreenhouseConfigEvents.RegistryDepopulationCallback depopulationCallback; + protected GreenhouseConfigEvents.@Nullable ConfigLoadCallback loadCallback; + protected GreenhouseConfigEvents.@Nullable RegistryPopulationCallback populationCallback; + protected GreenhouseConfigEvents.@Nullable RegistryDepopulationCallback depopulationCallback; - public AbstractGreenhouseConfigHolderBuilderImpl(@NotNull String modId, - @NotNull Class localDataClazz, - @NotNull Class networkDataClazz, - @NotNull GreenhouseConfigLang configLang, - @NotNull GreenhouseConfigDataFixerBuilder fixerBuilder, + public AbstractGreenhouseConfigHolderBuilderImpl(String modId, + Class localDataClazz, + Class networkDataClazz, + GreenhouseConfigLang configLang, + GreenhouseConfigDataFixerBuilder fixerBuilder, int dataVersion) { if (dataVersion < 1) { throw new IllegalArgumentException("Schema version must be set to at least 1."); @@ -64,7 +61,7 @@ public abstract class AbstractGreenhouseConfigHolderBuilderImpl getRootConfig() { return this; } @@ -85,46 +82,46 @@ public abstract class AbstractGreenhouseConfigHolderBuilderImpl consumer) { consumer.accept(fixerBuilder); - return (Builder)this; + return (Builder) this; } @Override - public Builder direct(Codec codec) { + public Builder direct(Codec codec) { this.codec = codec; - return (Builder)this; - } + return (Builder) this; + } @Override public Builder directDataFixer(DataFixer fixer) { this.fixer = fixer; - return (Builder)this; + return (Builder) this; } @Override public Builder fallbackSchemaVersion(int value) { this.fallbackSchemaVersion = value; - return (Builder)this; + return (Builder) this; } @Override public Builder onConfigLoaded(GreenhouseConfigEvents.ConfigLoadCallback callback) { this.loadCallback = this.loadCallback == null ? callback : this.loadCallback.andThen(callback); - return (Builder)this; + return (Builder) this; } @Override public Builder onRegistryPopulation(GreenhouseConfigEvents.RegistryPopulationCallback callback) { this.populationCallback = this.populationCallback == null ? callback : this.populationCallback.andThen(callback); - return (Builder)this; + return (Builder) this; } @Override public Builder onRegistryDepopulation(GreenhouseConfigEvents.RegistryDepopulationCallback callback) { this.depopulationCallback = this.depopulationCallback == null ? callback : this.depopulationCallback.andThen(callback); - return (Builder)this; + return (Builder) this; } - @NotNull + public Codec getCodec() { if (!createdCodec) { if (this.codec == null) { @@ -152,7 +149,7 @@ public abstract class AbstractGreenhouseConfigHolderBuilderImpl implements ConfigRecordBuilder> { @@ -17,9 +19,9 @@ public class ConfigRecordBuilderImpl implements ConfigRecordB private final Function getter; private final boolean allowNetworkSerialization; - @NotNull + private final Map> fields = new LinkedHashMap<>(); - @NotNull + private final List> streamFields = new ArrayList<>(); public ConfigRecordBuilderImpl(AbstractGreenhouseConfigHolderBuilder rootBuilder, Function getter, boolean allowNetworkSerialization) { @@ -39,7 +41,7 @@ public class ConfigRecordBuilderImpl implements ConfigRecordB @Override public ConfigRecordBuilderImpl withNetworkSerializedValue(String key, @Nullable String comments, - Codec codec, StreamCodec streamCodec, + Codec codec, StreamCodec streamCodec, V defaultValue, Function getter) { if (!allowNetworkSerialization) { @@ -51,19 +53,19 @@ public class ConfigRecordBuilderImpl implements ConfigRecordB } @Override - @NotNull + public String getModId() { return rootBuilder.getModId(); } @Override - @NotNull + public AbstractGreenhouseConfigHolderBuilder getRootConfig() { return rootBuilder; } @Override - public @NotNull Function getter() { + public Function getter() { return getter; } @@ -72,11 +74,11 @@ public class ConfigRecordBuilderImpl implements ConfigRecordB return allowNetworkSerialization; } - public @NotNull Map> getFields() { + public Map> getFields() { return fields; } - public @NotNull List> getStreamFields() { + public List> getStreamFields() { return streamFields; } } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/GreenhouseConfigHolderBuilderImpl.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/GreenhouseConfigHolderBuilderImpl.java index be8798e..cf918ee 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/GreenhouseConfigHolderBuilderImpl.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/GreenhouseConfigHolderBuilderImpl.java @@ -3,52 +3,55 @@ package lgbt.greenhouse.config.impl.config.builder; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.MapDecoder; -import lgbt.greenhouse.config.api.v3.config.GreenhouseConfigValueCodec; import lgbt.greenhouse.config.api.v3.config.GreenhouseConfigHolder; +import lgbt.greenhouse.config.api.v3.config.GreenhouseConfigValueCodec; import lgbt.greenhouse.config.api.v3.config.builder.GreenhouseConfigHolderBuilder; +import lgbt.greenhouse.config.api.v3.dfu.GreenhouseConfigDataFixerBuilder; import lgbt.greenhouse.config.api.v3.lang.GreenhouseConfigLang; import lgbt.greenhouse.config.impl.codec.CommonFieldEntry; import lgbt.greenhouse.config.impl.codec.FieldEntry; import lgbt.greenhouse.config.impl.codec.network.ConfigRecordStreamCodec; import lgbt.greenhouse.config.impl.codec.network.StreamFieldEntry; import lgbt.greenhouse.config.impl.config.GreenhouseConfigHolderImpl; -import lgbt.greenhouse.config.api.v3.dfu.GreenhouseConfigDataFixerBuilder; import lgbt.greenhouse.config.impl.util.ReflectionUtils; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.List; import java.util.function.Function; public class GreenhouseConfigHolderBuilderImpl extends AbstractGreenhouseConfigHolderBuilderImpl, GreenhouseConfigHolder> implements GreenhouseConfigHolderBuilder { protected boolean createdStreamCodec; @Nullable - protected StreamCodec<@NotNull FriendlyByteBuf, @NotNull Config> streamCodec; + protected StreamCodec streamCodec; + - @NotNull protected final List> streamFields = new ArrayList<>(); - public GreenhouseConfigHolderBuilderImpl(@NotNull Class clazz, - @NotNull String modId, - @NotNull GreenhouseConfigLang configLang, + public GreenhouseConfigHolderBuilderImpl(Class clazz, + String modId, + GreenhouseConfigLang configLang, GreenhouseConfigDataFixerBuilder fixerBuilder, int schemaVersion) { super(modId, clazz, clazz, configLang, fixerBuilder, schemaVersion); } public GreenhouseConfigHolder build() { - return new GreenhouseConfigHolderImpl<>(localDataClazz, modId, configLang, + return new GreenhouseConfigHolderImpl<>( + localDataClazz, + dataVersion, + fallbackSchemaVersion, + modId, + configLang, fields.isEmpty() ? ReflectionUtils.createFromArrayOrThrow(modId, localDataClazz, getCodecDefaultValues(codec)) : ReflectionUtils.createFromFieldsOrThrow(modId, localDataClazz, fields.values().stream().map(CommonFieldEntry::castForList).toList()), getCodec(), getStreamCodec(), getFixer(), - dataVersion, - fallbackSchemaVersion, + getFixerBuilder().getPreviousLangs(), this, loadCallback, populationCallback, @@ -58,7 +61,7 @@ public class GreenhouseConfigHolderBuilderImpl extends AbstractGreenhous @Override - public GreenhouseConfigHolderBuilder directNetworkSerializable(Codec codec, StreamCodec<@NotNull FriendlyByteBuf, @NotNull Config> streamCodec) { + public GreenhouseConfigHolderBuilder directNetworkSerializable(Codec codec, StreamCodec streamCodec) { direct(codec); this.streamCodec = streamCodec; return this; @@ -71,16 +74,16 @@ public class GreenhouseConfigHolderBuilderImpl extends AbstractGreenhous } @Override - public GreenhouseConfigHolderBuilder withNetworkSerializedValue(String key, @Nullable String comments, Codec codec, StreamCodec streamCodec, V defaultValue, Function getter) { + public GreenhouseConfigHolderBuilder withNetworkSerializedValue(String key, @Nullable String comments, Codec codec, StreamCodec streamCodec, V defaultValue, Function getter) { withValue(key, comments, codec, defaultValue, getter); streamFields.add(new StreamFieldEntry<>(streamCodec, defaultValue, getter)); return this; } @Nullable - public StreamCodec<@NotNull FriendlyByteBuf, @NotNull Config> getStreamCodec() { + public StreamCodec getStreamCodec() { if (!createdStreamCodec) { - if (streamCodec == null && !streamFields.isEmpty()) { + if (streamCodec == null && !streamFields.isEmpty()) { streamCodec = new ConfigRecordStreamCodec<>(modId, ReflectionUtils.createFromFieldsOrThrow( modId, localDataClazz, streamFields.stream() .map(CommonFieldEntry::castForList) @@ -110,12 +113,12 @@ public class GreenhouseConfigHolderBuilderImpl extends AbstractGreenhous } @Override - public @NonNull String getModId() { + public String getModId() { return modId; } @Override - public @NotNull Function getter() { + public Function getter() { return Function.identity(); } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/GreenhouseInheritedConfigHolderBuilderImpl.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/GreenhouseInheritedConfigHolderBuilderImpl.java index e6afdcc..0f7b20c 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/GreenhouseInheritedConfigHolderBuilderImpl.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/GreenhouseInheritedConfigHolderBuilderImpl.java @@ -2,6 +2,7 @@ package lgbt.greenhouse.config.impl.config.builder; import com.mojang.serialization.Codec; import lgbt.greenhouse.config.api.v3.config.GreenhouseInheritedConfigHolder; +import lgbt.greenhouse.config.api.v3.config.InheritedConfigValue; import lgbt.greenhouse.config.api.v3.config.builder.GreenhouseConfigHolderBuilder; import lgbt.greenhouse.config.api.v3.config.builder.GreenhouseInheritedConfigHolderBuilder; import lgbt.greenhouse.config.api.v3.dfu.GreenhouseConfigDataFixerBuilder; @@ -12,29 +13,27 @@ import lgbt.greenhouse.config.impl.codec.FieldEntry; import lgbt.greenhouse.config.impl.codec.InheritedConfigRecordCodec; import lgbt.greenhouse.config.impl.config.GreenhouseConfigHolderImpl; import lgbt.greenhouse.config.impl.config.GreenhouseInheritedConfigHolderImpl; -import lgbt.greenhouse.config.api.v3.config.InheritedConfigValue; import lgbt.greenhouse.config.impl.util.ReflectionUtils; import net.minecraft.core.Holder; import net.minecraft.core.HolderSet; import net.minecraft.core.Registry; import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceKey; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; public final class GreenhouseInheritedConfigHolderBuilderImpl extends AbstractGreenhouseConfigHolderBuilderImpl, GreenhouseInheritedConfigHolderBuilder, GreenhouseInheritedConfigHolder> implements GreenhouseInheritedConfigHolderBuilder { - private final GreenhouseConfigHolderBuilder rootConfig; + private final GreenhouseConfigHolderBuilder rootConfig; - public GreenhouseInheritedConfigHolderBuilderImpl(@NotNull GreenhouseConfigHolderBuilder inheritedConfig, - @NotNull Class extraClazz, - @NotNull GreenhouseConfigLang configLang, - @NotNull GreenhouseConfigDataFixerBuilder fixerBuilder, + public GreenhouseInheritedConfigHolderBuilderImpl(GreenhouseConfigHolderBuilder inheritedConfig, + Class extraClazz, + GreenhouseConfigLang configLang, + GreenhouseConfigDataFixerBuilder fixerBuilder, int schemaVersion) { - super(inheritedConfig.getModId(), extraClazz, ((GreenhouseConfigHolderBuilderImpl)inheritedConfig).localDataClazz, configLang, fixerBuilder, schemaVersion); + super(inheritedConfig.getModId(), extraClazz, ((GreenhouseConfigHolderBuilderImpl) inheritedConfig).localDataClazz, configLang, fixerBuilder, schemaVersion); this.rootConfig = inheritedConfig; } @@ -48,15 +47,16 @@ public final class GreenhouseInheritedConfigHolderBuilderImpl //noinspection unchecked return new GreenhouseInheritedConfigHolderImpl<>( - (Class>)(Object)InheritedConfigValue.class, + (Class>) (Object) InheritedConfigValue.class, + dataVersion, + fallbackSchemaVersion, modId, configLang, defaultCombined, combinedCodec, inheritedConfig.getStreamCodec(), fixerBuilder.build(), - dataVersion, - fallbackSchemaVersion, + fixerBuilder.getPreviousLangs(), loadCallback, populationCallback, depopulationCallback @@ -71,30 +71,30 @@ public final class GreenhouseInheritedConfigHolderBuilderImpl @Override public GreenhouseInheritedConfigHolderBuilderImpl withNetworkSerializedValue(String key, @Nullable String comments, - Codec codec, StreamCodec streamCodec, - V defaultValue, - Function getter) { + Codec codec, StreamCodec streamCodec, + V defaultValue, + Function getter) { throw new UnsupportedOperationException("Unable to serialize extra values within an inherited config. Use the original config to serialize values over the network"); } @Override public GreenhouseInheritedConfigHolderBuilderImpl withNetworkSerializedRegistryHolder(String key, @Nullable String comments, - ResourceKey> registry, - ResourceKey<@NotNull T> defaultValue, - Function> getter) { + ResourceKey> registry, + ResourceKey defaultValue, + Function> getter) { throw new UnsupportedOperationException("Unable to serialize extra values within an inherited config. Use the original config to serialize values over the network"); } @Override public GreenhouseInheritedConfigHolderBuilderImpl withNetworkSerializedRegistryHolders(String key, @Nullable String comments, - ResourceKey> registry, - Function> getter, - Consumer> consumer) { + ResourceKey> registry, + Function> getter, + Consumer> consumer) { throw new UnsupportedOperationException("Unable to serialize extra values within an inherited config. Use the original config to serialize values over the network"); } @Override - public @NotNull Function, Extra> getter() { + public Function, Extra> getter() { return InheritedConfigValue::extra; } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/package-info.java new file mode 100644 index 0000000..d6588b9 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/builder/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.config.builder; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/config/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/package-info.java new file mode 100644 index 0000000..bbcb658 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/config/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.config; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/dfu/GreenhouseConfigSchema.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/dfu/GreenhouseConfigSchema.java index 361504c..053b14d 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/dfu/GreenhouseConfigSchema.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/dfu/GreenhouseConfigSchema.java @@ -5,8 +5,7 @@ import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; import lgbt.greenhouse.config.api.v3.dfu.GreenhouseConfigDFUTypeReferences; import lgbt.greenhouse.config.api.v3.dfu.schema.TypeTemplateBuilder; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Collections; import java.util.Map; @@ -14,7 +13,7 @@ import java.util.Set; import java.util.function.Supplier; public final class GreenhouseConfigSchema { - @NotNull + public final Schema schema; private final Schema parent; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/dfu/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/dfu/package-info.java new file mode 100644 index 0000000..2bed28a --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/dfu/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.dfu; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/network/clientbound/SyncGreenhouseConfigClientboundPacket.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/network/clientbound/SyncGreenhouseConfigClientboundPacket.java index f08489f..e1602f1 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/network/clientbound/SyncGreenhouseConfigClientboundPacket.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/network/clientbound/SyncGreenhouseConfigClientboundPacket.java @@ -1,19 +1,19 @@ package lgbt.greenhouse.config.impl.network.clientbound; -import lgbt.greenhouse.config.impl.config.AbstractGreenhouseConfigHolderImpl; import lgbt.greenhouse.config.impl.GreenhouseConfigConstants; import lgbt.greenhouse.config.impl.GreenhouseConfigImpl; +import lgbt.greenhouse.config.impl.config.AbstractGreenhouseConfigHolderImpl; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.Identifier; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; -public record SyncGreenhouseConfigClientboundPacket(String configName, @Nullable Object config) implements CustomPacketPayload { +public record SyncGreenhouseConfigClientboundPacket(String configName, + @Nullable Object config) implements CustomPacketPayload { public static final Identifier ID = GreenhouseConfigConstants.id("sync_config"); - public static final Type<@NotNull SyncGreenhouseConfigClientboundPacket> TYPE = new Type<>(ID); - public static final StreamCodec<@NotNull FriendlyByteBuf, @NotNull SyncGreenhouseConfigClientboundPacket> STREAM_CODEC = StreamCodec.of(SyncGreenhouseConfigClientboundPacket::encode, SyncGreenhouseConfigClientboundPacket::decode); + public static final Type TYPE = new Type<>(ID); + public static final StreamCodec STREAM_CODEC = StreamCodec.of(SyncGreenhouseConfigClientboundPacket::encode, SyncGreenhouseConfigClientboundPacket::decode); public SyncGreenhouseConfigClientboundPacket(String configName) { this(configName, getNetworkData(configName)); @@ -23,9 +23,6 @@ public record SyncGreenhouseConfigClientboundPacket(String configName, @Nullable String configName = buf.readUtf(); AbstractGreenhouseConfigHolderImpl holder = GreenhouseConfigImpl.getConfigHolder(configName); - if (holder == null) - return new SyncGreenhouseConfigClientboundPacket(configName, null); - var streamCodec = holder.getStreamCodec(); if (streamCodec == null) return new SyncGreenhouseConfigClientboundPacket(configName, null); @@ -41,7 +38,7 @@ public record SyncGreenhouseConfigClientboundPacket(String configName, @Nullable if (holder == null) throw new IllegalArgumentException("Could not sync non existent config with id '" + configName + "'"); //noinspection unchecked - StreamCodec<@NotNull FriendlyByteBuf, @NotNull Object> streamCodec = (StreamCodec<@NotNull FriendlyByteBuf, @NotNull Object>) holder.getStreamCodec(); + StreamCodec streamCodec = (StreamCodec) holder.getStreamCodec(); if (streamCodec == null) throw new IllegalStateException("Could not sync non sync-able config"); if (packet.config == null) @@ -50,7 +47,7 @@ public record SyncGreenhouseConfigClientboundPacket(String configName, @Nullable } @Override - public @NotNull Type type() { + public Type type() { return TYPE; } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/network/clientbound/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/network/clientbound/package-info.java new file mode 100644 index 0000000..caaceda --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/network/clientbound/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.network.clientbound; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/network/serverbound/QueryGreenhouseConfigPacket.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/network/serverbound/QueryGreenhouseConfigPacket.java index 717a6a4..87a8f1e 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/network/serverbound/QueryGreenhouseConfigPacket.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/network/serverbound/QueryGreenhouseConfigPacket.java @@ -9,12 +9,11 @@ import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.Identifier; import net.minecraft.server.level.ServerPlayer; -import org.jetbrains.annotations.NotNull; public record QueryGreenhouseConfigPacket(GreenhouseConfigHolder holder) implements CustomPacketPayload { public static final Identifier ID = GreenhouseConfigConstants.id("query_config"); - public static final Type<@NotNull QueryGreenhouseConfigPacket> TYPE = new Type<>(ID); - public static final StreamCodec<@NotNull ByteBuf, @NotNull QueryGreenhouseConfigPacket> STREAM_CODEC = + public static final Type TYPE = new Type<>(ID); + public static final StreamCodec STREAM_CODEC = ByteBufCodecs.STRING_UTF8.map(key -> new QueryGreenhouseConfigPacket(GreenhouseConfigImpl.getConfigHolder(key)), packet -> packet.holder().getModId()); public void handle(ServerPlayer player) { @@ -24,7 +23,7 @@ public record QueryGreenhouseConfigPacket(GreenhouseConfigHolder holder) impl } @Override - public @NotNull Type type() { + public Type type() { return TYPE; } } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/network/serverbound/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/network/serverbound/package-info.java new file mode 100644 index 0000000..60b267c --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/network/serverbound/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.network.serverbound; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/package-info.java new file mode 100644 index 0000000..c3d9938 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/platform/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/platform/package-info.java new file mode 100644 index 0000000..b092506 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/platform/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.platform; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/platform/side/GreenhouseConfigSideHelper.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/platform/side/GreenhouseConfigSideHelper.java index 9d8ab9f..98fdb6c 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/platform/side/GreenhouseConfigSideHelper.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/platform/side/GreenhouseConfigSideHelper.java @@ -1,8 +1,8 @@ package lgbt.greenhouse.config.impl.platform.side; import lgbt.greenhouse.config.api.v3.config.GreenhouseConfigHolder; -import lgbt.greenhouse.config.impl.config.GreenhouseConfigHolderImpl; import lgbt.greenhouse.config.impl.GreenhouseConfigConstants; +import lgbt.greenhouse.config.impl.config.GreenhouseConfigHolderImpl; import org.jetbrains.annotations.ApiStatus; import java.util.ServiceLoader; @@ -14,6 +14,7 @@ public interface GreenhouseConfigSideHelper Config getConfig(GreenhouseConfigHolderImpl configHolder) { return getConfig(configHolder, false); } + Config getConfig(GreenhouseConfigHolder configHolder, boolean local); @ApiStatus.Internal diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/platform/side/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/platform/side/package-info.java new file mode 100644 index 0000000..45ea087 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/platform/side/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.platform.side; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/server/dedicated/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/server/dedicated/package-info.java new file mode 100644 index 0000000..323a7a7 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/server/dedicated/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.server.dedicated; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/server/dedicated/platform/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/server/dedicated/platform/package-info.java new file mode 100644 index 0000000..eb2537a --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/server/dedicated/platform/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.server.dedicated.platform; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/server/dedicated/platform/side/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/server/dedicated/platform/side/package-info.java new file mode 100644 index 0000000..a2a3cf1 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/server/dedicated/platform/side/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.server.dedicated.platform.side; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/server/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/server/package-info.java new file mode 100644 index 0000000..6c78199 --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/server/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.server; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/util/ReflectionUtils.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/util/ReflectionUtils.java index e87b12d..eb11189 100644 --- a/xplat/src/main/java/lgbt/greenhouse/config/impl/util/ReflectionUtils.java +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/util/ReflectionUtils.java @@ -6,17 +6,18 @@ import com.mojang.serialization.codecs.KeyDispatchCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import lgbt.greenhouse.config.impl.codec.CommonFieldEntry; import org.apache.commons.lang3.reflect.ConstructorUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.lang.reflect.Constructor; import java.lang.reflect.Field; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.function.Function; import java.util.function.Supplier; public class ReflectionUtils { - public static Supplier createFromFieldsOrThrow(String modId, Class clazz, List> fields) { + public static Supplier createFromFieldsOrThrow(String modId, Class clazz, List> fields) { return () -> { try { return ReflectionUtils.createFromFields(clazz, fields); @@ -53,7 +54,7 @@ public class ReflectionUtils { .newInstance(values); } - @NotNull + public static Constructor findConstructorForValues(Class clazz, Object[] values) { Class[] valueClasses = Arrays.stream(values) .map(Object::getClass) @@ -85,9 +86,10 @@ public class ReflectionUtils { /** * Potentially gets a RecordCodecBuilder from a map codec. + * * @param mapCodec A MapCodec. * @return The internal RecordCodecBuilder, or null if the MapCodec is not a RecordCodecBuilder based codec. - */ + */ @Nullable public static RecordCodecBuilder reflectInternalBuilderFromRecordCodec(MapCodec mapCodec) { try { @@ -153,7 +155,8 @@ public class ReflectionUtils { } } } - } catch (IllegalAccessException ignored) {} + } catch (IllegalAccessException ignored) { + } return decoders; } @@ -175,7 +178,8 @@ public class ReflectionUtils { var decoder = (Function>>) decoderField.get(dispatchCodec); return decoder.apply(result).resultOrPartial().orElseThrow(); } - } catch (Exception ignored) {} + } catch (Exception ignored) { + } throw new UnsupportedOperationException("Could not obtain either 'keyCodec' or 'decoder' field within KeyDispatchCodec."); } } diff --git a/xplat/src/main/java/lgbt/greenhouse/config/impl/util/package-info.java b/xplat/src/main/java/lgbt/greenhouse/config/impl/util/package-info.java new file mode 100644 index 0000000..f097cfb --- /dev/null +++ b/xplat/src/main/java/lgbt/greenhouse/config/impl/util/package-info.java @@ -0,0 +1,6 @@ +@ApiStatus.Internal +@NullMarked +package lgbt.greenhouse.config.impl.util; + +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; diff --git a/xplat/src/test/java/lgbt/greenhouse/config/test/GreenhouseConfigTest.java b/xplat/src/test/java/lgbt/greenhouse/config/test/GreenhouseConfigTest.java index af7296a..bdf7cc6 100644 --- a/xplat/src/test/java/lgbt/greenhouse/config/test/GreenhouseConfigTest.java +++ b/xplat/src/test/java/lgbt/greenhouse/config/test/GreenhouseConfigTest.java @@ -10,8 +10,8 @@ import lgbt.greenhouse.config.api.v3.config.builder.GreenhouseConfigHolderBuilde import lgbt.greenhouse.config.api.v3.lang.GreenhouseConfigJsonCLang; import lgbt.greenhouse.config.impl.GreenhouseConfigConstants; import lgbt.greenhouse.config.test.command.TestCommand; -import lgbt.greenhouse.config.test.config.CommonConfig; import lgbt.greenhouse.config.test.config.ColorConfig; +import lgbt.greenhouse.config.test.config.CommonConfig; import lgbt.greenhouse.config.test.config.RecordCodecBuilderConfig; import lgbt.greenhouse.config.test.config.SplitCommonConfig; import lgbt.greenhouse.config.test.registry.DeferredRegistry; @@ -28,7 +28,6 @@ import net.minecraft.sounds.SoundEvent; import net.minecraft.tags.TagKey; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; -import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; public class GreenhouseConfigTest { @@ -38,8 +37,8 @@ public class GreenhouseConfigTest { public static final DeferredRegistry SOUND_EVENT_REGISTRY = DeferredRegistry.create(BuiltInRegistries.SOUND_EVENT); public static final DeferredValue SYLV_FAN = SOUND_EVENT_REGISTRY.register("sylv_fan", () -> SoundEvent.createVariableRangeEvent(id("sylv_fan"))); - public static final ResourceKey<@NotNull Block> NETHERRACK = ResourceKey.create(Registries.BLOCK, Identifier.withDefaultNamespace("netherrack")); - public static final TagKey<@NotNull Biome> GREENS = TagKey.create(Registries.BIOME, id("greens")); + public static final ResourceKey NETHERRACK = ResourceKey.create(Registries.BLOCK, Identifier.withDefaultNamespace("netherrack")); + public static final TagKey GREENS = TagKey.create(Registries.BIOME, id("greens")); public static GreenhouseConfigHolder CONFIG = GreenhouseConfigHolder.register( CommonConfig.class, @@ -60,12 +59,12 @@ public class GreenhouseConfigTest { builder -> builder .withNetworkSerializedValue( "sylv_fan_volume", - """ + """ The volume of Sylv's fan ⚠️ WARNING LOUD""", - Codec.LONG, - ByteBufCodecs.LONG, - Long.MAX_VALUE, + Codec.DOUBLE, + ByteBufCodecs.DOUBLE, + Double.MAX_VALUE, SplitCommonConfig::volumeOfSylvsFan ) ); @@ -135,7 +134,7 @@ public class GreenhouseConfigTest { LiteralCommandNode reloadRawCodecNode = Commands .literal("raw_codec") - .executes(context -> TestCommand.executeConfigReload(context, RAW_CODEC_CONFIG)) + .executes(context -> TestCommand.executeConfigReload(context, RAW_CODEC_CONFIG)) .build(); LiteralCommandNode reloadSplitNode = Commands diff --git a/xplat/src/test/java/lgbt/greenhouse/config/test/client/GreenhouseConfigTestClient.java b/xplat/src/test/java/lgbt/greenhouse/config/test/client/GreenhouseConfigTestClient.java index f21811e..7bf2001 100644 --- a/xplat/src/test/java/lgbt/greenhouse/config/test/client/GreenhouseConfigTestClient.java +++ b/xplat/src/test/java/lgbt/greenhouse/config/test/client/GreenhouseConfigTestClient.java @@ -100,6 +100,6 @@ public class GreenhouseConfigTestClient { ghTestNode.addChild(reloadNode); //noinspection unchecked - ((CommandNode)dispatcher.getRoot()).addChild(ghTestNode); + ((CommandNode) dispatcher.getRoot()).addChild(ghTestNode); } } diff --git a/xplat/src/test/java/lgbt/greenhouse/config/test/client/gui/GradientRectRenderState.java b/xplat/src/test/java/lgbt/greenhouse/config/test/client/gui/GradientRectRenderState.java index 5e0e54e..9c87516 100644 --- a/xplat/src/test/java/lgbt/greenhouse/config/test/client/gui/GradientRectRenderState.java +++ b/xplat/src/test/java/lgbt/greenhouse/config/test/client/gui/GradientRectRenderState.java @@ -8,9 +8,8 @@ import net.minecraft.client.gui.navigation.ScreenRectangle; import net.minecraft.client.gui.render.TextureSetup; import net.minecraft.client.gui.render.state.GuiElementRenderState; import net.minecraft.client.renderer.RenderPipelines; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.joml.Matrix3x2f; +import org.jspecify.annotations.Nullable; public record GradientRectRenderState( RenderPipeline pipeline, @@ -62,7 +61,7 @@ public record GradientRectRenderState( } @Override - public void buildVertices(@NotNull VertexConsumer vertexConsumer) { + public void buildVertices(VertexConsumer vertexConsumer) { switch (this.direction()) { case LEFT_TO_RIGHT -> { vertexConsumer.addVertexWith2DPose(this.pose(), this.minX(), this.minY()).setColor(this.colorStart()); @@ -94,7 +93,7 @@ public record GradientRectRenderState( int colorEnd, GradientDirection direction ) { - ((Accessor_GuiGraphics)graphics).greenhouseoconfig_test$getGuiRenderState().submitGuiElement(new GradientRectRenderState( + ((Accessor_GuiGraphics) graphics).greenhouseoconfig_test$getGuiRenderState().submitGuiElement(new GradientRectRenderState( graphics, minX, minY, @@ -103,7 +102,7 @@ public record GradientRectRenderState( colorStart, colorEnd, direction, - ((Accessor_GuiGraphics)graphics).greenhouseoconfig_test$getScissorStack().peek() + ((Accessor_GuiGraphics) graphics).greenhouseoconfig_test$getScissorStack().peek() )); } } diff --git a/xplat/src/test/java/lgbt/greenhouse/config/test/client/screen/GreenhouseConfigTestScreen.java b/xplat/src/test/java/lgbt/greenhouse/config/test/client/screen/GreenhouseConfigTestScreen.java index 46644cc..0374faa 100644 --- a/xplat/src/test/java/lgbt/greenhouse/config/test/client/screen/GreenhouseConfigTestScreen.java +++ b/xplat/src/test/java/lgbt/greenhouse/config/test/client/screen/GreenhouseConfigTestScreen.java @@ -19,8 +19,7 @@ import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TextColor; import net.minecraft.util.ARGB; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.function.Consumer; @@ -80,7 +79,7 @@ public class GreenhouseConfigTestScreen extends Screen { } @Override - public void render(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { + public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { super.render(graphics, mouseX, mouseY, partialTick); if (savedMessageTime > 0) { float timeMultiplier = savedMessageTime - partialTick; @@ -112,7 +111,7 @@ public class GreenhouseConfigTestScreen extends Screen { } @Override - protected void insertText(@NotNull String text, boolean overwrite) { + protected void insertText(String text, boolean overwrite) { if (splitCommonColorWidget.getTextBox().canConsumeInput()) { if (overwrite) { splitCommonColorWidget.getTextBox().setValue(text); diff --git a/xplat/src/test/java/lgbt/greenhouse/config/test/client/screen/widget/ColorWidget.java b/xplat/src/test/java/lgbt/greenhouse/config/test/client/screen/widget/ColorWidget.java index a4504ed..7c70381 100644 --- a/xplat/src/test/java/lgbt/greenhouse/config/test/client/screen/widget/ColorWidget.java +++ b/xplat/src/test/java/lgbt/greenhouse/config/test/client/screen/widget/ColorWidget.java @@ -23,8 +23,7 @@ import net.minecraft.network.chat.TextColor; import net.minecraft.resources.Identifier; import net.minecraft.util.ARGB; import net.minecraft.util.Mth; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.List; @@ -50,7 +49,7 @@ public class ColorWidget extends AbstractColorWidget { this.defaultValue = defaultValue; this.defaultButton = new AbstractButton(x + 110, y, 12, 12, Component.literal("")) { @Override - public void onPress(@NotNull InputWithModifiers input) { + public void onPress(InputWithModifiers input) { if (getColor().getValue() != defaultValue.getValue()) { setColor(defaultValue); textBox.setValue(defaultValue.serialize()); @@ -59,7 +58,7 @@ public class ColorWidget extends AbstractColorWidget { } @Override - protected void renderContents(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { + protected void renderContents(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { renderDefaultSprite(graphics); graphics.blitSprite(RenderPipelines.GUI_TEXTURED, DEFAULT_BUTTON.get(active, isHoveredOrFocused()), getX(), getY(), 12, 12); if (isHovered() && !isServerControlled()) @@ -74,7 +73,7 @@ public class ColorWidget extends AbstractColorWidget { } @Override - protected void updateWidgetNarration(@NotNull NarrationElementOutput narrationElementOutput) { + protected void updateWidgetNarration(NarrationElementOutput narrationElementOutput) { narrationElementOutput.add(NarratedElementType.POSITION, Component.literal("Reset to Default Color")); } }; @@ -132,7 +131,7 @@ public class ColorWidget extends AbstractColorWidget { } @Override - public boolean mouseClicked(@NotNull MouseButtonEvent event, boolean isDoubleClick) { + public boolean mouseClicked(MouseButtonEvent event, boolean isDoubleClick) { if (textBox.mouseClicked(event, isDoubleClick)) { currentlyActive = null; currentSlider = 0.0F; @@ -174,7 +173,7 @@ public class ColorWidget extends AbstractColorWidget { } @Override - protected void onDrag(@NotNull MouseButtonEvent event, double dragX, double dragY) { + protected void onDrag(MouseButtonEvent event, double dragX, double dragY) { if (isFocused() && !textBox.canConsumeInput()) { double originMouse = Mth.clampedLerp(currentSlider, getRectangle().left(), getRectangle().right()); float diff = (float) (event.x() - originMouse) / 120.0F; @@ -184,21 +183,21 @@ public class ColorWidget extends AbstractColorWidget { } @Override - public boolean keyPressed(@NotNull KeyEvent event) { + public boolean keyPressed(KeyEvent event) { if (textBox.canConsumeInput()) return textBox.keyPressed(event); return super.keyPressed(event); } @Override - public boolean charTyped(@NotNull CharacterEvent event) { + public boolean charTyped(CharacterEvent event) { if (textBox.canConsumeInput()) return textBox.charTyped(event); return super.charTyped(event); } @Override - public void onRelease(@NotNull MouseButtonEvent event) { + public void onRelease(MouseButtonEvent event) { if (isFocused() && !textBox.canConsumeInput()) { setFocused(false); setDirty(true); @@ -210,7 +209,7 @@ public class ColorWidget extends AbstractColorWidget { } @Override - protected void renderWidget(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { + protected void renderWidget(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { renderColorBox(graphics, getX(), getY()); textBox.renderWidget(graphics, mouseX, mouseY, partialTick); defaultButton.render(graphics, mouseX, mouseY, partialTick); @@ -244,7 +243,7 @@ public class ColorWidget extends AbstractColorWidget { } @Override - protected boolean isValidClickButton(@NotNull MouseButtonInfo buttonInfo) { + protected boolean isValidClickButton(MouseButtonInfo buttonInfo) { return !isServerControlled() && super.isValidClickButton(buttonInfo); } diff --git a/xplat/src/test/java/lgbt/greenhouse/config/test/command/TestCommand.java b/xplat/src/test/java/lgbt/greenhouse/config/test/command/TestCommand.java index a25095d..00a23fe 100644 --- a/xplat/src/test/java/lgbt/greenhouse/config/test/command/TestCommand.java +++ b/xplat/src/test/java/lgbt/greenhouse/config/test/command/TestCommand.java @@ -26,7 +26,7 @@ public class TestCommand { } public static int simulateSylvFan(CommandContext context, String value) { - Vec3 pos = context.getSource().getPosition(); + Vec3 pos = context.getSource().getPosition(); context.getSource().sendSuccess(() -> Component.literal(value), false); context.getSource().getLevel().playSound(null, pos.x(), pos.y(), pos.z(), GreenhouseConfigTest.SYLV_FAN.get(), SoundSource.PLAYERS, 2.0F, 1.0F); return 1; diff --git a/xplat/src/test/java/lgbt/greenhouse/config/test/config/CommonConfig.java b/xplat/src/test/java/lgbt/greenhouse/config/test/config/CommonConfig.java index a437709..a143c21 100644 --- a/xplat/src/test/java/lgbt/greenhouse/config/test/config/CommonConfig.java +++ b/xplat/src/test/java/lgbt/greenhouse/config/test/config/CommonConfig.java @@ -21,7 +21,6 @@ import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biomes; import net.minecraft.world.level.block.Block; -import org.jetbrains.annotations.NotNull; import java.util.Map; import java.util.function.IntFunction; @@ -32,8 +31,8 @@ import static lgbt.greenhouse.config.test.GreenhouseConfigTest.NETHERRACK; public record CommonConfig(int silly, EnchantmentOpinionEntry enchantmentOpinion, - HolderSet<@NotNull Block> redBlocks, - HolderSet<@NotNull Biome> greenBiomes) { + HolderSet redBlocks, + HolderSet greenBiomes) { public static void buildConfig(GreenhouseConfigHolderBuilder builder) { builder .withNetworkSerializedValue("silly", @@ -45,8 +44,8 @@ public record CommonConfig(int silly, ).withMapValue(CommonConfig.EnchantmentOpinionEntry.class, "enchantment_opinion", """ - An enchantment that you either like or dislike. - Note: Calico was not biased here.""", + An enchantment that you either like or dislike. + Note: Calico was not biased here.""", CommonConfig::enchantmentOpinion, opinionBuilder -> opinionBuilder.withNetworkSerializedRegistryHolder( "enchantment", @@ -57,8 +56,8 @@ public record CommonConfig(int silly, ).withNetworkSerializedValue( "opinion", """ - An opinion you wish to provide to the listed enchantment. - May be either 'like' or 'dislike'.""", + An opinion you wish to provide to the listed enchantment. + May be either 'like' or 'dislike'.""", CommonConfig.Opinion.CODEC, CommonConfig.Opinion.STREAM_CODEC, CommonConfig.Opinion.LIKE, @@ -74,8 +73,8 @@ public record CommonConfig(int silly, ).withNetworkSerializedRegistryHolders( "green_biomes", """ - Biomes that are green. - This is an extra line to show how green they really are!""", + Biomes that are green. + This is an extra line to show how green they really are!""", Registries.BIOME, CommonConfig::greenBiomes, biomeBuilder -> biomeBuilder @@ -171,7 +170,8 @@ public record CommonConfig(int silly, ); } - public record EnchantmentOpinionEntry(Holder<@NotNull Enchantment> enchantment, Opinion opinion) {} + public record EnchantmentOpinionEntry(Holder enchantment, Opinion opinion) { + } public enum Opinion implements StringRepresentable { LIKE("like", 0), @@ -179,7 +179,7 @@ public record CommonConfig(int silly, public static final Codec CODEC = StringRepresentable.fromEnum(Opinion::values); public static final IntFunction BY_ID = ByIdMap.continuous(Opinion::id, values(), ByIdMap.OutOfBoundsStrategy.ZERO); - public static final StreamCodec<@NotNull ByteBuf, @NotNull Opinion> STREAM_CODEC = ByteBufCodecs.idMapper(BY_ID, Opinion::id); + public static final StreamCodec STREAM_CODEC = ByteBufCodecs.idMapper(BY_ID, Opinion::id); final String name; final int id; @@ -190,7 +190,7 @@ public record CommonConfig(int silly, } @Override - public @NotNull String getSerializedName() { + public String getSerializedName() { return name; } diff --git a/xplat/src/test/java/lgbt/greenhouse/config/test/config/RecordCodecBuilderConfig.java b/xplat/src/test/java/lgbt/greenhouse/config/test/config/RecordCodecBuilderConfig.java index 46d16b7..689ff05 100644 --- a/xplat/src/test/java/lgbt/greenhouse/config/test/config/RecordCodecBuilderConfig.java +++ b/xplat/src/test/java/lgbt/greenhouse/config/test/config/RecordCodecBuilderConfig.java @@ -18,7 +18,7 @@ public record RecordCodecBuilderConfig(String meow, boolean notNull, Cirno cirno (Source: Trust me)""", Codec.BOOL, true) .forGetter(RecordCodecBuilderConfig::notNull), GreenhouseConfigValueCodec.create("cirno", """ - The Ice Fairy of the Gensokyo Lake""", Cirno.CODEC, new Cirno(1, 2, 3, 4, 5, 6, 7, 8, 9)) + The Ice Fairy of the Gensokyo Lake""", Cirno.CODEC, new Cirno(1, 2, 3, 4, 5, 6, 7, 8, 9)) .forGetter(RecordCodecBuilderConfig::cirno) ).apply(inst, RecordCodecBuilderConfig::new)); public static final Codec V1_CODEC = RecordCodecBuilder.create(inst -> inst.group( diff --git a/xplat/src/test/java/lgbt/greenhouse/config/test/config/SplitCommonConfig.java b/xplat/src/test/java/lgbt/greenhouse/config/test/config/SplitCommonConfig.java index 7452082..84c1de2 100644 --- a/xplat/src/test/java/lgbt/greenhouse/config/test/config/SplitCommonConfig.java +++ b/xplat/src/test/java/lgbt/greenhouse/config/test/config/SplitCommonConfig.java @@ -1,3 +1,4 @@ package lgbt.greenhouse.config.test.config; -public record SplitCommonConfig(long volumeOfSylvsFan) {} +public record SplitCommonConfig(double volumeOfSylvsFan) { +} diff --git a/xplat/src/test/java/lgbt/greenhouse/config/test/mixin/client/Accessor_GuiGraphics.java b/xplat/src/test/java/lgbt/greenhouse/config/test/mixin/client/Accessor_GuiGraphics.java index 899ecd8..c8e4795 100644 --- a/xplat/src/test/java/lgbt/greenhouse/config/test/mixin/client/Accessor_GuiGraphics.java +++ b/xplat/src/test/java/lgbt/greenhouse/config/test/mixin/client/Accessor_GuiGraphics.java @@ -9,6 +9,7 @@ import org.spongepowered.asm.mixin.gen.Accessor; public interface Accessor_GuiGraphics { @Accessor("guiRenderState") GuiRenderState greenhouseoconfig_test$getGuiRenderState(); + @Accessor("scissorStack") GuiGraphics.ScissorStack greenhouseoconfig_test$getScissorStack(); } diff --git a/xplat/src/test/resources/data/greenhouseconfig_test/tags/worldgen/biome/greens.json b/xplat/src/test/resources/data/greenhouseconfig_test/tags/worldgen/biome/greens.json index ce94042..b2bc487 100644 --- a/xplat/src/test/resources/data/greenhouseconfig_test/tags/worldgen/biome/greens.json +++ b/xplat/src/test/resources/data/greenhouseconfig_test/tags/worldgen/biome/greens.json @@ -1,6 +1,6 @@ { - "replace": false, - "values": [ - "minecraft:forest" - ] + "replace": false, + "values": [ + "minecraft:forest" + ] } diff --git a/xplat/src/test/resources/greenhouseconfig_test.mixins.json b/xplat/src/test/resources/greenhouseconfig_test.mixins.json index 2ec27da..0f9ba6c 100644 --- a/xplat/src/test/resources/greenhouseconfig_test.mixins.json +++ b/xplat/src/test/resources/greenhouseconfig_test.mixins.json @@ -1,14 +1,14 @@ { - "required": true, - "minVersion": "0.8", - "package": "lgbt.greenhouse.config.test.mixin", - "refmap": "${mod_id}.refmap.json", - "compatibilityLevel": "JAVA_21", - "client": [ - "client.Accessor_GuiGraphics", - "client.Mixin_Minecraft" - ], - "injectors": { - "defaultRequire": 1 + "required": true, + "minVersion": "0.8", + "package": "lgbt.greenhouse.config.test.mixin", + "refmap": "${mod_id}.refmap.json", + "compatibilityLevel": "JAVA_21", + "client": [ + "client.Accessor_GuiGraphics", + "client.Mixin_Minecraft" + ], + "injectors": { + "defaultRequire": 1 } } -- 2.51.2