aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWyvest <45589059+Wyvest@users.noreply.github.com>2022-07-05 22:37:47 +0900
committerWyvest <45589059+Wyvest@users.noreply.github.com>2022-07-05 22:37:47 +0900
commit206063acf3a6e0edc0d16b07d206aa36207b42d4 (patch)
tree8d0f31d65cfa4b3f85a3d4f7f0844f6df65b2b7e
parentfecb67e07ded0d20b12d3bdb48fea3e2e50b7f88 (diff)
downloadOneConfig-206063acf3a6e0edc0d16b07d206aa36207b42d4.tar.gz
OneConfig-206063acf3a6e0edc0d16b07d206aa36207b42d4.tar.bz2
OneConfig-206063acf3a6e0edc0d16b07d206aa36207b42d4.zip
a
-rw-r--r--build.gradle.kts6
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java44
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/pages/Page.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/internal/plugin/OneConfigMixinPlugin.java129
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/platform/MousePlatform.java14
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/platform/Platform.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/utils/InputUtils.java4
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/utils/commands/PlatformCommandManager.java63
-rw-r--r--versions/1.12.2-1.16.2.txt18
-rw-r--r--versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/ClientModLoaderMixin.java5
-rw-r--r--versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/KeyboardListenerMixin.java2
-rw-r--r--versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/MouseHelperAccessor.java11
-rw-r--r--versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/MouseHelperMixin.java2
-rw-r--r--versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/TimeTrackerMixin.java2
-rw-r--r--versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/utils/commands/PlatformCommandManagerImpl.java123
-rw-r--r--versions/build.gradle.kts61
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java13
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/gui/impl/BlurHandlerImpl.java15
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/plugin/OneConfigMixinPlugin.java140
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/plugin/asm/ClassTransformer.java4
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/plugin/asm/OneConfigTweaker.java4
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/platform/impl/LoaderPlatformImpl.java12
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/platform/impl/MousePlatformImpl.java65
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/platform/impl/PlatformImpl.java29
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/test/TestMod_Test.java16
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/utils/commands/PlatformCommandManagerImpl.java333
-rw-r--r--versions/src/main/resources/META-INF/mods.toml30
-rw-r--r--versions/src/main/resources/pack.mcmeta7
28 files changed, 718 insertions, 438 deletions
diff --git a/build.gradle.kts b/build.gradle.kts
index 8d888c4..3d48b72 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -59,12 +59,6 @@ val shade: Configuration by configurations.creating {
val shadeNoPom: Configuration by configurations.creating
-sourceSets {
- main {
- output.setResourcesDir(java.classesDirectory)
- }
-}
-
val common = registerStripReferencesAttribute("common") {
excludes.add("net.minecraft")
excludes.add("net.minecraftforge")
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java
index 40463df..552051f 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java
@@ -143,32 +143,26 @@ public class TextInputField extends BasicElement {
width = RenderManager.getTextWidth(vg, s.substring(0, caretPos), 14f, Fonts.REGULAR.font);
}
if (hovered) {
- while (Platform.getMousePlatform().next()) {
- if (Platform.getMousePlatform().getEventButtonState()) {
- if (Platform.getMousePlatform().getEventButton() == 0) {
- if (multiLine) {
- int caretLine = Math.max(0, Math.min(wrappedText.size() - 1, (int) Math.floor((InputUtils.mouseY() - y - 10) / 24f)));
- caretPos = calculatePos(InputUtils.mouseX(), wrappedText.get(caretLine));
- } else prevCaret = calculatePos(InputUtils.mouseX(), input);
- if (System.currentTimeMillis() - clickTimeD1 < 300) {
- onDoubleClick();
- isDoubleClick = true;
- }
- clickTimeD1 = System.currentTimeMillis();
- }
- } else {
- if (Platform.getMousePlatform().getEventButton() == 0) {
- long clickTimeU = System.currentTimeMillis();
- if (clickTimeU - clickTimeD1 < 200) {
- if (!isDoubleClick) {
- start = 0;
- end = 0;
- }
- prevCaret = caretPos;
- isDoubleClick = false;
- }
-
+ int state = Platform.getMousePlatform().getButtonState(0); //todo does this work
+ if (state == 1) {
+ if (multiLine) {
+ int caretLine = Math.max(0, Math.min(wrappedText.size() - 1, (int) Math.floor((InputUtils.mouseY() - y - 10) / 24f)));
+ caretPos = calculatePos(InputUtils.mouseX(), wrappedText.get(caretLine));
+ } else prevCaret = calculatePos(InputUtils.mouseX(), input);
+ if (System.currentTimeMillis() - clickTimeD1 < 300) {
+ onDoubleClick();
+ isDoubleClick = true;
+ }
+ clickTimeD1 = System.currentTimeMillis();
+ } else {
+ long clickTimeU = System.currentTimeMillis();
+ if (clickTimeU - clickTimeD1 < 200) {
+ if (!isDoubleClick) {
+ start = 0;
+ end = 0;
}
+ prevCaret = caretPos;
+ isDoubleClick = false;
}
}
}
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/pages/Page.java b/src/main/java/cc/polyfrost/oneconfig/gui/pages/Page.java
index ddf6a3f..028f098 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/pages/Page.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/pages/Page.java
@@ -52,7 +52,7 @@ public abstract class Page {
final float scrollBarLength = (728f / maxScroll) * 728f;
Scissor scissor = ScissorManager.scissor(vg, x, y + scissorOffset, x + 1056, y + 728 - scissorOffset);
Scissor inputScissor = InputUtils.blockInputArea(x, y,1056, scissorOffset);
- int dWheel = Platform.getMousePlatform().getDWheel();
+ int dWheel = (int) Platform.getMousePlatform().getDWheel();
if (dWheel != 0) {
scrollTarget += dWheel;
diff --git a/src/main/java/cc/polyfrost/oneconfig/internal/plugin/OneConfigMixinPlugin.java b/src/main/java/cc/polyfrost/oneconfig/internal/plugin/OneConfigMixinPlugin.java
deleted file mode 100644
index 0ef2c58..0000000
--- a/src/main/java/cc/polyfrost/oneconfig/internal/plugin/OneConfigMixinPlugin.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package cc.polyfrost.oneconfig.internal.plugin;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.spongepowered.asm.lib.tree.*;
-import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
-import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
-
-import java.io.File;
-import java.util.List;
-import java.util.Set;
-
-public class OneConfigMixinPlugin implements IMixinConfigPlugin {
- private static boolean isVigilance = false;
-
- @Override
- public void onLoad(String mixinPackage) {
- try {
- Class.forName("gg.essential.vigilance.Vigilant");
- isVigilance = true;
- } catch (Exception e) {
- isVigilance = false;
- }
- }
-
- @Override
- public String getRefMapperConfig() {
- return null;
- }
-
- @Override
- public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
- return !targetClassName.contains("vigilance") || isVigilance;
- }
-
- @Override
- public void acceptTargets(Set<String> myTargets, Set<String> otherTargets) {
-
- }
-
- @Override
- public List<String> getMixins() {
- return null;
- }
-
- @Override
- public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
-
- }
-
- @Override
- public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
- if (mixinClassName.equals("cc.polyfrost.oneconfig.internal.mixin.VigilantMixin")) {
- transform(targetClass);
- }
- }
-
- /**
- * If anything here is changed, edit the corresponding method in OneConfigMixinPlugin!
- */
- private void transform(ClassNode node) {
- if (!node.interfaces.contains("cc/polyfrost/oneconfig/config/compatibility/vigilance/VigilantAccessor")) {
- node.fields.add(new FieldNode(Opcodes.ACC_PUBLIC, "oneconfig$config", "Lcc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceConfig;", null, null));
- node.fields.add(new FieldNode(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "oneconfig$file", Type.getDescriptor(File.class), null, null));
-
- node.interfaces.add("cc/polyfrost/oneconfig/config/compatibility/vigilance/VigilantAccessor");
- MethodNode methodNode = new MethodNode(Opcodes.ACC_PUBLIC, "getPropertyCollector", "()Lgg/essential/vigilance/data/PropertyCollector;", null, null);
- LabelNode labelNode = new LabelNode();
- methodNode.instructions.add(labelNode);
- methodNode.instructions.add(new LineNumberNode(421421, labelNode));
- methodNode.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
- methodNode.instructions.add(new FieldInsnNode(Opcodes.GETFIELD, "gg/essential/vigilance/Vigilant", "propertyCollector", "Lgg/essential/vigilance/data/PropertyCollector;"));
- methodNode.instructions.add(new InsnNode(Opcodes.ARETURN));
- node.methods.add(methodNode);
-
- MethodNode methodNode2 = new MethodNode(Opcodes.ACC_PUBLIC, "handleOneConfigDependency", "(Lgg/essential/vigilance/data/PropertyData;Lgg/essential/vigilance/data/PropertyData;)V", null, null);
- LabelNode labelNode2 = new LabelNode();
- LabelNode labelNode3 = new LabelNode();
- LabelNode labelNode4 = new LabelNode();
- methodNode2.instructions.add(labelNode2);
- methodNode2.instructions.add(new LineNumberNode(15636436, labelNode2));
- methodNode2.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
- methodNode2.instructions.add(new FieldInsnNode(Opcodes.GETFIELD, "gg/essential/vigilance/Vigilant", "oneconfig$config", "Lcc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceConfig;"));
-
- methodNode2.instructions.add(new JumpInsnNode(Opcodes.IFNULL, labelNode4));
-
- methodNode2.instructions.add(labelNode3);
- methodNode2.instructions.add(new LineNumberNode(15636437, labelNode3));
- methodNode2.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
- methodNode2.instructions.add(new FieldInsnNode(Opcodes.GETFIELD, "gg/essential/vigilance/Vigilant", "oneconfig$config", "Lcc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceConfig;"));
- methodNode2.instructions.add(new VarInsnNode(Opcodes.ALOAD, 1));
- methodNode2.instructions.add(new VarInsnNode(Opcodes.ALOAD, 2));
- methodNode2.instructions.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "cc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceConfig", "addDependency", "(Lgg/essential/vigilance/data/PropertyData;Lgg/essential/vigilance/data/PropertyData;)V", false));
-
- methodNode2.instructions.add(labelNode4);
- methodNode2.instructions.add(new LineNumberNode(15636438, labelNode4));
- methodNode2.instructions.add(new InsnNode(Opcodes.RETURN));
- node.methods.add(methodNode2);
-
- for (MethodNode method : node.methods) {
- if (method.name.equals("initialize")) {
- InsnList list = new InsnList();
- list.add(new VarInsnNode(Opcodes.ALOAD, 0));
- list.add(new VarInsnNode(Opcodes.ALOAD, 0));
- list.add(new VarInsnNode(Opcodes.ALOAD, 0));
- list.add(new FieldInsnNode(Opcodes.GETFIELD, "gg/essential/vigilance/Vigilant", "oneconfig$file", Type.getDescriptor(File.class)));
- list.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "cc/polyfrost/oneconfig/internal/plugin/hooks/VigilantHook", "returnNewConfig", "(Lgg/essential/vigilance/Vigilant;Ljava/io/File;)Lcc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceConfig;", false));
- list.add(new FieldInsnNode(Opcodes.PUTFIELD, "gg/essential/vigilance/Vigilant", "oneconfig$config", "Lcc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceConfig;"));
- method.instructions.insertBefore(method.instructions.getLast().getPrevious(), list);
- } else if (method.name.equals("addDependency") && method.desc.equals("(Lgg/essential/vigilance/data/PropertyData;Lgg/essential/vigilance/data/PropertyData;)V")) {
- InsnList list = new InsnList();
-
- list.add(new VarInsnNode(Opcodes.ALOAD, 0));
- list.add(new VarInsnNode(Opcodes.ALOAD, 1));
- list.add(new VarInsnNode(Opcodes.ALOAD, 2));
- list.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "gg/essential/vigilance/Vigilant", "handleOneConfigDependency", "(Lgg/essential/vigilance/data/PropertyData;Lgg/essential/vigilance/data/PropertyData;)V", false));
-
- method.instructions.insertBefore(method.instructions.getLast().getPrevious(), list);
- } else if (method.name.equals("<init>") && method.desc.equals("(Ljava/io/File;Ljava/lang/String;Lgg/essential/vigilance/data/PropertyCollector;Lgg/essential/vigilance/data/SortingBehavior;)V")) {
- InsnList list = new InsnList();
- list.add(new VarInsnNode(Opcodes.ALOAD, 0));
- list.add(new VarInsnNode(Opcodes.ALOAD, 1));
- list.add(new FieldInsnNode(Opcodes.PUTFIELD, "gg/essential/vigilance/Vigilant", "oneconfig$file", Type.getDescriptor(File.class)));
- method.instructions.insertBefore(method.instructions.getLast().getPrevious(), list);
- }
- }
- }
- }
-}
diff --git a/src/main/java/cc/polyfrost/oneconfig/platform/MousePlatform.java b/src/main/java/cc/polyfrost/oneconfig/platform/MousePlatform.java
index add5f4f..3d7d735 100644
--- a/src/main/java/cc/polyfrost/oneconfig/platform/MousePlatform.java
+++ b/src/main/java/cc/polyfrost/oneconfig/platform/MousePlatform.java
@@ -1,15 +1,13 @@
package cc.polyfrost.oneconfig.platform;
public interface MousePlatform {
- int getMouseX();
- int getMouseY();
- int getDWheel();
- int getMouseDX();
- int getMouseDY();
+ double getMouseX();
+ double getMouseY();
+ double getDWheel();
+ double getMouseDX();
+ double getMouseDY();
- boolean next();
- boolean getEventButtonState();
- int getEventButton();
+ int getButtonState(int button);
boolean isButtonDown(int button);
}
diff --git a/src/main/java/cc/polyfrost/oneconfig/platform/Platform.java b/src/main/java/cc/polyfrost/oneconfig/platform/Platform.java
index 3eea049..62e9e2a 100644
--- a/src/main/java/cc/polyfrost/oneconfig/platform/Platform.java
+++ b/src/main/java/cc/polyfrost/oneconfig/platform/Platform.java
@@ -39,6 +39,8 @@ public interface Platform {
boolean isCallingFromMinecraftThread();
+ int getMinecraftVersion();
+
class PlatformHolder {
private PlatformHolder() {
diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/InputUtils.java b/src/main/java/cc/polyfrost/oneconfig/utils/InputUtils.java
index a48d369..6582eaa 100644
--- a/src/main/java/cc/polyfrost/oneconfig/utils/InputUtils.java
+++ b/src/main/java/cc/polyfrost/oneconfig/utils/InputUtils.java
@@ -96,7 +96,7 @@ public final class InputUtils {
* @return the current mouse X position
*/
public static int mouseX() {
- if (OneConfigGui.INSTANCE == null) return Platform.getMousePlatform().getMouseX();
+ if (OneConfigGui.INSTANCE == null) return (int) Platform.getMousePlatform().getMouseX(); //todo stop casting and actually use doubles
return (int) (Platform.getMousePlatform().getMouseX() / OneConfigGui.INSTANCE.getScaleFactor());
}
@@ -110,7 +110,7 @@ public final class InputUtils {
* @return the current mouse Y position
*/
public static int mouseY() {
- if (OneConfigGui.INSTANCE == null) return UResolution.getWindowHeight() - Math.abs(Platform.getMousePlatform().getMouseY());
+ if (OneConfigGui.INSTANCE == null) return (int) (UResolution.getWindowHeight() - Math.abs(Platform.getMousePlatform().getMouseY()));
return (int) ((UResolution.getWindowHeight() - Math.abs(Platform.getMousePlatform().getMouseY())) / OneConfigGui.INSTANCE.getScaleFactor());
}
diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/commands/PlatformCommandManager.java b/src/main/java/cc/polyfrost/oneconfig/utils/commands/PlatformCommandManager.java
index a02f4ff..1ab356c 100644
--- a/src/main/java/cc/polyfrost/oneconfig/utils/commands/PlatformCommandManager.java
+++ b/src/main/java/cc/polyfrost/oneconfig/utils/commands/PlatformCommandManager.java
@@ -1,7 +1,66 @@
package cc.polyfrost.oneconfig.utils.commands;
+import cc.polyfrost.oneconfig.libs.universal.ChatColor;
import cc.polyfrost.oneconfig.utils.commands.annotations.Command;
+import cc.polyfrost.oneconfig.utils.commands.annotations.Name;
+import cc.polyfrost.oneconfig.utils.commands.annotations.SubCommand;
+import cc.polyfrost.oneconfig.utils.commands.arguments.ArgumentParser;
-public interface PlatformCommandManager {
- void createCommand(CommandManager.InternalCommand root, Command annotation);
+import java.lang.reflect.Parameter;
+
+public abstract class PlatformCommandManager {
+
+ //TODO: someone make the help command actually look nice lmao
+ protected String sendHelpCommand(CommandManager.InternalCommand root) {
+ StringBuilder builder = new StringBuilder();
+ builder.append(ChatColor.GOLD).append("Help for ").append(ChatColor.BOLD).append(root.name).append(ChatColor.RESET).append(ChatColor.GOLD).append(":\n");
+ if (!root.description.isEmpty()) {
+ builder.append("\n").append(ChatColor.GOLD).append("Description: ").append(ChatColor.BOLD).append(root.description);
+ }
+ for (CommandManager.InternalCommand command : root.children) {
+ runThroughCommandsHelp(root.name, command, builder);
+ }
+ builder.append("\n").append(ChatColor.GOLD).append("Aliases: ").append(ChatColor.BOLD);
+ int index = 0;
+ for (String alias : root.aliases) {
+ ++index;
+ builder.append(alias).append(index < root.aliases.length ? ", " : "");
+ }
+ builder.append("\n");
+ return builder.toString();
+ }
+
+ protected void runThroughCommandsHelp(String append, CommandManager.InternalCommand command, StringBuilder builder) {
+ if (!command.invokers.isEmpty()) {
+ Class<?> declaringClass = command.invokers.get(0).method.getDeclaringClass();
+ if (declaringClass.isAnnotationPresent(SubCommand.class)) {
+ String description = declaringClass.getAnnotation(SubCommand.class).description();
+ if (!description.isEmpty()) {
+ builder.append("\n").append(ChatColor.GOLD).append("Description: ").append(ChatColor.BOLD).append(description);
+ }
+ }
+ }
+ for (CommandManager.InternalCommand.InternalCommandInvoker invoker : command.invokers) {
+ builder.append("\n").append(ChatColor.GOLD).append("/").append(append).append(" ").append(command.name);
+ for (Parameter parameter : invoker.method.getParameters()) {
+ String name = parameter.getName();
+ if (parameter.isAnnotationPresent(Name.class)) {
+ name = parameter.getAnnotation(Name.class).value();
+ }
+ builder.append(" <").append(name).append(">");
+ }
+ if (!command.description.trim().isEmpty()) {
+ builder.append(": ").append(ChatColor.BOLD).append(command.description);
+ }
+ }
+ for (CommandManager.InternalCommand subCommand : command.children) {
+ runThroughCommandsHelp(append + " " + command.name, subCommand, builder);
+ }
+ }
+
+ abstract void createCommand(CommandManager.InternalCommand root, Command annotation);
+
+ public void handleNewParser(ArgumentParser<?> parser, Class<?> clazz) {
+
+ }
}
diff --git a/versions/1.12.2-1.16.2.txt b/versions/1.12.2-1.16.2.txt
index 5171175..5d0f09b 100644
--- a/versions/1.12.2-1.16.2.txt
+++ b/versions/1.12.2-1.16.2.txt
@@ -9,8 +9,22 @@ net.minecraft.client.entity.EntityPlayerSP net.minecraft.client.entity.player.Cl
net.minecraft.launchwrapper.IClassTransformer transform() transformClassBytes()
net.minecraft.launchwrapper.IClassTransformer org.spongepowered.asm.service.ILegacyClassTransformer
net.minecraft.client.Minecraft entityRenderer gameRenderer
-net.minecraftforge.fml.common.event.FMLInitializationEvent net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent
net.minecraft.client.shader.ShaderUniform net.minecraft.client.shader.ShaderDefault
+
+net.minecraftforge.fml.common.event.FMLInitializationEvent net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent
net.minecraftforge.fml.common.Loader instance() get()
+net.minecraftforge.fml.common.Loader activeModContainer() getActiveContainer()
net.minecraftforge.fml.common.Loader net.minecraftforge.fml.ModLoadingContext
-net.minecraftforge.fml.common.ModContainer net.minecraftforge.fml.ModContainer \ No newline at end of file
+net.minecraftforge.fml.common.ModContainer net.minecraftforge.fml.ModContainer
+
+org.spongepowered.asm.lib.tree.ClassNode org.objectweb.asm.tree.ClassNode
+org.spongepowered.asm.lib.tree.FieldNode org.objectweb.asm.tree.FieldNode
+org.spongepowered.asm.lib.tree.MethodNode org.objectweb.asm.tree.MethodNode
+org.spongepowered.asm.lib.tree.LabelNode org.objectweb.asm.tree.LabelNode
+org.spongepowered.asm.lib.tree.LineNumberNode org.objectweb.asm.tree.LineNumberNode
+org.spongepowered.asm.lib.tree.VarInsnNode org.objectweb.asm.tree.VarInsnNode
+org.spongepowered.asm.lib.tree.FieldInsnNode org.objectweb.asm.tree.FieldInsnNode
+org.spongepowered.asm.lib.tree.MethodInsnNode org.objectweb.asm.tree.MethodInsnNode
+org.spongepowered.asm.lib.tree.InsnList org.objectweb.asm.tree.InsnList
+org.spongepowered.asm.lib.tree.InsnNode org.objectweb.asm.tree.InsnNode
+org.spongepowered.asm.lib.tree.JumpInsnNode org.objectweb.asm.tree.JumpInsnNode \ No newline at end of file
diff --git a/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/ClientModLoaderMixin.java b/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/ClientModLoaderMixin.java
index 2bfbaef..b0caed6 100644
--- a/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/ClientModLoaderMixin.java
+++ b/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/ClientModLoaderMixin.java
@@ -2,6 +2,7 @@ package cc.polyfrost.oneconfig.internal.mixin;
import cc.polyfrost.oneconfig.events.EventManager;
import cc.polyfrost.oneconfig.events.event.InitializationEvent;
+import cc.polyfrost.oneconfig.internal.OneConfig;
import net.minecraftforge.fml.client.ClientModLoader;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@@ -9,13 +10,13 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(value = ClientModLoader.class, remap = false)
-public class ClientModLoaderMixin { //todo
+public class ClientModLoaderMixin {
@Inject(method = "begin", at = @At("HEAD"))
private static void onBegin(CallbackInfo ci) {
OneConfig.preLaunch();
}
- @Inject(method = "finishModLoading", at = @At("HEAD"))
+ @Inject(method = "lambda$finishModLoading$9", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/GameSettings;loadOptions()V"))
private static void onFinishModLoading(CallbackInfo ci) {
EventManager.INSTANCE.post(new InitializationEvent());
OneConfig.init();
diff --git a/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/KeyboardListenerMixin.java b/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/KeyboardListenerMixin.java
index 5cd10cf..c7e6327 100644
--- a/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/KeyboardListenerMixin.java
+++ b/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/KeyboardListenerMixin.java
@@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(KeyboardListener.class)
-public class KeyboardListenerMixin { //todo
+public class KeyboardListenerMixin {
@Inject(method = "onKeyEvent", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/ForgeHooksClient;fireKeyInput(IIII)V"))
private void onKeyEvent(long windowPointer, int key, int scanCode, int action, int modifiers, CallbackInfo ci) {
EventManager.INSTANCE.post(new KeyInputEvent());
diff --git a/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/MouseHelperAccessor.java b/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/MouseHelperAccessor.java
new file mode 100644
index 0000000..d04ecb1
--- /dev/null
+++ b/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/MouseHelperAccessor.java
@@ -0,0 +1,11 @@
+package cc.polyfrost.oneconfig.internal.mixin;
+
+import net.minecraft.client.MouseHelper;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+@Mixin(MouseHelper.class)
+public interface MouseHelperAccessor {
+ @Accessor
+ double getAccumulatedScrollDelta();
+}
diff --git a/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/MouseHelperMixin.java b/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/MouseHelperMixin.java
index 95a5b0c..42dd283 100644
--- a/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/MouseHelperMixin.java
+++ b/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/MouseHelperMixin.java
@@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(MouseHelper.class)
-public class MouseHelperMixin { //todo
+public class MouseHelperMixin {
@Inject(method = "mouseButtonCallback", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/ForgeHooksClient;fireMouseInput(III)V"))
private void onMouse(long handle, int button, int action, int mods, CallbackInfo ci) {
EventManager.INSTANCE.post(new MouseInputEvent());
diff --git a/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/TimeTrackerMixin.java b/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/TimeTrackerMixin.java
index e2d31fe..dd9920e 100644
--- a/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/TimeTrackerMixin.java
+++ b/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/internal/mixin/TimeTrackerMixin.java
@@ -13,7 +13,7 @@ import java.util.function.IntSupplier;
import java.util.function.LongSupplier;
@Mixin(TimeTracker.class)
-public class TimeTrackerMixin { //todo
+public class TimeTrackerMixin {
@Inject(method = "<init>", at = @At("RETURN"))
private void onStart(LongSupplier longSupplier, IntSupplier intSupplier, CallbackInfo ci) {
EventManager.INSTANCE.post(new StartEvent());
diff --git a/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/utils/commands/PlatformCommandManagerImpl.java b/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/utils/commands/PlatformCommandManagerImpl.java
new file mode 100644
index 0000000..81bc9b2
--- /dev/null
+++ b/versions/1.16.2-forge/src/main/java/cc/polyfrost/oneconfig/utils/commands/PlatformCommandManagerImpl.java
@@ -0,0 +1,123 @@
+package cc.polyfrost.oneconfig.utils.commands;
+
+import cc.polyfrost.oneconfig.libs.universal.ChatColor;
+import cc.polyfrost.oneconfig.libs.universal.UChat;
+import cc.polyfrost.oneconfig.utils.commands.annotations.Command;
+import cc.polyfrost.oneconfig.utils.commands.annotations.Greedy;
+import cc.polyfrost.oneconfig.utils.commands.arguments.ArgumentParser;
+import cc.polyfrost.oneconfig.utils.commands.arguments.Arguments;
+import com.mojang.brigadier.StringReader;
+import com.mojang.brigadier.arguments.ArgumentType;
+import com.mojang.brigadier.builder.LiteralArgumentBuilder;
+import com.mojang.brigadier.context.CommandContext;
+import com.mojang.brigadier.suggestion.Suggestions;
+import com.mojang.brigadier.suggestion.SuggestionsBuilder;
+import net.minecraft.command.CommandSource;
+import net.minecraft.command.Commands;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Parameter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.concurrent.CompletableFuture;
+
+import static cc.polyfrost.oneconfig.utils.commands.CommandManager.METHOD_RUN_ERROR;
+
+public class PlatformCommandManagerImpl extends PlatformCommandManager {
+
+ final HashMap<Class<?>, Pair<ArgumentType<Object>, ArgumentType<Object>>> parsers = new HashMap<>(); // non-greedy, greedy
+
+ @Override
+ void createCommand(CommandManager.InternalCommand root, Command annotation) {
+ LiteralArgumentBuilder<CommandSource> builder = Commands.literal(annotation.value());
+ if (!root.invokers.isEmpty()) {
+ builder.executes((context ->
+ {
+ try {
+ root.invokers.get(0).method.invoke(null);
+ return 1;
+ } catch (IllegalAccessException | InvocationTargetException | IllegalArgumentException |
+ ExceptionInInitializerError e) {
+ UChat.chat(ChatColor.RED.toString() + ChatColor.BOLD + METHOD_RUN_ERROR);
+ return 0;
+ }
+ }));
+ }
+ if (annotation.helpCommand()) {
+ builder.then(Commands.literal("help").executes((context ->
+ {
+ UChat.chat(sendHelpCommand(root));
+ return 1;
+ })));
+ }
+ for (CommandManager.InternalCommand command : root.children) {
+ loopThroughChildren(command, builder, null);
+ }
+ }
+
+ private void loopThroughChildren(CommandManager.InternalCommand command, LiteralArgumentBuilder<CommandSource> root, LiteralArgumentBuilder<CommandSource> builder) {
+ if (command.invokers.isEmpty() || command.children.isEmpty()) return;
+ if (builder == null) {
+ builder = root.then(Commands.literal(command.name));
+