diff --git a/gradle.properties b/gradle.properties index fa85abf7..96b1355b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,13 +8,14 @@ modBaseName=blockui javaVersion=21 useJavaToolChains=true + #The currently running forge. -forgeVersion=21.0.75-beta +forgeVersion=21.0.157 #The minimal needed forge, as marked in metadata and curseforge. -forgeMinVersion=21.0.75-beta +forgeMinVersion=21.0.157 fml_range=[4,) -forge_range=[21.0.75-beta,) +forge_range=[21.0.157,) minecraft_range=[1.21, 1.22) #The version for forge (dependency) @@ -32,9 +33,13 @@ projectUrl=https://github.com/ldtteam/BlockUI curseId=522992 usesCurse=true -usesCrowdin=false +usesParchment=true +parchmentMinecraftVersion=1.21 +parchmentMappingsVersion=2024.07.28 + useDefaultTestSystem=true -runtimeSourceSets=main -projectHasApi=false -primaryJarClassifier= -usesSonarQube=false +usesResourceDataExpansionFromProjectKeys=false + +usesCrowdInTranslationManagement=false +usesCrowdInBuildingWithFilteredBranches=false +usesCrowdInUploadWithFilteredBranches=false diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d64cd491..2c352119 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4413138..09523c0e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a42..f5feea6d 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 25da30db..9d21a218 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/src/main/java/com/ldtteam/common/config/AbstractConfiguration.java b/src/main/java/com/ldtteam/common/config/AbstractConfiguration.java index 9f9a5639..7d9b2417 100644 --- a/src/main/java/com/ldtteam/common/config/AbstractConfiguration.java +++ b/src/main/java/com/ldtteam/common/config/AbstractConfiguration.java @@ -11,6 +11,7 @@ import net.neoforged.neoforge.common.ModConfigSpec.EnumValue; import net.neoforged.neoforge.common.ModConfigSpec.IntValue; import net.neoforged.neoforge.common.ModConfigSpec.LongValue; +import net.neoforged.neoforge.common.ModConfigSpec.RestartType; import net.neoforged.neoforge.common.util.LogicalSidedProvider; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -18,6 +19,7 @@ import java.util.List; import java.util.Objects; import java.util.function.Predicate; +import java.util.function.Supplier; import java.util.stream.Collectors; public abstract class AbstractConfiguration @@ -29,7 +31,7 @@ public abstract class AbstractConfiguration private final Builder builder; private final String modId; - private boolean nextDefineWorldRestart = false; + private RestartType nextRestartType = RestartType.NONE; protected AbstractConfiguration(final Builder builder, final String modId) { @@ -39,7 +41,7 @@ protected AbstractConfiguration(final Builder builder, final String modId) protected void createCategory(final String key) { - if (nextDefineWorldRestart) + if (nextRestartType != RestartType.NONE) { throw new IllegalStateException("Categories cannot have worldRestart flag!"); } @@ -72,11 +74,13 @@ private String commentTKey(final String key) */ private Builder buildBase(final String key, @Nullable final String defaultDesc) { - if (nextDefineWorldRestart) + switch (nextRestartType) { - nextDefineWorldRestart = false; - builder.worldRestart(); + case WORLD -> builder.worldRestart(); + case GAME -> builder.gameRestart(); + default -> {} } + nextRestartType = RestartType.NONE; String comment = translate(commentTKey(key)); if (defaultDesc != null && !defaultDesc.isBlank()) @@ -94,7 +98,17 @@ private static String translate(final String key, final Object... args) protected AbstractConfiguration requiresWorldRestart() { - nextDefineWorldRestart = true; + return requires(RestartType.WORLD); + } + + protected AbstractConfiguration requiresGameRestart() + { + return requires(RestartType.GAME); + } + + protected AbstractConfiguration requires(final RestartType restartType) + { + nextRestartType = restartType; return this; } @@ -141,6 +155,11 @@ protected DoubleValue defineDouble(final String key, final double defaultValue, .defineInRange(key, defaultValue, min, max); } + /** + * @deprecated by neo, potentially forRemoval? + * @see #defineList(String, Supplier, Predicate, Object...) + */ + @Deprecated(since = "1.21") protected ConfigValue> defineList(final String key, final List defaultValue, final Predicate elementValidator) @@ -148,6 +167,28 @@ protected ConfigValue> defineList(final String key, return buildBase(key, null).defineList(key, defaultValue, elementValidator); } + protected ConfigValue> defineList(final String key, + final Supplier newUiInstance, + final Predicate elementValidator, + final List defaultValue) + { + return buildBase(key, null).defineList(key, defaultValue, newUiInstance, elementValidator); + } + + @SuppressWarnings("unchecked") + protected ConfigValue> defineList(final String key, + final Supplier newUiInstance, + final Predicate elementValidator, + final T... values) + { + return buildBase(key, null).defineList(key, () -> List.of(values), newUiInstance, elementValidator); + } + + /** + * @deprecated by neo, potentially forRemoval? + * @see #defineListAllowEmpty(String, Supplier, Predicate, Object...) + */ + @Deprecated(since = "1.21") protected ConfigValue> defineListAllowEmpty(final String key, final List defaultValue, final Predicate elementValidator) @@ -155,6 +196,23 @@ protected ConfigValue> defineListAllowEmpty(final String k return buildBase(key, null).defineListAllowEmpty(key, defaultValue, elementValidator); } + protected ConfigValue> defineListAllowEmpty(final String key, + final Supplier newUiInstance, + final Predicate elementValidator, + final List defaultValue) + { + return buildBase(key, null).defineListAllowEmpty(key, defaultValue, newUiInstance, elementValidator); + } + + @SuppressWarnings("unchecked") + protected ConfigValue> defineListAllowEmpty(final String key, + final Supplier newUiInstance, + final Predicate elementValidator, + final T... values) + { + return buildBase(key, null).defineListAllowEmpty(key, () -> List.of(values), newUiInstance, elementValidator); + } + protected > EnumValue defineEnum(final String key, final V defaultValue) { return buildBase(key, diff --git a/src/main/java/com/ldtteam/common/config/Configurations.java b/src/main/java/com/ldtteam/common/config/Configurations.java index 1ade6fdb..ba77dd6b 100644 --- a/src/main/java/com/ldtteam/common/config/Configurations.java +++ b/src/main/java/com/ldtteam/common/config/Configurations.java @@ -3,6 +3,7 @@ import com.ldtteam.common.config.AbstractConfiguration.ConfigWatcher; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; +import net.neoforged.fml.config.ConfigTracker; import net.neoforged.fml.config.ModConfig; import net.neoforged.fml.config.ModConfig.Type; import net.neoforged.fml.event.config.ModConfigEvent; @@ -13,9 +14,7 @@ import net.neoforged.neoforge.common.ModConfigSpec.ValueSpec; import org.apache.commons.lang3.tuple.Pair; import java.util.ArrayList; -import java.util.IdentityHashMap; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.function.Function; @@ -44,7 +43,6 @@ public class Configurations serverFactory, final Function commonFactory) { - final List modConfigs = new ArrayList<>(); final List configs = new ArrayList<>(); - final Pair cli = createConfig(clientFactory, Type.CLIENT, modContainer, modConfigs, configs); + final Pair cli = createConfig(clientFactory, Type.CLIENT, modContainer, configs); client = cli.getRight(); clientConfig = cli.getLeft(); - final Pair ser = createConfig(serverFactory, Type.SERVER, modContainer, modConfigs, configs); + final Pair ser = createConfig(serverFactory, Type.SERVER, modContainer, configs); server = ser.getRight(); serverConfig = ser.getLeft(); - final Pair com = createConfig(commonFactory, Type.COMMON, modContainer, modConfigs, configs); + final Pair com = createConfig(commonFactory, Type.COMMON, modContainer, configs); common = com.getRight(); commonConfig = com.getLeft(); - activeModConfigs = modConfigs.toArray(ModConfig[]::new); activeConfigs = configs.toArray(AbstractConfiguration[]::new); // register events for watchers @@ -84,7 +80,6 @@ public Configurations(final ModContainer modContainer, private Pair createConfig(final Function factory, final Type type, final ModContainer modContainer, - final List modConfigs, final List configs) { // dont create client classes on server to avoid class loading issues @@ -94,11 +89,11 @@ private Pair createConfig(final } final Pair builtConfig = new ModConfigSpec.Builder().configure(factory); - final ModConfig modConfig = new ModConfig(type, builtConfig.getRight(), modContainer); + // modContainer.registerConfig(type, builtConfig.getRight()); + // TODO: replace in the future with the return of registerConfig above + final ModConfig modConfig = ConfigTracker.INSTANCE.registerConfig(type, builtConfig.getRight(), modContainer); final T config = builtConfig.getLeft(); - modContainer.addConfig(modConfig); - modConfigs.add(modConfig); configs.add(config); return Pair.of(config, modConfig); @@ -186,29 +181,13 @@ public void onConfigValueEdit(final ConfigValue configValue) } } - private final Map, Optional> valueSpecCache = new IdentityHashMap<>(); - /** * @param value config value from this mod * @return value spec, crashes in dev if not found */ + @Deprecated(forRemoval = true, since = "1.21") public Optional getSpecFromValue(final ConfigValue value) { - return valueSpecCache.computeIfAbsent(value, key -> { - for (final ModConfig cfg : activeModConfigs) - { - if (cfg.getSpec().get(value.getPath()) instanceof final ValueSpec valueSpec) - { - return Optional.of(valueSpec); - } - } - - if (!FMLEnvironment.production) - { - throw new RuntimeException("Cannot find backing ValueSpec for: " + value.getPath()); - } - - return Optional.empty(); - }); + return Optional.of(value.getSpec()); } } diff --git a/src/main/java/com/ldtteam/common/fakelevel/FakeLevel.java b/src/main/java/com/ldtteam/common/fakelevel/FakeLevel.java index 743de7cd..601a962c 100644 --- a/src/main/java/com/ldtteam/common/fakelevel/FakeLevel.java +++ b/src/main/java/com/ldtteam/common/fakelevel/FakeLevel.java @@ -486,6 +486,18 @@ public PotionBrewing potionBrewing() return realLevel().potionBrewing(); } + @Override + public float getDayTimeFraction() + { + return realLevel().getDayTimeFraction(); + } + + @Override + public float getDayTimePerTick() + { + return realLevel().getDayTimePerTick(); + } + // ======================================== // ======= NOOP UNSAFE NULL METHODS ======= // ======================================== @@ -806,6 +818,18 @@ public void invalidateCapabilities(ChunkPos pos) // Noop } + @Override + public void setDayTimeFraction(final float v) + { + // Noop + } + + @Override + public void setDayTimePerTick(final float v) + { + // Noop + } + // ======================================== // ======== SUPER IS FINE METHODS ========= // ========================================