refactor config + modules use @Module annotation now
This commit is contained in:
parent
2600f92b2a
commit
7b41f24211
23 changed files with 220 additions and 92 deletions
|
@ -3,41 +3,30 @@ package pm.j4.kerosene;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import net.fabricmc.api.ModInitializer;
|
import net.fabricmc.api.ModInitializer;
|
||||||
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
|
||||||
import net.fabricmc.loader.api.ModContainer;
|
|
||||||
import net.minecraft.client.options.KeyBinding;
|
import net.minecraft.client.options.KeyBinding;
|
||||||
import pm.j4.kerosene.modules.ExampleModule;
|
import pm.j4.kerosene.modules.ExampleModule;
|
||||||
import pm.j4.kerosene.modules.bindings.BindingManager;
|
import pm.j4.kerosene.modules.bindings.BindingManager;
|
||||||
import pm.j4.kerosene.util.config.ConfigHolder;
|
import pm.j4.kerosene.util.config.ConfigHolder;
|
||||||
import pm.j4.kerosene.util.config.ConfigManager;
|
import pm.j4.kerosene.util.config.ConfigManager;
|
||||||
|
import pm.j4.kerosene.util.config.Module;
|
||||||
import pm.j4.kerosene.util.data.ModInfoProvider;
|
import pm.j4.kerosene.util.data.ModInfoProvider;
|
||||||
import pm.j4.kerosene.util.module.ModuleBase;
|
import pm.j4.kerosene.util.module.ModuleBase;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The type Kerosene mod.
|
* The type Kerosene mod.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@Module(ExampleModule.class)
|
||||||
|
@Module(BindingManager.class)
|
||||||
public class KeroseneMod implements ModInitializer {
|
public class KeroseneMod implements ModInitializer {
|
||||||
@Override
|
@Override
|
||||||
public void onInitialize() {
|
public void onInitialize() {
|
||||||
|
|
||||||
ConfigManager.initConfig("kerosene");
|
ConfigManager.initConfig("kerosene", KeroseneMod.class);
|
||||||
|
|
||||||
// always update mod data
|
|
||||||
Optional<ModContainer> modContainer = FabricLoader.getInstance().getModContainer("kerosene");
|
|
||||||
modContainer.ifPresent(container -> ModInfoProvider.modData = container.getMetadata());
|
|
||||||
|
|
||||||
Optional<ConfigHolder> conf = ConfigManager.getConfig("kerosene");
|
Optional<ConfigHolder> conf = ConfigManager.getConfig("kerosene");
|
||||||
|
|
||||||
try {
|
|
||||||
ModInfoProvider.registerMod(ExampleModule.class);
|
|
||||||
ModInfoProvider.registerMod(BindingManager.class);
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
System.out.println(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//initialize any keybinds, data, etc.
|
//initialize any keybinds, data, etc.
|
||||||
ModInfoProvider.getRegisteredMods().forEach(ModuleBase::init);
|
ModInfoProvider.getRegisteredMods().forEach(ModuleBase::init);
|
||||||
|
|
|
@ -32,13 +32,28 @@ public class PModuleConfigEntry extends ElementListWidget.Entry<PModuleConfigEnt
|
||||||
*/
|
*/
|
||||||
protected final Text displayText;
|
protected final Text displayText;
|
||||||
|
|
||||||
private PModuleConfigPane parent;
|
/**
|
||||||
|
* The Parent.
|
||||||
|
*/
|
||||||
|
private final PModuleConfigPane parent;
|
||||||
|
|
||||||
private List<Element> elements = new ArrayList<>();
|
/**
|
||||||
|
* The Elements.
|
||||||
|
*/
|
||||||
|
private final List<Element> elements = new ArrayList<>();
|
||||||
|
|
||||||
private String trueValue;
|
/**
|
||||||
private String falseValue;
|
* The True value.
|
||||||
|
*/
|
||||||
|
private final String trueValue;
|
||||||
|
/**
|
||||||
|
* The False value.
|
||||||
|
*/
|
||||||
|
private final String falseValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Selected.
|
||||||
|
*/
|
||||||
private Element selected;
|
private Element selected;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -46,6 +61,7 @@ public class PModuleConfigEntry extends ElementListWidget.Entry<PModuleConfigEnt
|
||||||
*
|
*
|
||||||
* @param option the option
|
* @param option the option
|
||||||
* @param text the text
|
* @param text the text
|
||||||
|
* @param parent the parent
|
||||||
*/
|
*/
|
||||||
public PModuleConfigEntry(ConfigurationOption option, Text text, PModuleConfigPane parent) {
|
public PModuleConfigEntry(ConfigurationOption option, Text text, PModuleConfigPane parent) {
|
||||||
this.option = option;
|
this.option = option;
|
||||||
|
@ -55,6 +71,15 @@ public class PModuleConfigEntry extends ElementListWidget.Entry<PModuleConfigEnt
|
||||||
this.falseValue = "No";
|
this.falseValue = "No";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new P module config entry.
|
||||||
|
*
|
||||||
|
* @param option the option
|
||||||
|
* @param text the text
|
||||||
|
* @param parent the parent
|
||||||
|
* @param trueValue the true value
|
||||||
|
* @param falseValue the false value
|
||||||
|
*/
|
||||||
public PModuleConfigEntry(ConfigurationOption option, Text text, PModuleConfigPane parent, String trueValue, String falseValue) {
|
public PModuleConfigEntry(ConfigurationOption option, Text text, PModuleConfigPane parent, String trueValue, String falseValue) {
|
||||||
this.option = option;
|
this.option = option;
|
||||||
this.displayText = text;
|
this.displayText = text;
|
||||||
|
@ -147,9 +172,7 @@ public class PModuleConfigEntry extends ElementListWidget.Entry<PModuleConfigEnt
|
||||||
ButtonWidget bindButton = new ButtonWidget(x, y + (int)(fontHeight * 2.5),
|
ButtonWidget bindButton = new ButtonWidget(x, y + (int)(fontHeight * 2.5),
|
||||||
entryWidth,
|
entryWidth,
|
||||||
fontHeight * 2,
|
fontHeight * 2,
|
||||||
new LiteralText(option.getStringValue().toUpperCase()), (button) -> {
|
new LiteralText(option.getStringValue().toUpperCase()), (button) -> button.setMessage(new LiteralText("Press any key..."))) {
|
||||||
button.setMessage(new LiteralText("Press any key..."));
|
|
||||||
}) {
|
|
||||||
@Override
|
@Override
|
||||||
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
|
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
|
||||||
if (this.active && this.visible) {
|
if (this.active && this.visible) {
|
||||||
|
|
|
@ -22,6 +22,9 @@ public class PModuleConfigPane extends ElementListWidget<PModuleConfigEntry> {
|
||||||
*/
|
*/
|
||||||
private POptionEntry lastSelected;
|
private POptionEntry lastSelected;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Selected config entry.
|
||||||
|
*/
|
||||||
private PModuleConfigEntry selectedConfigEntry;
|
private PModuleConfigEntry selectedConfigEntry;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -82,8 +85,6 @@ public class PModuleConfigPane extends ElementListWidget<PModuleConfigEntry> {
|
||||||
GlStateManager.DstFactor.ONE_MINUS_DST_ALPHA,
|
GlStateManager.DstFactor.ONE_MINUS_DST_ALPHA,
|
||||||
GlStateManager.SrcFactor.ZERO,
|
GlStateManager.SrcFactor.ZERO,
|
||||||
GlStateManager.DstFactor.ONE);
|
GlStateManager.DstFactor.ONE);
|
||||||
RenderSystem.disableAlphaTest();
|
|
||||||
RenderSystem.shadeModel(7425);
|
|
||||||
RenderSystem.disableTexture();
|
RenderSystem.disableTexture();
|
||||||
|
|
||||||
// darken config pane area
|
// darken config pane area
|
||||||
|
@ -111,8 +112,6 @@ public class PModuleConfigPane extends ElementListWidget<PModuleConfigEntry> {
|
||||||
this.renderList(matrices, rl, sc, mouseX, mouseY, delta);
|
this.renderList(matrices, rl, sc, mouseX, mouseY, delta);
|
||||||
|
|
||||||
RenderSystem.enableTexture();
|
RenderSystem.enableTexture();
|
||||||
RenderSystem.shadeModel(7424);
|
|
||||||
RenderSystem.enableAlphaTest();
|
|
||||||
RenderSystem.disableBlend();
|
RenderSystem.disableBlend();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ import pm.j4.kerosene.util.module.ModuleBase;
|
||||||
/**
|
/**
|
||||||
* The type P module configuration widget.
|
* The type P module configuration widget.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public class PModuleConfigurationWidget extends AlwaysSelectedEntryListWidget<POptionEntry> {
|
public class PModuleConfigurationWidget extends AlwaysSelectedEntryListWidget<POptionEntry> {
|
||||||
/**
|
/**
|
||||||
* The Parent.
|
* The Parent.
|
||||||
|
|
|
@ -14,6 +14,7 @@ import pm.j4.kerosene.util.module.ModuleBase;
|
||||||
/**
|
/**
|
||||||
* The type P option entry.
|
* The type P option entry.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public class POptionEntry extends AlwaysSelectedEntryListWidget.Entry<POptionEntry> {
|
public class POptionEntry extends AlwaysSelectedEntryListWidget.Entry<POptionEntry> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -56,7 +57,7 @@ public class POptionEntry extends AlwaysSelectedEntryListWidget.Entry<POptionEnt
|
||||||
nameString = StringVisitable.concat(font.trimToWidth(nameString, maxNameWidth - font.getWidth(ellipse)), ellipse);
|
nameString = StringVisitable.concat(font.trimToWidth(nameString, maxNameWidth - font.getWidth(ellipse)), ellipse);
|
||||||
}
|
}
|
||||||
|
|
||||||
font.draw(matrices, Language.getInstance().reorder(nameString), x + 32 + 3, y + (entryHeight / 2), 0xFFFFFF);
|
font.draw(matrices, Language.getInstance().reorder(nameString), x + 32 + 3, y + ((float)entryHeight / 2), 0xFFFFFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -88,6 +89,7 @@ public class POptionEntry extends AlwaysSelectedEntryListWidget.Entry<POptionEnt
|
||||||
*
|
*
|
||||||
* @return the x offset
|
* @return the x offset
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("SameReturnValue")
|
||||||
public int getXOffset() {
|
public int getXOffset() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,8 +14,9 @@ import net.minecraft.client.render.BufferBuilder;
|
||||||
import net.minecraft.client.render.Tessellator;
|
import net.minecraft.client.render.Tessellator;
|
||||||
import net.minecraft.client.render.VertexFormats;
|
import net.minecraft.client.render.VertexFormats;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.text.*;
|
import net.minecraft.text.StringVisitable;
|
||||||
import pm.j4.kerosene.KeroseneMod;
|
import net.minecraft.text.Text;
|
||||||
|
import net.minecraft.text.TranslatableText;
|
||||||
import pm.j4.kerosene.util.config.ConfigManager;
|
import pm.j4.kerosene.util.config.ConfigManager;
|
||||||
import pm.j4.kerosene.util.data.ModInfoProvider;
|
import pm.j4.kerosene.util.data.ModInfoProvider;
|
||||||
import pm.j4.kerosene.util.module.ModuleBase;
|
import pm.j4.kerosene.util.module.ModuleBase;
|
||||||
|
@ -99,13 +100,11 @@ public class POptionsScreen extends Screen {
|
||||||
this);
|
this);
|
||||||
this.configPane.setLeftPos(paneWidth);
|
this.configPane.setLeftPos(paneWidth);
|
||||||
this.children.add(this.configPane);
|
this.children.add(this.configPane);
|
||||||
List<ModuleBase> configurableModules = new ArrayList<>();
|
List<ModuleBase> configurableModules = ModInfoProvider.getRegisteredMods()
|
||||||
configurableModules.addAll(ModInfoProvider.getRegisteredMods()
|
.stream().filter(ModuleBase::configurable).collect(Collectors.toList());
|
||||||
.stream().filter(ModuleBase::configurable)
|
|
||||||
.collect(Collectors.toList()));
|
|
||||||
configurableModules.forEach(module -> this.modules.addEntry(new POptionEntry(module, this.modules)));
|
configurableModules.forEach(module -> this.modules.addEntry(new POptionEntry(module, this.modules)));
|
||||||
this.addButton(new ButtonWidget(this.width / 2 - 75, this.height - 30, 150, 20, ScreenTexts.DONE, (buttonWidget) -> {
|
this.addButton(new ButtonWidget(this.width / 2 - 75, this.height - 30, 150, 20, ScreenTexts.DONE, (buttonWidget) -> {
|
||||||
ConfigManager.saveAllModules();
|
ConfigManager.saveEverything();
|
||||||
assert this.client != null;
|
assert this.client != null;
|
||||||
this.client.openScreen(this.previousScreen);
|
this.client.openScreen(this.previousScreen);
|
||||||
}));
|
}));
|
||||||
|
@ -137,7 +136,7 @@ public class POptionsScreen extends Screen {
|
||||||
trimmedName = StringVisitable.concat(textRenderer.trimToWidth(name, maxNameWidth - textRenderer.getWidth(ellipsis)), ellipsis);
|
trimmedName = StringVisitable.concat(textRenderer.trimToWidth(name, maxNameWidth - textRenderer.getWidth(ellipsis)), ellipsis);
|
||||||
}
|
}
|
||||||
if (mouseX > x + offset && mouseY > paneY + 1 && mouseY < paneY + 1 + textRenderer.fontHeight && mouseX < x + offset + textRenderer.getWidth(trimmedName)) {
|
if (mouseX > x + offset && mouseY > paneY + 1 && mouseY < paneY + 1 + textRenderer.fontHeight && mouseX < x + offset + textRenderer.getWidth(trimmedName)) {
|
||||||
//TODO tooltop
|
//TODO tooltip
|
||||||
//selected.getModName()
|
//selected.getModName()
|
||||||
}
|
}
|
||||||
textRenderer.draw(matrices, selected.getModName(), x + offset, paneY + 2 + lineSpacing, 0x808080);
|
textRenderer.draw(matrices, selected.getModName(), x + offset, paneY + 2 + lineSpacing, 0x808080);
|
||||||
|
|
|
@ -5,7 +5,6 @@ import net.minecraft.client.options.KeyBinding;
|
||||||
import net.minecraft.client.util.InputUtil;
|
import net.minecraft.client.util.InputUtil;
|
||||||
import net.minecraft.text.TranslatableText;
|
import net.minecraft.text.TranslatableText;
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
import pm.j4.kerosene.KeroseneMod;
|
|
||||||
import pm.j4.kerosene.gui.PModuleConfigEntry;
|
import pm.j4.kerosene.gui.PModuleConfigEntry;
|
||||||
import pm.j4.kerosene.gui.PModuleConfigPane;
|
import pm.j4.kerosene.gui.PModuleConfigPane;
|
||||||
import pm.j4.kerosene.util.config.ConfigHolder;
|
import pm.j4.kerosene.util.config.ConfigHolder;
|
||||||
|
@ -109,9 +108,7 @@ public class BindingManager extends ModuleBase {
|
||||||
* @param b the b
|
* @param b the b
|
||||||
*/
|
*/
|
||||||
public static void removeBind(KeyBinding b) {
|
public static void removeBind(KeyBinding b) {
|
||||||
if(registeredBinds.contains(b)) {
|
registeredBinds.remove(b);
|
||||||
registeredBinds.remove(b);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2,7 +2,6 @@ package pm.j4.kerosene.util.config;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import pm.j4.kerosene.KeroseneMod;
|
|
||||||
import pm.j4.kerosene.util.data.ModInfoProvider;
|
import pm.j4.kerosene.util.data.ModInfoProvider;
|
||||||
import pm.j4.kerosene.util.module.ModuleBase;
|
import pm.j4.kerosene.util.module.ModuleBase;
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ package pm.j4.kerosene.util.config;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import pm.j4.kerosene.KeroseneMod;
|
|
||||||
import pm.j4.kerosene.util.data.ModInfoProvider;
|
import pm.j4.kerosene.util.data.ModInfoProvider;
|
||||||
import pm.j4.kerosene.util.module.ModuleBase;
|
import pm.j4.kerosene.util.module.ModuleBase;
|
||||||
|
|
||||||
|
|
|
@ -3,11 +3,15 @@ package pm.j4.kerosene.util.config;
|
||||||
import com.google.common.reflect.TypeToken;
|
import com.google.common.reflect.TypeToken;
|
||||||
import com.google.gson.*;
|
import com.google.gson.*;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.lang.reflect.AnnotatedElement;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import net.fabricmc.api.ModInitializer;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import pm.j4.kerosene.KeroseneMod;
|
import pm.j4.kerosene.modules.ExampleModule;
|
||||||
import pm.j4.kerosene.modules.bindings.BindingInfo;
|
import pm.j4.kerosene.modules.bindings.BindingInfo;
|
||||||
|
import pm.j4.kerosene.modules.bindings.BindingManager;
|
||||||
import pm.j4.kerosene.util.data.ModInfoProvider;
|
import pm.j4.kerosene.util.data.ModInfoProvider;
|
||||||
import pm.j4.kerosene.util.data.ModuleConfig;
|
import pm.j4.kerosene.util.data.ModuleConfig;
|
||||||
import pm.j4.kerosene.util.data.OptionSerializiable;
|
import pm.j4.kerosene.util.data.OptionSerializiable;
|
||||||
|
@ -27,7 +31,7 @@ public class ConfigManager {
|
||||||
/**
|
/**
|
||||||
* The constant config.
|
* The constant config.
|
||||||
*/
|
*/
|
||||||
private static Map<String, ConfigHolder> configs = new HashMap<>();
|
private static final Map<String, ConfigHolder> configs = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare config file.
|
* Prepare config file.
|
||||||
|
@ -37,18 +41,36 @@ public class ConfigManager {
|
||||||
* @return the file
|
* @return the file
|
||||||
*/
|
*/
|
||||||
private static File prepareConfigFile(String path, String filename) {
|
private static File prepareConfigFile(String path, String filename) {
|
||||||
if (path != "") {
|
if (!Objects.equals(path, "")) {
|
||||||
File directory = new File(FabricLoader.getInstance().getConfigDir().toString(), path);
|
File directory = new File(FabricLoader.getInstance().getConfigDir().toString(), path);
|
||||||
if (!directory.exists()) directory.mkdir();
|
if (!directory.exists()) //noinspection ResultOfMethodCallIgnored
|
||||||
|
directory.mkdir();
|
||||||
}
|
}
|
||||||
return new File(FabricLoader.getInstance().getConfigDir().toString(), path + filename);
|
return new File(FabricLoader.getInstance().getConfigDir().toString(), path + filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Init config.
|
* Init config.
|
||||||
|
*
|
||||||
|
* @param moduleName the module name
|
||||||
*/
|
*/
|
||||||
public static void initConfig(String moduleName) {
|
public static void initConfig(String moduleName, Class parent) {
|
||||||
|
try {
|
||||||
|
Annotation moduleAnnotation = parent.getAnnotation(Modules.class);
|
||||||
|
assert moduleAnnotation != null;
|
||||||
|
Module[] modules = ((Modules)moduleAnnotation).value();
|
||||||
|
System.out.println(modules);
|
||||||
|
for (int i = 0; i < modules.length; i++) {
|
||||||
|
System.out.println(modules[i].value());
|
||||||
|
ModInfoProvider.registerMod(modules[i].value());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
System.out.println(e);
|
||||||
|
}
|
||||||
|
System.out.println("init " + moduleName);
|
||||||
if (configs.containsKey(moduleName)) {
|
if (configs.containsKey(moduleName)) {
|
||||||
|
System.out.println("contains " + configs.get(moduleName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,22 +78,32 @@ public class ConfigManager {
|
||||||
config.globalConfig = new DefaultConfig();
|
config.globalConfig = new DefaultConfig();
|
||||||
config.serverConfigs = new HashMap<>();
|
config.serverConfigs = new HashMap<>();
|
||||||
|
|
||||||
|
System.out.println("load cfg");
|
||||||
config = load(moduleName + "/", moduleName +".json", ConfigHolder.class);
|
config = load(moduleName + "/", moduleName +".json", ConfigHolder.class);
|
||||||
initModules(moduleName);
|
initModules();
|
||||||
|
System.out.println("put cfg");
|
||||||
|
configs.put(moduleName, config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Init modules.
|
* Init modules.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
public static void initModules(String moduleName) {
|
public static void initModules() {
|
||||||
ModInfoProvider.getRegisteredMods().forEach(module -> {
|
ModInfoProvider.getRegisteredMods().forEach(module -> {
|
||||||
ModuleConfig options = load(moduleName + "/modules/", module.getModuleName() + ".json", ModuleConfig.class);
|
System.out.println("module" + module.getModuleName() + " initialized " + module.initialized);
|
||||||
if (options != null && options.options != null) {
|
if (!module.initialized) {
|
||||||
options.options.forEach((key, option) -> {
|
ModuleConfig options = load(module.getParent() + "/modules/", module.getModuleName() + ".json", ModuleConfig.class);
|
||||||
if (module.hasOption(option.key)) {
|
System.out.println("initialize " + module.getModuleName());
|
||||||
module.setConfigOption(option.key, option.value);
|
if (options != null && options.options != null) {
|
||||||
}
|
options.options.forEach((key, option) -> {
|
||||||
});
|
if (module.hasOption(option.key)) {
|
||||||
|
System.out.println("setting " + option.key + " to " + option.value.getAsString());
|
||||||
|
module.setConfigOption(option.key, option.value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
module.initialized = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -147,7 +179,8 @@ public class ConfigManager {
|
||||||
/**
|
/**
|
||||||
* Save module.
|
* Save module.
|
||||||
*
|
*
|
||||||
* @param b the b
|
* @param modName the mod name
|
||||||
|
* @param b the b
|
||||||
*/
|
*/
|
||||||
public static void saveModule(String modName, ModuleBase b) {
|
public static void saveModule(String modName, ModuleBase b) {
|
||||||
ModuleConfig c = new ModuleConfig();
|
ModuleConfig c = new ModuleConfig();
|
||||||
|
@ -160,13 +193,13 @@ public class ConfigManager {
|
||||||
*/
|
*/
|
||||||
public static void saveAllModules() {
|
public static void saveAllModules() {
|
||||||
List<ModuleBase> mods = ModInfoProvider.getRegisteredMods();
|
List<ModuleBase> mods = ModInfoProvider.getRegisteredMods();
|
||||||
mods.forEach((module) -> {
|
mods.forEach((module) -> ConfigManager.saveModule(module.getParent(), module));
|
||||||
ConfigManager.saveModule(module.getParent(), module);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save global config.
|
* Save global config.
|
||||||
|
*
|
||||||
|
* @param modName the mod name
|
||||||
*/
|
*/
|
||||||
public static void saveGlobalConfig(String modName) {
|
public static void saveGlobalConfig(String modName) {
|
||||||
if(configs.containsKey(modName)) {
|
if(configs.containsKey(modName)) {
|
||||||
|
@ -174,9 +207,17 @@ public class ConfigManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void saveEverything() {
|
||||||
|
configs.keySet().forEach(key -> {
|
||||||
|
saveGlobalConfig(key);
|
||||||
|
});
|
||||||
|
saveAllModules();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets config.
|
* Gets config.
|
||||||
*
|
*
|
||||||
|
* @param modName the mod name
|
||||||
* @return the config
|
* @return the config
|
||||||
*/
|
*/
|
||||||
public static Optional<ConfigHolder> getConfig(String modName) {
|
public static Optional<ConfigHolder> getConfig(String modName) {
|
||||||
|
@ -190,6 +231,7 @@ public class ConfigManager {
|
||||||
/**
|
/**
|
||||||
* The type Serialization helper.
|
* The type Serialization helper.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("UnstableApiUsage")
|
||||||
class SerializationHelper {
|
class SerializationHelper {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package pm.j4.kerosene.util.config;
|
package pm.j4.kerosene.util.config;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The type Default config.
|
* The type Default config.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -5,7 +5,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import net.minecraft.client.options.KeyBinding;
|
import net.minecraft.client.options.KeyBinding;
|
||||||
import net.minecraft.client.util.InputUtil;
|
import net.minecraft.client.util.InputUtil;
|
||||||
import pm.j4.kerosene.KeroseneMod;
|
|
||||||
import pm.j4.kerosene.modules.bindings.BindingInfo;
|
import pm.j4.kerosene.modules.bindings.BindingInfo;
|
||||||
import pm.j4.kerosene.modules.bindings.BindingManager;
|
import pm.j4.kerosene.modules.bindings.BindingManager;
|
||||||
import pm.j4.kerosene.util.data.ModInfoProvider;
|
import pm.j4.kerosene.util.data.ModInfoProvider;
|
||||||
|
@ -140,9 +139,7 @@ public class GlobalConfig extends Config {
|
||||||
public static Map<String, OptionSerializiable> serializeModuleConfiguration(ModuleBase module) {
|
public static Map<String, OptionSerializiable> serializeModuleConfiguration(ModuleBase module) {
|
||||||
Map<String, OptionSerializiable> opts = new HashMap<>();
|
Map<String, OptionSerializiable> opts = new HashMap<>();
|
||||||
Map<String, ConfigurationOption> configuration = module.getModuleConfiguration();
|
Map<String, ConfigurationOption> configuration = module.getModuleConfiguration();
|
||||||
configuration.forEach((key, value) -> {
|
configuration.forEach((key, value) -> opts.put(key, new OptionSerializiable(key, value.toJson())));
|
||||||
opts.put(key, new OptionSerializiable(key, value.toJson()));
|
|
||||||
});
|
|
||||||
return opts;
|
return opts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
14
src/main/java/pm/j4/kerosene/util/config/Module.java
Normal file
14
src/main/java/pm/j4/kerosene/util/config/Module.java
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
package pm.j4.kerosene.util.config;
|
||||||
|
|
||||||
|
import java.lang.annotation.Repeatable;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import pm.j4.kerosene.util.module.ModuleBase;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Repeatable(Modules.class)
|
||||||
|
public @interface Module {
|
||||||
|
public Class<? extends ModuleBase> value();
|
||||||
|
}
|
9
src/main/java/pm/j4/kerosene/util/config/Modules.java
Normal file
9
src/main/java/pm/j4/kerosene/util/config/Modules.java
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
package pm.j4.kerosene.util.config;
|
||||||
|
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface Modules {
|
||||||
|
Module[] value();
|
||||||
|
}
|
|
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import pm.j4.kerosene.KeroseneMod;
|
|
||||||
import pm.j4.kerosene.util.module.ModuleBase;
|
import pm.j4.kerosene.util.module.ModuleBase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -26,8 +25,7 @@ public class Category {
|
||||||
categoryMap.put(module.getCategory(), m);
|
categoryMap.put(module.getCategory(), m);
|
||||||
} else {
|
} else {
|
||||||
List<ModuleBase> m = categoryMap.get(module.getCategory());
|
List<ModuleBase> m = categoryMap.get(module.getCategory());
|
||||||
List<ModuleBase> nm = new ArrayList<>();
|
List<ModuleBase> nm = new ArrayList<>(m);
|
||||||
nm.addAll(m);
|
|
||||||
nm.add(module);
|
nm.add(module);
|
||||||
categoryMap.replace(module.getCategory(), nm);
|
categoryMap.replace(module.getCategory(), nm);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,18 +3,15 @@ package pm.j4.kerosene.util.data;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import net.fabricmc.loader.api.metadata.ModMetadata;
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.options.KeyBinding;
|
|
||||||
import net.minecraft.server.integrated.IntegratedServer;
|
import net.minecraft.server.integrated.IntegratedServer;
|
||||||
import pm.j4.kerosene.util.module.ModuleBase;
|
import pm.j4.kerosene.util.module.ModuleBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type Mod info provider.
|
||||||
|
*/
|
||||||
//TODO refactor into multiple data holders
|
//TODO refactor into multiple data holders
|
||||||
public class ModInfoProvider {
|
public class ModInfoProvider {
|
||||||
/**
|
|
||||||
* The Mod data.
|
|
||||||
*/
|
|
||||||
public static ModMetadata modData = null;
|
|
||||||
/**
|
/**
|
||||||
* The constant client.
|
* The constant client.
|
||||||
*/
|
*/
|
||||||
|
@ -22,8 +19,15 @@ public class ModInfoProvider {
|
||||||
/**
|
/**
|
||||||
* The constant activeMods.
|
* The constant activeMods.
|
||||||
*/
|
*/
|
||||||
private static List<ModuleBase> registeredMods = new ArrayList<>();
|
private static final List<ModuleBase> registeredMods = new ArrayList<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register mod.
|
||||||
|
*
|
||||||
|
* @param mod the mod
|
||||||
|
* @throws IllegalAccessException the illegal access exception
|
||||||
|
* @throws InstantiationException the instantiation exception
|
||||||
|
*/
|
||||||
public static void registerMod(Class<? extends ModuleBase> mod) throws IllegalAccessException, InstantiationException {
|
public static void registerMod(Class<? extends ModuleBase> mod) throws IllegalAccessException, InstantiationException {
|
||||||
ModuleBase base = mod.newInstance();
|
ModuleBase base = mod.newInstance();
|
||||||
if(!registeredMods.contains(base)) {
|
if(!registeredMods.contains(base)) {
|
||||||
|
|
|
@ -19,6 +19,7 @@ public abstract class ModuleBase {
|
||||||
* Instantiates a new Module base.
|
* Instantiates a new Module base.
|
||||||
* Parameters should be constant across restarts.
|
* Parameters should be constant across restarts.
|
||||||
*
|
*
|
||||||
|
* @param parent the parent
|
||||||
* @param name The name of the module
|
* @param name The name of the module
|
||||||
* @param category the category
|
* @param category the category
|
||||||
* @param activatable Whether a module can be activated, or if it will remain in the state it was upon startup
|
* @param activatable Whether a module can be activated, or if it will remain in the state it was upon startup
|
||||||
|
@ -60,11 +61,23 @@ public abstract class ModuleBase {
|
||||||
config.ifPresent(configHolder -> configHolder.toggleModule(this.moduleName));
|
config.ifPresent(configHolder -> configHolder.toggleModule(this.moduleName));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean initialized;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Parent.
|
||||||
|
*/
|
||||||
private final String parent;
|
private final String parent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets parent.
|
||||||
|
*
|
||||||
|
* @return the parent
|
||||||
|
*/
|
||||||
public String getParent() {
|
public String getParent() {
|
||||||
return this.parent;
|
return this.parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Module's name.
|
* The Module's name.
|
||||||
*/
|
*/
|
||||||
|
@ -171,16 +184,19 @@ public abstract class ModuleBase {
|
||||||
*
|
*
|
||||||
* @param key the key
|
* @param key the key
|
||||||
* @param value the value
|
* @param value the value
|
||||||
* @return whether the operation was successful.
|
|
||||||
*/
|
*/
|
||||||
public boolean setConfigOption(String key, JsonElement value) {
|
public void setConfigOption(String key, JsonElement value) {
|
||||||
if (moduleOptions.containsKey(key)) {
|
if (moduleOptions.containsKey(key)) {
|
||||||
moduleOptions.get(key).fromJson(value);
|
moduleOptions.get(key).fromJson(value);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update config option.
|
||||||
|
*
|
||||||
|
* @param key the key
|
||||||
|
* @param option the option
|
||||||
|
*/
|
||||||
public void updateConfigOption(String key, ConfigurationOption option) {
|
public void updateConfigOption(String key, ConfigurationOption option) {
|
||||||
System.out.println("update config option" + key + option.getStringValue());
|
System.out.println("update config option" + key + option.getStringValue());
|
||||||
System.out.println(moduleOptions.keySet());
|
System.out.println(moduleOptions.keySet());
|
||||||
|
@ -209,12 +225,15 @@ public abstract class ModuleBase {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert default config map.
|
||||||
|
*
|
||||||
|
* @return the map
|
||||||
|
*/
|
||||||
private Map<String, ConfigurationOption> convertDefaultConfig() {
|
private Map<String, ConfigurationOption> convertDefaultConfig() {
|
||||||
List<ConfigurationOption> options = this.getDefaultConfig();
|
List<ConfigurationOption> options = this.getDefaultConfig();
|
||||||
Map<String, ConfigurationOption> mapped = new HashMap<>();
|
Map<String, ConfigurationOption> mapped = new HashMap<>();
|
||||||
options.forEach((option) -> {
|
options.forEach((option) -> mapped.put(option.getConfigKey(), option));
|
||||||
mapped.put(option.getConfigKey(), option);
|
|
||||||
});
|
|
||||||
return mapped;
|
return mapped;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,6 +253,7 @@ public abstract class ModuleBase {
|
||||||
/**
|
/**
|
||||||
* Gets config entries.
|
* Gets config entries.
|
||||||
*
|
*
|
||||||
|
* @param sourcePane the source pane
|
||||||
* @return the config entries
|
* @return the config entries
|
||||||
*/
|
*/
|
||||||
public List<PModuleConfigEntry> getConfigEntries(PModuleConfigPane sourcePane) {
|
public List<PModuleConfigEntry> getConfigEntries(PModuleConfigPane sourcePane) {
|
||||||
|
|
|
@ -16,16 +16,28 @@ public class BooleanOption extends ConfigurationOption {
|
||||||
/**
|
/**
|
||||||
* Instantiates a new Configuration option.
|
* Instantiates a new Configuration option.
|
||||||
*
|
*
|
||||||
* @param key
|
* @param key the key
|
||||||
* @param description the description
|
* @param description the description
|
||||||
|
* @param parent the parent
|
||||||
*/
|
*/
|
||||||
public BooleanOption(String key, String description, ModuleBase parent) {
|
public BooleanOption(String key, String description, ModuleBase parent) {
|
||||||
super(key, description, parent);
|
super(key, description, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets value.
|
||||||
|
*
|
||||||
|
* @return the value
|
||||||
|
*/
|
||||||
public boolean getValue() {
|
public boolean getValue() {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets value.
|
||||||
|
*
|
||||||
|
* @param value the value
|
||||||
|
*/
|
||||||
public void setValue(boolean value) { this.value = value; }
|
public void setValue(boolean value) { this.value = value; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -11,19 +11,28 @@ public abstract class ConfigurationOption {
|
||||||
* The Description.
|
* The Description.
|
||||||
*/
|
*/
|
||||||
private final String description;
|
private final String description;
|
||||||
|
/**
|
||||||
|
* The Key.
|
||||||
|
*/
|
||||||
private final String key;
|
private final String key;
|
||||||
|
/**
|
||||||
|
* The Parent.
|
||||||
|
*/
|
||||||
private final ModuleBase parent;
|
private final ModuleBase parent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a new Configuration option.
|
* Instantiates a new Configuration option.
|
||||||
*
|
*
|
||||||
|
* @param key the key
|
||||||
* @param description the description
|
* @param description the description
|
||||||
|
* @param parent the parent
|
||||||
*/
|
*/
|
||||||
public ConfigurationOption(String key, String description, ModuleBase parent) {
|
public ConfigurationOption(String key, String description, ModuleBase parent) {
|
||||||
this.description = description;
|
this.description = description;
|
||||||
this.key = key;
|
this.key = key;
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets description.
|
* Gets description.
|
||||||
*
|
*
|
||||||
|
@ -32,7 +41,19 @@ public abstract class ConfigurationOption {
|
||||||
public final String getDescription() {
|
public final String getDescription() {
|
||||||
return this.description;
|
return this.description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets config key.
|
||||||
|
*
|
||||||
|
* @return the config key
|
||||||
|
*/
|
||||||
public final String getConfigKey() { return key; }
|
public final String getConfigKey() { return key; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets parent.
|
||||||
|
*
|
||||||
|
* @return the parent
|
||||||
|
*/
|
||||||
public final ModuleBase getParent() { return parent; }
|
public final ModuleBase getParent() { return parent; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -16,9 +16,9 @@ public class IntegerOption extends ConfigurationOption {
|
||||||
/**
|
/**
|
||||||
* Instantiates a new Configuration option.
|
* Instantiates a new Configuration option.
|
||||||
*
|
*
|
||||||
* @param key
|
* @param key the key
|
||||||
* @param description the description
|
* @param description the description
|
||||||
* @param parent
|
* @param parent the parent
|
||||||
*/
|
*/
|
||||||
public IntegerOption(String key, String description, ModuleBase parent) {
|
public IntegerOption(String key, String description, ModuleBase parent) {
|
||||||
super(key, description, parent);
|
super(key, description, parent);
|
||||||
|
|
|
@ -24,14 +24,19 @@ public class KeybindOption extends ConfigurationOption {
|
||||||
/**
|
/**
|
||||||
* Instantiates a new Configuration option.
|
* Instantiates a new Configuration option.
|
||||||
*
|
*
|
||||||
* @param key
|
* @param key the key
|
||||||
* @param description the description
|
* @param description the description
|
||||||
* @param parent
|
* @param parent the parent
|
||||||
*/
|
*/
|
||||||
public KeybindOption(String key, String description, ModuleBase parent) {
|
public KeybindOption(String key, String description, ModuleBase parent) {
|
||||||
super(key, description, parent);
|
super(key, description, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets translation key.
|
||||||
|
*
|
||||||
|
* @return the translation key
|
||||||
|
*/
|
||||||
public String getTranslationKey() {
|
public String getTranslationKey() {
|
||||||
return value.getTranslationKey();
|
return value.getTranslationKey();
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,9 +12,9 @@ public class ListOption extends ConfigurationOption {
|
||||||
/**
|
/**
|
||||||
* Instantiates a new Configuration option.
|
* Instantiates a new Configuration option.
|
||||||
*
|
*
|
||||||
* @param key
|
* @param key the key
|
||||||
* @param description the description
|
* @param description the description
|
||||||
* @param parent
|
* @param parent the parent
|
||||||
*/
|
*/
|
||||||
public ListOption(String key, String description, ModuleBase parent) {
|
public ListOption(String key, String description, ModuleBase parent) {
|
||||||
super(key, description, parent);
|
super(key, description, parent);
|
||||||
|
|
|
@ -17,9 +17,9 @@ public class StringOption extends ConfigurationOption {
|
||||||
/**
|
/**
|
||||||
* Instantiates a new Configuration option.
|
* Instantiates a new Configuration option.
|
||||||
*
|
*
|
||||||
* @param key
|
* @param key the key
|
||||||
* @param description the description
|
* @param description the description
|
||||||
* @param parent
|
* @param parent the parent
|
||||||
*/
|
*/
|
||||||
public StringOption(String key, String description, ModuleBase parent) {
|
public StringOption(String key, String description, ModuleBase parent) {
|
||||||
super(key, description, parent);
|
super(key, description, parent);
|
||||||
|
|
Loading…
Reference in a new issue