package ftbsc.bscv.system; import com.mojang.brigadier.CommandDispatcher; import ftbsc.bscv.api.ILoadable; import ftbsc.bscv.api.IModule; import net.minecraft.command.CommandSource; import net.minecraftforge.common.ForgeConfigSpec; import java.util.HashSet; import java.util.Optional; import java.util.ServiceLoader; import java.util.Set; public class ModManager { private Optional cfgBuilder; private Optional> dispatcher; public final Set mods; public final Set categories; public ModManager(ForgeConfigSpec.Builder cfgBuilder, CommandDispatcher dispatcher) { this.cfgBuilder = Optional.of(cfgBuilder); this.dispatcher = Optional.of(dispatcher); this.mods = new HashSet<>(); this.categories = new HashSet<>(); } public void load() { for (ILoadable module : ServiceLoader.load(ILoadable.class)) { if(module instanceof IModule) { IModule mod = (IModule) module; this.mods.add(mod); this.categories.add(mod.getGroup()); this.cfgBuilder.get().pop(); // TODO solved by AutoService, soon TM } } } public void finalize() { this.cfgBuilder = Optional.empty(); this.dispatcher = Optional.empty(); } public ForgeConfigSpec.Builder getCfgBuilder() { return cfgBuilder.get(); } public CommandDispatcher getDispatcher() { return dispatcher.get(); } }