package dev.micle.xptools.config; import dev.micle.xptools.XpTools; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.config.ModConfigEvent; import org.apache.commons.lang3.tuple.Pair; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @Mod.EventBusSubscriber(modid = XpTools.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) public final class Config { public static final Client CLIENT; public static final ForgeConfigSpec CLIENT_SPEC; public static final Common COMMON; public static final ForgeConfigSpec COMMON_SPEC; public static final Server SERVER; public static final ForgeConfigSpec SERVER_SPEC; static { Pair clientSpecPair = new ForgeConfigSpec.Builder().configure(Client::new); CLIENT = clientSpecPair.getLeft(); CLIENT_SPEC = clientSpecPair.getRight(); Pair commonSpecPair = new ForgeConfigSpec.Builder().configure(Common::new); COMMON = commonSpecPair.getLeft(); COMMON_SPEC = commonSpecPair.getRight(); Pair serverSpecPair = new ForgeConfigSpec.Builder().configure(Server::new); SERVER = serverSpecPair.getLeft(); SERVER_SPEC = serverSpecPair.getRight(); } public static void register() { XpTools.getFMLJavaModLoadingContext().registerConfig(ModConfig.Type.CLIENT, CLIENT_SPEC); XpTools.getFMLJavaModLoadingContext().registerConfig(ModConfig.Type.COMMON, COMMON_SPEC); XpTools.getFMLJavaModLoadingContext().registerConfig(ModConfig.Type.SERVER, SERVER_SPEC); } @SubscribeEvent public static void onConfigReloadEvent(ModConfigEvent event) { if (event.getConfig().getSpec() == CLIENT_SPEC) { Client.onConfigReload(); } else if (event.getConfig().getSpec() == COMMON_SPEC) { Common.onConfigReload(); } else if (event.getConfig().getSpec() == SERVER_SPEC) { Server.onConfigReload(); } } public static class Client { Client(ForgeConfigSpec.Builder builder) {} private static void onConfigReload() {} } public static class Common { Common(ForgeConfigSpec.Builder builder) {} private static void onConfigReload() {} } public static class Server { public static ForgeConfigSpec.BooleanValue blockBreakDefaultNoXp; private static ForgeConfigSpec.ConfigValue> blockBreakOperationsRaw; public static List blockBreakOperationItems; Server(ForgeConfigSpec.Builder builder) { builder.comment("Settings for block breaking").push("block_breaking"); blockBreakDefaultNoXp = builder .comment("Should all blocks drop 0 XP by default?") .comment("(This makes multipliers not have any effect)") .define("blockBreakDefaultNoXp", false); blockBreakOperationsRaw = builder .comment("List of all overrides. Format: '[block_id/tag],[operation],[min],[max],[priority],[is_last]'") .comment("Available operations: " + Arrays.toString(OperationType.values())) .comment("Examples:") .comment("'minecraft:dirt,set,2,2,0,true' - Sets the xp drop of the dirt block to 2, takes highest priority and stops any additional operations.") .comment("'#forge:ores,multiply,1,2,1,false' - Multiplies xp drop of all blocks tagged forge:ores by 1-2, allows additional operations.") .define("blockBreakOperations", new ArrayList<>()); builder.pop(); } private static void onConfigReload() { blockBreakOperationItems = new ArrayList<>(); for (String s : blockBreakOperationsRaw.get()) { blockBreakOperationItems.add(new OperationItem(s)); } } } }