package joshie.harvest.core.util;
import joshie.harvest.HarvestFestival;
import joshie.harvest.core.helpers.ConfigHelper;
import joshie.harvest.core.util.annotations.HFEvents;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import net.minecraftforge.common.config.ConfigElement;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.client.IModGuiFactory;
import net.minecraftforge.fml.client.config.DummyConfigElement;
import net.minecraftforge.fml.client.config.GuiConfig;
import net.minecraftforge.fml.client.config.IConfigElement;
import net.minecraftforge.fml.client.event.ConfigChangedEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import static joshie.harvest.core.lib.HFModInfo.MODID;
@HFEvents(Side.CLIENT)
public class HFGuiFactory implements IModGuiFactory {
@Override
public void initialize(Minecraft minecraftInstance) {
}
@Override
public Class<? extends GuiScreen> mainConfigGuiClass() {
return GuiHFConfig.class;
}
@Override
public Set<RuntimeOptionCategoryElement> runtimeGuiCategories() {
return null;
}
@Override
@SuppressWarnings("deprecation")
public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element) {
return null;
}
public static class GuiHFConfig extends GuiConfig {
public GuiHFConfig(GuiScreen parentScreen) {
super(parentScreen, getConfigElements(), MODID, false, true, GuiConfig.getAbridgedConfigPath(ConfigHelper.getConfig().toString()));
}
@SuppressWarnings("unchecked")
private static List<IConfigElement> getConfigElements() {
List<IConfigElement> list = new ArrayList<>();
List<Class> configsList = new ArrayList<>(HarvestFestival.proxy.getList());
Collections.sort(configsList, (c1, c2) -> c1.getSimpleName().compareTo(c2.getSimpleName()));
for (Class c : configsList) {
try {
Method configure = c.getMethod("configure");
if (configure != null) {
String categoryName = c.getSimpleName().replace("HF", "");
List<IConfigElement> configElements = new ConfigElement(ConfigHelper.getConfig().getCategory(categoryName)).getChildElements();
list.add(new DummyConfigElement.DummyCategoryElement(categoryName, MODID + ".config", configElements));
}
} catch (Exception ignored) {
}
}
return list;
}
}
@SubscribeEvent
public void onConfigurationChangedEvent(ConfigChangedEvent.OnConfigChangedEvent event) {
if (event.getModID().equalsIgnoreCase(MODID)) {
Configuration config = ConfigHelper.getConfig();
if (config.hasChanged()) {
config.save();
}
//Reload in all the values
HarvestFestival.proxy.configure();
HFCaches.clearClient();
}
}
}