Skip to content

Commit

Permalink
start hud intergration + MODERN + remove old/useless deps
Browse files Browse the repository at this point in the history
  • Loading branch information
nextdayy committed Apr 12, 2024
1 parent a80ec0a commit df5dfb9
Show file tree
Hide file tree
Showing 37 changed files with 585 additions and 670 deletions.
24 changes: 6 additions & 18 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,35 +1,26 @@
[versions]
kotlin = "1.9.22"
kotlinx-coroutines = "1.8.0"
kotlinx-serialization = "1.6.3"
kotlinx-atomicfu = "0.23.2"
kotlinx-abi = "0.14.0"

pgt = "0.4.1"
shadow = "8.1.1"
licenser = "2.0.1"

pgt = "0.4.1"

caffeine = "3.1.8"
mixin = "0.7.11-SNAPSHOT"

lwjgl = "3.3.1"

polyui = "1.1.42"

slf4j = "2.0.12"
annotations = "24.1.0"

junit-bom = "5.10.2"

nightconfig = "3.6.6"

vigilance = "295"
lwjgl = "3.3.1"
universalcraft = "249"
mixin = "0.7.11-SNAPSHOT"

[libraries]
caffeine = { module = "com.github.ben-manes.caffeine:caffeine", version.ref = "caffeine" }
junit-bom = "5.10.2"

[libraries]
junit = { module = "org.junit.jupiter:junit-jupiter" }
junit-bom = { module = "org.junit:junit-bom", version.ref = "junit-bom" }

Expand All @@ -56,14 +47,11 @@ nightconfig-json = { module = "com.electronwill.night-config:json", version.ref
kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" }
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" }
kotlinx-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
kotlinx-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm", version.ref = "kotlinx-serialization" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json-jvm", version.ref = "kotlinx-serialization" }
kotlinx-serialization-cbor = { module = "org.jetbrains.kotlinx:kotlinx-serialization-cbor-jvm", version.ref = "kotlinx-serialization" }
kotlinx-atomicfu = { module = "org.jetbrains.kotlinx:atomicfu-jvm", version.ref = "kotlinx-atomicfu" }

