Migrate to using Registry for LCIO and configs
This commit is contained in:
parent
92bc4f150b
commit
083f74d94f
11 changed files with 59 additions and 110 deletions
|
@ -78,7 +78,8 @@ dependencies {
|
||||||
}
|
}
|
||||||
|
|
||||||
jarLibs(files('libs/TuddyLIB.jar'))
|
jarLibs(files('libs/TuddyLIB.jar'))
|
||||||
implementation(files('libs/mcregistry.jar'))
|
// should NOT go into the jar.
|
||||||
|
implementation(files('libs/mcregistry-1.0.jar'))
|
||||||
|
|
||||||
jarLibs 'club.minnced:java-discord-rpc:2.0.2'
|
jarLibs 'club.minnced:java-discord-rpc:2.0.2'
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -2,17 +2,19 @@ package com.baseband.client;
|
||||||
|
|
||||||
|
|
||||||
import com.baseband.client.command.CommandManager;
|
import com.baseband.client.command.CommandManager;
|
||||||
import com.baseband.client.data.LCIO;
|
|
||||||
import com.baseband.client.event.EventBus;
|
import com.baseband.client.event.EventBus;
|
||||||
import com.baseband.client.event.FMLEventProcessor;
|
import com.baseband.client.event.FMLEventProcessor;
|
||||||
import com.baseband.client.module.Module;
|
import com.baseband.client.module.Module;
|
||||||
import com.baseband.client.module.modules.*;
|
import com.baseband.client.module.modules.*;
|
||||||
|
import de.tudbut.tools.Registry;
|
||||||
|
import de.tudbut.mcregistry.MCRegistry;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import tudbut.parsing.TCN;
|
||||||
import tudbut.tools.Lock;
|
import tudbut.tools.Lock;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -20,16 +22,19 @@ import java.util.ArrayList;
|
||||||
@Mod(modid = "baseband")
|
@Mod(modid = "baseband")
|
||||||
public class BaseBand {
|
public class BaseBand {
|
||||||
public static int majorVersion = 1;
|
public static int majorVersion = 1;
|
||||||
public static int buildNumber = 50;
|
public static int buildNumber = 69;
|
||||||
public static String hash = "57ef0c99a21035ef";
|
public static String hash = "1251518fc0644b2b";
|
||||||
|
|
||||||
public static String name = "BaseBand";
|
public static String name = "BaseBand";
|
||||||
public long timeOfCompile = 1694973944897L;
|
public long timeOfCompile = 1694986783983L;
|
||||||
public CommandManager commandRegistry;
|
public CommandManager commandRegistry;
|
||||||
public EventBus eventBus;
|
public EventBus eventBus;
|
||||||
public static ConfigManager configManager = new ConfigManager("config.bb");
|
|
||||||
public ArrayList<Module> modules = new ArrayList<>();
|
public ArrayList<Module> modules = new ArrayList<>();
|
||||||
public static BaseBand INSTANCE; { INSTANCE = this; }
|
public static BaseBand INSTANCE;
|
||||||
|
public static Registry Registry;
|
||||||
|
private static TCN registryData;
|
||||||
|
|
||||||
|
{ INSTANCE = this; }
|
||||||
|
|
||||||
public static BaseBand getInstance() {
|
public static BaseBand getInstance() {
|
||||||
if(INSTANCE == null) {
|
if(INSTANCE == null) {
|
||||||
|
@ -39,10 +44,6 @@ public class BaseBand {
|
||||||
}
|
}
|
||||||
public static final Logger log = LogManager.getLogger("BaseBand");
|
public static final Logger log = LogManager.getLogger("BaseBand");
|
||||||
|
|
||||||
public static void handleLCIO(String key, Object value) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Mod.EventHandler
|
@Mod.EventHandler
|
||||||
public void eventInit(FMLPreInitializationEvent event) {
|
public void eventInit(FMLPreInitializationEvent event) {
|
||||||
onInit();
|
onInit();
|
||||||
|
@ -50,9 +51,20 @@ public class BaseBand {
|
||||||
|
|
||||||
public void onInit() {
|
public void onInit() {
|
||||||
Utils.check();
|
Utils.check();
|
||||||
String lcioClass = System.getProperty("org.bb.lcio");
|
try {
|
||||||
System.setProperty("org.bb.lcio", "");
|
Registry = MCRegistry.registerMod("baseband");
|
||||||
LCIO.init(lcioClass);
|
registryData = Registry.register("*");
|
||||||
|
} catch (Exception e) {
|
||||||
|
// tamper detected
|
||||||
|
Utils.crash();
|
||||||
|
}
|
||||||
|
// cant be a normal if statement because it might be null
|
||||||
|
if(registryData.get("LoaderPresent") != Boolean.TRUE) {
|
||||||
|
// do other stuff here later?
|
||||||
|
log.info("No loader present, but able to start anyway ==> Debug environment detected.");
|
||||||
|
}
|
||||||
|
// unset so this wont be discovered and manipulated
|
||||||
|
registryData.set("LoaderPresent", null);
|
||||||
|
|
||||||
commandRegistry = new CommandManager();
|
commandRegistry = new CommandManager();
|
||||||
eventBus = new EventBus();
|
eventBus = new EventBus();
|
||||||
|
@ -73,7 +85,6 @@ public class BaseBand {
|
||||||
MinecraftForge.EVENT_BUS.register(new FMLEventProcessor());
|
MinecraftForge.EVENT_BUS.register(new FMLEventProcessor());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
configManager.load();
|
|
||||||
for (Module m : modules) {
|
for (Module m : modules) {
|
||||||
if(m.isEnabled()) {
|
if(m.isEnabled()) {
|
||||||
MinecraftForge.EVENT_BUS.register(m);
|
MinecraftForge.EVENT_BUS.register(m);
|
||||||
|
@ -81,14 +92,14 @@ public class BaseBand {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
configManager.save();
|
ConfigManager.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
Lock lock = new Lock();
|
Lock lock = new Lock();
|
||||||
while(true) {
|
while(true) {
|
||||||
lock.lock(10000);
|
lock.lock(10000);
|
||||||
configManager.save();
|
ConfigManager.save();
|
||||||
lock.waitHere();
|
lock.waitHere();
|
||||||
}
|
}
|
||||||
}, "Config save thread").start();
|
}, "Config save thread").start();
|
||||||
|
|
|
@ -13,38 +13,11 @@ import java.nio.file.Paths;
|
||||||
|
|
||||||
public class ConfigManager {
|
public class ConfigManager {
|
||||||
|
|
||||||
private final String path;
|
public static void save() {
|
||||||
|
|
||||||
public ConfigManager(String path) {
|
|
||||||
this.path = path;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void save() {
|
|
||||||
TCN tcn = new TCN();
|
|
||||||
|
|
||||||
tcn.set("base", ConfigSaverTCN2.write(BaseBand.INSTANCE, false, true));
|
|
||||||
|
|
||||||
for (Module module : BaseBand.INSTANCE.modules) {
|
for (Module module : BaseBand.INSTANCE.modules) {
|
||||||
tcn.set(module.getClass().getSimpleName(), ConfigSaverTCN2.write(module, false, true));
|
module.updateData();
|
||||||
}
|
|
||||||
|
|
||||||
try(OutputStream stream = Files.newOutputStream(Paths.get(path))) {
|
|
||||||
stream.write(JSON.write(tcn).getBytes());
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void load() {
|
|
||||||
try(InputStream stream = Files.newInputStream(Paths.get(path))) {
|
|
||||||
TCN tcn = JSON.read(new StreamReader(stream).readAllAsString());
|
|
||||||
ConfigSaverTCN2.read(tcn.getSub("base"), BaseBand.INSTANCE);
|
|
||||||
for (Module module : BaseBand.INSTANCE.modules) {
|
|
||||||
ConfigSaverTCN2.read(tcn.getSub(module.getClass().getSimpleName()), module);
|
|
||||||
}
|
|
||||||
} catch (IOException | JSONFormatException | ClassNotFoundException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
package com.baseband.client.data;
|
|
||||||
|
|
||||||
import com.baseband.client.BaseBand;
|
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class LCIO {
|
|
||||||
|
|
||||||
private static Map<String, Object> params = new LinkedHashMap<>();
|
|
||||||
|
|
||||||
|
|
||||||
public static void init(String loaderLCIO) {
|
|
||||||
try {
|
|
||||||
params = (Map<String, Object>) Class.forName(loaderLCIO).getMethod("init", Class.class).invoke(null, LCIO.class);
|
|
||||||
for (Map.Entry<String, Object> entry : params.entrySet().toArray(new Map.Entry[0])) {
|
|
||||||
BaseBand.handleLCIO(entry.getKey(), entry.getValue());
|
|
||||||
}
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
// ignore. no loader is fine after utils has checked it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void update(String param, Object value, Map<String, Object> params) {
|
|
||||||
LCIO.params = params;
|
|
||||||
BaseBand.handleLCIO(param, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,9 +1,13 @@
|
||||||
package com.baseband.client.module;
|
package com.baseband.client.module;
|
||||||
|
|
||||||
import com.baseband.client.BaseBand;
|
import com.baseband.client.BaseBand;
|
||||||
|
import de.tudbut.tools.Registry;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
import scala.xml.dtd.impl.Base;
|
||||||
import tudbut.obj.Save;
|
import tudbut.obj.Save;
|
||||||
|
import tudbut.parsing.TCN;
|
||||||
|
import tudbut.tools.ConfigSaverTCN2;
|
||||||
|
|
||||||
public abstract class Module {
|
public abstract class Module {
|
||||||
@Save
|
@Save
|
||||||
|
@ -27,7 +31,20 @@ public abstract class Module {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TCN data;
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
data = BaseBand.Registry.register(this.toString());
|
||||||
|
if(data.getSub("@Save") != null)
|
||||||
|
ConfigSaverTCN2.read(data.getSub("@Save"), this);
|
||||||
|
} catch (IllegalAccessException | ClassNotFoundException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateData() {
|
||||||
|
data.set("@Save", ConfigSaverTCN2.write(this, false, true));
|
||||||
|
}
|
||||||
|
|
||||||
protected static Minecraft mc = Minecraft.getMinecraft();
|
protected static Minecraft mc = Minecraft.getMinecraft();
|
||||||
|
|
||||||
|
|
|
@ -71,6 +71,8 @@ dependencies {
|
||||||
}
|
}
|
||||||
|
|
||||||
implementation project(path: ':Client')
|
implementation project(path: ':Client')
|
||||||
|
// should NOT go into the jar.
|
||||||
|
implementation files('libs/mcregistry-1.0.jar')
|
||||||
|
|
||||||
|
|
||||||
annotationProcessor('org.spongepowered:mixin:0.8.5:processor') {
|
annotationProcessor('org.spongepowered:mixin:0.8.5:processor') {
|
||||||
|
|
BIN
Loader/libs/mcregistry-1.0.jar
Normal file
BIN
Loader/libs/mcregistry-1.0.jar
Normal file
Binary file not shown.
|
@ -1,32 +0,0 @@
|
||||||
package org.baseband.launcher.data;
|
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows interop between loader and client
|
|
||||||
*/
|
|
||||||
public class LCIO {
|
|
||||||
|
|
||||||
private static Class<?> clientLCIO;
|
|
||||||
private static final Map<String, Object> params = new LinkedHashMap<>();
|
|
||||||
|
|
||||||
public static Map<String, Object> init(Class<?> lcioClient) {
|
|
||||||
clientLCIO = lcioClient;
|
|
||||||
return params;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setClientParam(String param, Object data) {
|
|
||||||
params.put(param, data);
|
|
||||||
if(clientLCIO != null) {
|
|
||||||
// already initialized. update params
|
|
||||||
try {
|
|
||||||
clientLCIO.getMethod("update", String.class, Object.class, Map.class).invoke(null, param, data, params);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,11 +1,13 @@
|
||||||
package org.baseband.launcher.launch;
|
package org.baseband.launcher.launch;
|
||||||
|
|
||||||
|
import de.tudbut.mcregistry.MCRegistry;
|
||||||
|
import de.tudbut.tools.Registry;
|
||||||
import net.minecraft.launchwrapper.Launch;
|
import net.minecraft.launchwrapper.Launch;
|
||||||
import org.baseband.launcher.Tweaker;
|
import org.baseband.launcher.Tweaker;
|
||||||
import org.baseband.launcher.data.LCIO;
|
|
||||||
import org.baseband.launcher.util.CustomClassloader;
|
import org.baseband.launcher.util.CustomClassloader;
|
||||||
import org.baseband.launcher.util.Key;
|
import org.baseband.launcher.util.Key;
|
||||||
import sun.misc.Unsafe;
|
import sun.misc.Unsafe;
|
||||||
|
import tudbut.parsing.TCN;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
@ -213,7 +215,12 @@ public class Loader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
System.setProperty("org.bb.lcio", LCIO.class.getName());
|
Registry baseBandRegistry = MCRegistry.registerMod("baseband");
|
||||||
|
TCN tcn = baseBandRegistry.register("*");
|
||||||
|
tcn.set("LoaderPresent", true);
|
||||||
|
// this is not the real mod, so unregister so the actual client can register it
|
||||||
|
baseBandRegistry.unregister("*", tcn);
|
||||||
|
MCRegistry.unregisterMod("baseband", baseBandRegistry);
|
||||||
|
|
||||||
Tweaker.log("Loaded.");
|
Tweaker.log("Loaded.");
|
||||||
Tweaker.latch.countDown();
|
Tweaker.latch.countDown();
|
||||||
|
|
Loading…
Add table
Reference in a new issue