fix: avoid premature muScript initialization with libjf-config-reflect
ci/woodpecker/push/docs Pipeline was successful Details
ci/woodpecker/push/jfmod Pipeline was successful Details

This commit is contained in:
Johannes Frohnmeyer 2023-09-02 22:27:23 +02:00
parent 5b8164e855
commit 0611e42731
Signed by: Johannes
GPG Key ID: E76429612C2929F4
4 changed files with 13 additions and 9 deletions

View File

@ -2,14 +2,14 @@ package io.gitlab.jfronny.respackopts.integration;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
import io.gitlab.jfronny.respackopts.Respackopts;
import io.gitlab.jfronny.respackopts.RespackoptsClient;
import io.gitlab.jfronny.respackopts.RespackoptsConfig;
public class ModMenuIntegration implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return parent -> {
io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory.Built<?> built = io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory.getInstance().create(Respackopts.CONFIG, parent);
io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory.Built<?> built = io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory.getInstance().create(RespackoptsConfig.configInstance, parent);
built.onSave(() -> {
if (RespackoptsClient.forcePackReload) {
RespackoptsClient.forceReloadResources();

View File

@ -3,7 +3,6 @@ package io.gitlab.jfronny.respackopts;
import io.gitlab.jfronny.commons.log.Logger;
import io.gitlab.jfronny.gson.Gson;
import io.gitlab.jfronny.gson.GsonBuilder;
import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
import io.gitlab.jfronny.muscript.StandardLib;
import io.gitlab.jfronny.muscript.ast.*;
import io.gitlab.jfronny.muscript.data.Scope;
@ -82,11 +81,9 @@ public class Respackopts implements ModInitializer, SaveHook {
ServerInstanceHolder.init();
}
public static ConfigInstance CONFIG;
@Override
public CompletableFuture<Void> onSave(Arguments args) {
CONFIG.write();
RespackoptsConfig.configInstance.write();
if (args.reloadData() && FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER) {
ServerInstanceHolder.reloadResources();

View File

@ -4,6 +4,7 @@ import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
import io.gitlab.jfronny.libjf.config.api.v1.JfCustomConfig;
import io.gitlab.jfronny.libjf.config.api.v1.dsl.DSL;
import io.gitlab.jfronny.respackopts.util.MetaCache;
import net.fabricmc.loader.api.FabricLoader;
import java.util.LinkedList;
import java.util.List;
@ -14,16 +15,21 @@ public class RespackoptsConfig implements JfCustomConfig {
public static boolean ioLogs = false;
public static boolean dashloaderCompat = true;
public static boolean packsInitialized = false;
public static ConfigInstance configInstance = null;
@Override
public void register(DSL.Defaulted dsl) {
if (Respackopts.CONFIG != null) return;
Respackopts.CONFIG = dsl.register(builder -> builder
if (configInstance != null) return;
configInstance = dsl.register(builder -> builder
.value("debugCommands", debugCommands, () -> debugCommands, v -> debugCommands = v)
.value("debugLogs", debugLogs, () -> debugLogs, v -> debugLogs = v)
.value("ioLogs", ioLogs, () -> ioLogs, v -> ioLogs = v)
.value("dashloaderCompat", dashloaderCompat, () -> dashloaderCompat, v -> dashloaderCompat = v)
.setPath(Respackopts.FALLBACK_CONF_DIR.resolve("_respackopts.conf"))
// Not using Respackopts.FALLBACK_CONF_DIR to avoid premature initialization with libjf-unsafe and libjf-config-reflect
.setPath(FabricLoader.getInstance().getConfigDir().resolve("respackopts").resolve("_respackopts.conf"))
.referenceConfig(() -> {
if (!packsInitialized) return List.of();
List<ConfigInstance> instances = new LinkedList<>();
MetaCache.forEach((key, state) -> instances.add(DSL.create(state.packId())
.config(cb -> state.configBranch().buildConfig(cb, state.packId(), key.dataLocation()))

View File

@ -25,6 +25,7 @@ public class ResourcePackManagerMixin {
@Inject(at = @At("TAIL"), method = "scanPacks()V")
private void scanPacks(CallbackInfo info) {
RespackoptsConfig.packsInitialized = true;
FallbackI18n.clear();
Set<Path> newDataLocations = new HashSet<>();
Set<Path> toRemove = new HashSet<>(dataLocations);