[bundles]
kotlin = ["kotlin-reflect", "kotlin-stdlib"]
kotlinx = ["kotlinx-coroutines", "kotlinx-serialization", "kotlinx-serialization-json", "kotlinx-serialization-cbor", "kotlinx-atomicfu"]
kotlinx = ["kotlinx-coroutines", "kotlinx-atomicfu"]
lwjgl = ["lwjgl", "lwjgl-nvg", "lwjgl-opengl", "lwjgl-stb", "lwjgl-tinyfd"]
nightconfig = ["nightconfig", "nightconfig-json", "nightconfig-toml", "nightconfig-yaml"]
core = ["annotations", "slf4j-api"]
Expand Down
51 changes: 29 additions & 22 deletions modules/config-impl/api/config-impl.api
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ public abstract class org/polyfrost/oneconfig/api/config/Config {

public final class org/polyfrost/oneconfig/api/config/Config$Category : java/lang/Enum {
public static final field COMBAT Lorg/polyfrost/oneconfig/api/config/Config$Category;
public static final field HUD Lorg/polyfrost/oneconfig/api/config/Config$Category;
public static final field HYPIXEL Lorg/polyfrost/oneconfig/api/config/Config$Category;
public static final field OTHER Lorg/polyfrost/oneconfig/api/config/Config$Category;
public static final field QOL Lorg/polyfrost/oneconfig/api/config/Config$Category;
Expand All @@ -25,9 +24,12 @@ public final class org/polyfrost/oneconfig/api/config/ConfigManager {
public static fun collect (Ljava/lang/Object;Ljava/lang/String;)Lorg/polyfrost/oneconfig/api/config/Tree;
public static fun core ()Lorg/polyfrost/oneconfig/api/config/ConfigManager;
public fun get (Ljava/lang/String;)Lorg/polyfrost/oneconfig/api/config/Tree;
public fun getFolder ()Ljava/nio/file/Path;
public static fun openProfile (Ljava/lang/String;)V
public fun register (Ljava/lang/Object;Ljava/lang/String;)Lorg/polyfrost/oneconfig/api/config/Tree;
public fun register (Lorg/polyfrost/oneconfig/api/config/Tree;)Z
public static fun registerCollector (Lorg/polyfrost/oneconfig/api/config/collect/PropertyCollector;)V
public fun save (Ljava/lang/String;)Z
public fun trees ()Ljava/util/Collection;
}

Expand Down Expand Up @@ -140,31 +142,19 @@ public abstract interface annotation class org/polyfrost/oneconfig/api/config/an
public abstract fun title ()Ljava/lang/String;
}

public class org/polyfrost/oneconfig/api/config/backend/impl/NightConfigSerializer : org/polyfrost/oneconfig/api/config/backend/impl/file/FileSerializer {
public static final field ALL [Lorg/polyfrost/oneconfig/api/config/backend/impl/file/FileSerializer;
public static final field JSON Lorg/polyfrost/oneconfig/api/config/backend/impl/file/FileSerializer;
public static final field TOML Lorg/polyfrost/oneconfig/api/config/backend/impl/file/FileSerializer;
public static final field YAML Lorg/polyfrost/oneconfig/api/config/backend/impl/file/FileSerializer;
public fun <init> (Lcom/electronwill/nightconfig/core/io/ConfigWriter;Lcom/electronwill/nightconfig/core/io/ConfigParser;Ljava/lang/String;)V
public synthetic fun deserialize (Ljava/lang/Object;)Lorg/polyfrost/oneconfig/api/config/Tree;
public fun deserialize (Ljava/lang/String;)Lorg/polyfrost/oneconfig/api/config/Tree;
public fun getExtension ()Ljava/lang/String;
public synthetic fun serialize (Lorg/polyfrost/oneconfig/api/config/Tree;)Ljava/lang/Object;
public fun serialize (Lorg/polyfrost/oneconfig/api/config/Tree;)Ljava/lang/String;
}

public class org/polyfrost/oneconfig/api/config/backend/impl/file/FileBackend : org/polyfrost/oneconfig/api/config/backend/Backend {
public class org/polyfrost/oneconfig/api/config/backend/impl/FileBackend : org/polyfrost/oneconfig/api/config/backend/Backend {
public final field folder Ljava/nio/file/Path;
public fun <init> (Ljava/nio/file/Path;[Lorg/polyfrost/oneconfig/api/config/backend/impl/file/FileSerializer;)V
public fun addSerializer (Lorg/polyfrost/oneconfig/api/config/backend/impl/file/FileSerializer;)V
public fun addWatcher ()Lorg/polyfrost/oneconfig/api/config/backend/impl/file/FileBackend;
public fun <init> (Ljava/nio/file/Path;[Lorg/polyfrost/oneconfig/api/config/serialize/impl/FileSerializer;)V
public fun addSerializer (Lorg/polyfrost/oneconfig/api/config/serialize/impl/FileSerializer;)V
public fun addWatcher ()Lorg/polyfrost/oneconfig/api/config/backend/impl/FileBackend;
public fun dodge ()V
public fun gatherAll ()Ljava/util/List;
protected fun getSerializer (Ljava/nio/file/Path;)Lorg/polyfrost/oneconfig/api/config/serialize/impl/FileSerializer;
public fun hasWatcher ()Z
protected fun load0 (Ljava/lang/String;)Lorg/polyfrost/oneconfig/api/config/Tree;
protected static fun read (Ljava/nio/file/Path;)Ljava/lang/String;
protected fun save0 (Lorg/polyfrost/oneconfig/api/config/Tree;)Z
}

public abstract interface class org/polyfrost/oneconfig/api/config/backend/impl/file/FileSerializer : org/polyfrost/oneconfig/api/config/serialize/Serializer {
public abstract fun getExtension ()Ljava/lang/String;
protected static fun write (Ljava/nio/file/Path;Ljava/lang/String;)V
}

public class org/polyfrost/oneconfig/api/config/collect/impl/OneConfigCollector : org/polyfrost/oneconfig/api/config/collect/impl/ReflectiveCollector {
Expand All @@ -187,6 +177,23 @@ public abstract class org/polyfrost/oneconfig/api/config/collect/impl/Reflective
public abstract fun handleMethod (Ljava/lang/reflect/Method;Ljava/lang/Object;Lorg/polyfrost/oneconfig/api/config/Tree;)V
}

public abstract interface class org/polyfrost/oneconfig/api/config/serialize/impl/FileSerializer : org/polyfrost/oneconfig/api/config/serialize/Serializer {
public abstract fun getExtension ()Ljava/lang/String;
}

public class org/polyfrost/oneconfig/api/config/serialize/impl/NightConfigSerializer : org/polyfrost/oneconfig/api/config/serialize/impl/FileSerializer {
public static final field ALL [Lorg/polyfrost/oneconfig/api/config/serialize/impl/FileSerializer;
public static final field JSON Lorg/polyfrost/oneconfig/api/config/serialize/impl/FileSerializer;
public static final field TOML Lorg/polyfrost/oneconfig/api/config/serialize/impl/FileSerializer;
public static final field YAML Lorg/polyfrost/oneconfig/api/config/serialize/impl/FileSerializer;
public fun <init> (Lcom/electronwill/nightconfig/core/io/ConfigWriter;Lcom/electronwill/nightconfig/core/io/ConfigParser;Ljava/lang/String;)V
public synthetic fun deserialize (Ljava/lang/Object;)Lorg/polyfrost/oneconfig/api/config/Tree;
public fun deserialize (Ljava/lang/String;)Lorg/polyfrost/oneconfig/api/config/Tree;
public fun getExtension ()Ljava/lang/String;
public synthetic fun serialize (Lorg/polyfrost/oneconfig/api/config/Tree;)Ljava/lang/Object;
public fun serialize (Lorg/polyfrost/oneconfig/api/config/Tree;)Ljava/lang/String;
}

public abstract interface class org/polyfrost/oneconfig/api/config/visualize/Visualizer {
public abstract fun visualize (Lorg/polyfrost/oneconfig/api/config/Property;)Lorg/polyfrost/polyui/component/Drawable;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public abstract class Config {

public Config(@NotNull String id, @Nullable PolyImage icon, @NotNull String title, @NotNull Category category) {
tree = ConfigManager.active().register(this, id);
if(tree == null) throw new IllegalStateException("hm.");
tree.setTitle(title);
if (icon != null) tree.addMetadata("icon", icon);
tree.addMetadata("category", category);
Expand Down Expand Up @@ -65,7 +66,6 @@ public Property<?> getProperty(String option) {


public enum Category {
HUD("hud.svg", "oneconfig.hud"),
COMBAT("console.svg", "oneconfig.combat"),
QOL("spanner.svg", "oneconfig.qol"),
HYPIXEL("hypixel.svg", "oneconfig.hypixel"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.UnmodifiableView;
import org.polyfrost.oneconfig.api.config.backend.impl.NightConfigSerializer;
import org.polyfrost.oneconfig.api.config.backend.impl.file.FileBackend;
import org.polyfrost.oneconfig.api.config.backend.impl.file.FileSerializer;
import org.polyfrost.oneconfig.api.config.serialize.impl.NightConfigSerializer;
import org.polyfrost.oneconfig.api.config.backend.impl.FileBackend;
import org.polyfrost.oneconfig.api.config.serialize.impl.FileSerializer;
import org.polyfrost.oneconfig.api.config.collect.PropertyCollector;
import org.polyfrost.oneconfig.api.config.collect.impl.OneConfigCollector;
import org.polyfrost.oneconfig.api.events.EventManager;
Expand All @@ -53,7 +53,7 @@ public final class ConfigManager {
public static final Path PROFILES_DIR = Paths.get("profiles");

private static final List<PropertyCollector> collectors = new ArrayList<>(1);
private static final ConfigManager internal = new ConfigManager(Paths.get("OneConfig"), NightConfigSerializer.JSON).withHook().withWatcher();
private static final ConfigManager internal = new ConfigManager(Paths.get("OneConfig"), NightConfigSerializer.JSON);
private static final ConfigManager core = new ConfigManager(Paths.get("config"), NightConfigSerializer.ALL);
private static ConfigManager active;

Expand Down Expand Up @@ -87,7 +87,7 @@ public static ConfigManager active() {
}

private static void initialize() {
internal().backend.register(
internal().register(
tree("profiles.json").put(
prop("activeProfile", "")
)
Expand All @@ -98,6 +98,7 @@ private static void initialize() {

public static void openProfile(String profile) {
internal().get("profiles.json").getProp("activeProfile").setAs(profile);
internal().save("profiles.json");
if (profile.isEmpty()) active = core();
else {
LOGGER.info("opening profile {}", profile);
Expand All @@ -107,7 +108,9 @@ public static void openProfile(String profile) {

/**
* Returns a reference to the core config manager, which is mounted onto the ./config directory.
* <b>internal use only!</b>
*/
@ApiStatus.Internal
public static ConfigManager core() {
return core;
}
Expand All @@ -121,6 +124,18 @@ public Tree get(String id) {
return backend.get(id);
}

public boolean save(String id) {
return backend.save(id);
}

public Path getFolder() {
return backend.folder;
}

public boolean register(Tree t) {
return backend.register(t);
}


public Tree register(@NotNull Object o, @NotNull String id) {
Tree t = collect(o, id);
Expand Down Expand Up @@ -170,7 +185,7 @@ private ConfigManager withWatcher() {
private void hook() {
if (shutdown) return;
shutdown = true;
LOGGER.info("shutdown requested; saving all configs...");
LOGGER.info("shutdown requested; saving all configs in {}", backend.folder.getFileName());
for (Tree t : backend.getTrees()) {
backend.save(t);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,24 +24,28 @@
* <https://polyfrost.org/legal/oneconfig/additional-terms>
*/

package org.polyfrost.oneconfig.api.config.backend.impl.file;
package org.polyfrost.oneconfig.api.config.backend.impl;

import org.jetbrains.annotations.NotNull;
import org.polyfrost.oneconfig.api.config.Tree;
import org.polyfrost.oneconfig.api.config.backend.Backend;
import org.polyfrost.oneconfig.api.config.exceptions.SerializationException;
import org.polyfrost.oneconfig.api.config.serialize.impl.FileSerializer;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class FileBackend extends Backend {
Expand Down Expand Up @@ -99,12 +103,14 @@ public FileBackend addWatcher() throws IOException {
}
if (!key.reset()) {
LOGGER.error("file watcher is invalid; disabled!");
hasWatcher = false;
break;
}
} catch (Exception e) {
i++;
LOGGER.error("error with config file watcher (error no. {})", i, e);
if (i > 10) {
hasWatcher = false;
LOGGER.error("Too many errors, shutting down file watcher!");
break;
}
Expand All @@ -114,9 +120,14 @@ public FileBackend addWatcher() throws IOException {
t.setName("OneConfig Config Watcher");
t.setDaemon(true);
t.start();
LOGGER.info("installed watcher to {}", folder);
return this;
}

public boolean hasWatcher() {
return hasWatcher;
}

public void dodge() {
dodge = true;
}
Expand All @@ -126,6 +137,10 @@ protected Tree load0(@NotNull String id) throws Exception {
Path p = folder.resolve(id);
if (!Files.exists(p)) return null;
FileSerializer<String> serializer = getSerializer(p);
if (serializer == null) {
LOGGER.error("No serializer found for loading file {}", p);
return null;
}
try {
return serializer.deserialize(read(p));
} catch (Exception e) {
Expand All @@ -139,11 +154,15 @@ protected Tree load0(@NotNull String id) throws Exception {
protected boolean save0(@NotNull Tree tree) {
Path p = folder.resolve(tree.getID());
FileSerializer<String> serializer = getSerializer(p);
if (serializer == null) {
LOGGER.error("No serializer found for saving file {}", p);
return false;
}
write(p, serializer.serialize(tree));
return true;
}

private static String read(Path p) {
protected static String read(Path p) {
StringBuilder buf = new StringBuilder();
try (BufferedReader r = Files.newBufferedReader(p)) {
String o;
Expand All @@ -156,25 +175,47 @@ private static String read(Path p) {
return buf.toString();
}

private static void write(Path p, String s) {
protected static void write(Path p, String s) {
try (BufferedWriter w = Files.newBufferedWriter(p, StandardOpenOption.CREATE)) {
w.write(s);
} catch (Exception e) {
throw new SerializationException("Failed to write file", e);
}
}

/**
* Inspect all files in this directory and make trees of them where possible.
*/
public List<Tree> gatherAll() {
ArrayList<Tree> out = new ArrayList<>();
try (DirectoryStream<Path> stream = Files.newDirectoryStream(folder)) {
for (Path p : stream) {
if (!Files.isRegularFile(p)) continue;
FileSerializer<String> serializer = getSerializer(p);
if (serializer == null) continue;
try {
Tree t = serializer.deserialize(read(p));
t.setID(p.getFileName().toString());
t.lock();
out.add(t);
} catch (Exception ignored) {
}
}
} catch (IOException e) {
LOGGER.error("Failed to gather all configs", e);
}
out.trimToSize();
return out;
}

public void addSerializer(FileSerializer<String> serializer) {
serializers.putIfAbsent(serializer.getExtension(), serializer);
serializers.put(serializer.getExtension(), serializer);
}

private FileSerializer<String> getSerializer(Path p) {
protected FileSerializer<String> getSerializer(Path p) {
String path = p.toString();
int i = path.lastIndexOf('.');
if (i == -1) throw new IllegalArgumentException();
String ext = path.substring(i);
FileSerializer<String> s = serializers.get(ext);
if (s == null) throw new IllegalArgumentException("No serializer found for extension " + ext);
return s;
if (i == -1) return null;
return serializers.get(path.substring(i));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public void handleField(@NotNull Field f, @NotNull Object src, @NotNull Tree bui
// asm: use method handle as it fails NOW instead of at set time, and is faster
final MethodHandle setter = MHUtils.getFieldSetter(f, src).getOrThrow();
Class<?> type = f.getType();
Property<?> p = Property.prop(f.getName(), MHUtils.getFieldGetter(f, src).getOrThrow().invoke(), type).addCallback(v -> {
Property<?> p = Property.prop(f.getName(), MHUtils.setAccessible(f).get(src), type).addCallback(v -> {
try {
if (type.isArray() && v instanceof List<?>) {
setter.invoke(ObjectSerializer.unbox(v, type));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
* <https://polyfrost.org/legal/oneconfig/additional-terms>
*/

package org.polyfrost.oneconfig.api.config.backend.impl.file;
package org.polyfrost.oneconfig.api.config.serialize.impl;

import org.polyfrost.oneconfig.api.config.serialize.Serializer;

Expand Down
Loading

0 comments on commit df5dfb9

Please sign in to comment.