diff --git a/gradle.properties b/gradle.properties index 0c8f144..60cfc06 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,4 +13,4 @@ arnicalib_version=5.2.0 champions_cf_file_id=3724097 -extrachampions_version=1.0.0 +extrachampions_version=1.0.1 diff --git a/src/main/java/org/auioc/mcmod/extrachampions/ExtraChampions.java b/src/main/java/org/auioc/mcmod/extrachampions/ExtraChampions.java index ac79a11..1b8317f 100644 --- a/src/main/java/org/auioc/mcmod/extrachampions/ExtraChampions.java +++ b/src/main/java/org/auioc/mcmod/extrachampions/ExtraChampions.java @@ -5,10 +5,7 @@ import org.apache.logging.log4j.Marker; import org.auioc.mcmod.arnicalib.utils.LogUtil; import org.auioc.mcmod.arnicalib.utils.java.VersionUtils; -import org.auioc.mcmod.extrachampions.common.affix.AffixRegistry; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @Mod(ExtraChampions.MOD_ID) public final class ExtraChampions { @@ -22,11 +19,7 @@ public final class ExtraChampions { private static final Marker CORE = LogUtil.getMarker("CORE"); public ExtraChampions() { - FMLJavaModLoadingContext.get().getModEventBus().addListener( - (final FMLCommonSetupEvent event) -> { - AffixRegistry.register(); - } - ); + Initialization.init(); } static { diff --git a/src/main/java/org/auioc/mcmod/extrachampions/Initialization.java b/src/main/java/org/auioc/mcmod/extrachampions/Initialization.java new file mode 100644 index 0000000..7a9bb3e --- /dev/null +++ b/src/main/java/org/auioc/mcmod/extrachampions/Initialization.java @@ -0,0 +1,33 @@ +package org.auioc.mcmod.extrachampions; + +import org.auioc.mcmod.extrachampions.common.affix.AffixRegistry; +import org.auioc.mcmod.extrachampions.common.config.ExAffixConfig; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +public final class Initialization { + + public static void init() { + final IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); + register(modEventBus); + handleConfig(modEventBus); + } + + private static void register(final IEventBus modEventBus) { + modEventBus.addListener( + (final FMLCommonSetupEvent event) -> { + AffixRegistry.register(); + } + ); + } + + private static void handleConfig(final IEventBus modEventBus) { + ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, ExAffixConfig.SPEC, ExtraChampions.MOD_ID + "-affixes.toml"); + modEventBus.addListener(EventPriority.LOWEST, ExAffixConfig::rebuildAffixSettings); + } + +} diff --git a/src/main/java/org/auioc/mcmod/extrachampions/common/affix/AffixRegistry.java b/src/main/java/org/auioc/mcmod/extrachampions/common/affix/AffixRegistry.java index 7e08ef6..ef7f2b4 100644 --- a/src/main/java/org/auioc/mcmod/extrachampions/common/affix/AffixRegistry.java +++ b/src/main/java/org/auioc/mcmod/extrachampions/common/affix/AffixRegistry.java @@ -1,6 +1,8 @@ package org.auioc.mcmod.extrachampions.common.affix; import static org.auioc.mcmod.extrachampions.ExtraChampions.LOGGER; +import java.util.ArrayList; +import java.util.List; import org.apache.logging.log4j.Marker; import org.auioc.mcmod.arnicalib.utils.LogUtil; import org.auioc.mcmod.extrachampions.common.affix.impl.AcupunctureAffix; @@ -9,21 +11,25 @@ import org.auioc.mcmod.extrachampions.common.affix.impl.JinxAffix; import org.auioc.mcmod.extrachampions.common.affix.impl.RealityAffix; import top.theillusivec4.champions.Champions; +import top.theillusivec4.champions.api.IAffix; public final class AffixRegistry { public static final Marker MARKER = LogUtil.getMarker("Affix"); + public static final List AFFIXES = new ArrayList() { + { + add(new JinxAffix()); + add(new AcupunctureAffix()); + add(new DispelAffix()); + add(new RealityAffix()); + add(new HurricaneAffix()); + } + }; + public static void register() { LOGGER.info(MARKER, "Register extra affixes"); - - Champions.API.registerAffixes( - new JinxAffix(), - new AcupunctureAffix(), - new DispelAffix(), - new RealityAffix(), - new HurricaneAffix() - ); + AFFIXES.forEach((affix) -> Champions.API.registerAffix(affix)); } } diff --git a/src/main/java/org/auioc/mcmod/extrachampions/common/config/ExAffixConfig.java b/src/main/java/org/auioc/mcmod/extrachampions/common/config/ExAffixConfig.java new file mode 100644 index 0000000..7708bf9 --- /dev/null +++ b/src/main/java/org/auioc/mcmod/extrachampions/common/config/ExAffixConfig.java @@ -0,0 +1,69 @@ +package org.auioc.mcmod.extrachampions.common.config; + +import static org.auioc.mcmod.extrachampions.ExtraChampions.LOGGER; +import java.util.ArrayList; +import com.electronwill.nightconfig.core.UnmodifiableConfig; +import org.apache.logging.log4j.Marker; +import org.auioc.mcmod.arnicalib.utils.LogUtil; +import org.auioc.mcmod.extrachampions.ExtraChampions; +import org.auioc.mcmod.extrachampions.common.affix.AffixRegistry; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import top.theillusivec4.champions.common.affix.core.AffixManager; +import top.theillusivec4.champions.common.config.AffixesConfig; +import top.theillusivec4.champions.common.config.ChampionsConfig; + +public class ExAffixConfig { + + private static final Marker MARKER = LogUtil.getMarker(ExAffixConfig.class); + + public static final ForgeConfigSpec SPEC; + + static { + ForgeConfigSpec.Builder b = new ForgeConfigSpec.Builder(); + + AffixRegistry.AFFIXES.forEach((affix) -> { + b.push(affix.getIdentifier()); + { + b.define("enabled", true); + b.define("minTier", 1); + b.define("maxTier", -1); //? TOML dose not support NULL value + b.defineList("mobList", new ArrayList(), (o) -> o instanceof String); + b.define("mobPermission", "BLACKLIST"); + } + b.pop(); + }); + + SPEC = b.build(); + } + + public static void rebuildAffixSettings(final ModConfigEvent event) { + ModConfig config = event.getConfig(); + if ( + config.getModId().equals(ExtraChampions.MOD_ID) + && config.getType() == ModConfig.Type.SERVER + && config.getSpec() == ExAffixConfig.SPEC + ) { + LOGGER.info(MARKER, "Rebuild affix settings"); + AffixRegistry.AFFIXES.forEach((affix) -> { + UnmodifiableConfig rawConfig = event.getConfig().getConfigData().get(affix.getIdentifier()); + { + var affixConfig = new AffixesConfig.AffixConfig(); + { + affixConfig.identifier = affix.getIdentifier(); + affixConfig.enabled = rawConfig.get("enabled"); + affixConfig.minTier = rawConfig.get("minTier"); + //? TOML dose not support NULL value + affixConfig.maxTier = ((Integer) rawConfig.get("minTier")) == -1 ? null : rawConfig.get("minTier"); + affixConfig.mobList = rawConfig.get("mobList"); + affixConfig.mobPermission = rawConfig.get("mobPermission"); + } + ChampionsConfig.affixes.add(affixConfig); + } + }); + AffixManager.buildAffixSettings(); + } + } + +}