aboutsummaryrefslogtreecommitdiff
path: root/versions
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 /versions
parentfecb67e07ded0d20b12d3bdb48fea3e2e50b7f88 (diff)
downloadOneConfig-206063acf3a6e0edc0d16b07d206aa36207b42d4.tar.gz
OneConfig-206063acf3a6e0edc0d16b07d206aa36207b42d4.tar.bz2
OneConfig-206063acf3a6e0edc0d16b07d206aa36207b42d4.zip
a
Diffstat (limited to 'versions')
-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
20 files changed, 627 insertions, 265 deletions
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));
+ } else {
+ builder = builder.then(Commands.literal(command.name));
+ }
+ for (CommandManager.InternalCommand.InternalCommandInvoker invoker : command.invokers) {
+ for (Parameter parameter : invoker.method.getParameters()) {
+ Pair<ArgumentType<Object>, ArgumentType<Object>> pair = parsers.get(parameter.getType());
+ builder.then(Commands.argument(parameter.getName(), parameter.isAnnotationPresent(Greedy.class) ? pair.getRight() : pair.getLeft()));
+ }
+ builder.executes((context ->
+ {
+ try {
+ ArrayList<Object> args = new ArrayList<>(invoker.method.getParameterCount());
+ for (Parameter parameter: invoker.method.getParameters()) {
+ args.add(context.getArgument(parameter.getName(), Object.class));
+ }
+ invoker.method.invoke(null, args);
+ return 1;
+ } catch (Exception e) {
+ e.printStackTrace();
+ UChat.chat(ChatColor.RED.toString() + ChatColor.BOLD + METHOD_RUN_ERROR);
+ return 0;
+ }
+ }));
+ }
+ for (CommandManager.InternalCommand child : command.children) {
+ loopThroughChildren(child, root, builder);
+ }
+ }
+
+ @Override
+ public void handleNewParser(ArgumentParser<?> parser, Class<?> clazz) {
+ parsers.put(clazz, new ImmutablePair<ArgumentType<Object>, ArgumentType<Object>>(new ArgumentType() {
+
+ @Override
+ public Object parse(StringReader reader) {
+ final String text = reader.getRemaining();
+ reader.setCursor(reader.getTotalLength());
+ return parser.parse(new Arguments(text.split("\\s+"), false));
+ }
+
+ @Override
+ public CompletableFuture<Suggestions> listSuggestions(CommandContext context, SuggestionsBuilder builder) {
+ return ArgumentType.super.listSuggestions(context, builder);
+ }
+ }, new ArgumentType() {
+
+ @Override
+ public Object parse(StringReader reader) {
+ final String text = reader.getRemaining();
+ reader.setCursor(reader.getTotalLength());
+ return parser.parse(new Arguments(text.split("\\s+"), true));
+ }
+
+ @Override
+ public CompletableFuture<Suggestions> listSuggestions(CommandContext context, SuggestionsBuilder builder) {
+ return ArgumentType.super.listSuggestions(context, builder);
+ }
+ }));
+ }
+}
diff --git a/versions/build.gradle.kts b/versions/build.gradle.kts
index 1863fd4..b140fbd 100644
--- a/versions/build.gradle.kts
+++ b/versions/build.gradle.kts
@@ -2,6 +2,7 @@ import gg.essential.gradle.util.RelocationTransform.Companion.registerRelocation
import gg.essential.gradle.util.noServerRunConfigs
import gg.essential.gradle.util.prebundle
import net.fabricmc.loom.task.RemapSourcesJarTask
+import java.text.SimpleDateFormat
plugins {
@@ -47,11 +48,15 @@ base {
}
loom {
noServerRunConfigs()
- if (project.platform.isLegacyForge) {
- launchConfigs.named("client") {
+ launchConfigs.named("client") {
+ if (project.platform.isLegacyForge) {
arg("--tweakClass", "cc.polyfrost.oneconfig.internal.plugin.asm.OneConfigTweaker")
- property("mixin.debug.export", "true")
- property("debugBytecode", "true")
+ }
+ property("mixin.debug.export", "true")
+ property("debugBytecode", "true")
+ property("forge.logging.console.level", "debug")
+ if (org.gradle.internal.os.OperatingSystem.current().isMacOsX) {
+ property("fml.earlyprogresswindow", "false")
}
}
if (project.platform.isForge) {
@@ -59,6 +64,9 @@ loom {
mixinConfig("mixins.${mod_id}.json")
}
}
+ log4jConfigs.asFileTree.files.forEach {
+ it.writeText(it.readText().replace("warn", "debug"))
+ }
mixin.defaultRefmapName.set("mixins.${mod_id}.refmap.json")
}
@@ -85,10 +93,13 @@ val shade: Configuration by configurations.creating {
}
val shadeNoPom: Configuration by configurations.creating
+val shadeNoPom2: Configuration by configurations.creating
sourceSets {
main {
- output.setResourcesDir(java.classesDirectory)
+ if (project.platform.isForge) {
+ output.setResourcesDir(java.classesDirectory)
+ }
}
}
@@ -105,8 +116,7 @@ dependencies {
isTransitive = false
}
- @Suppress("GradlePackageUpdate")
- shadeRelocated("com.github.ben-manes.caffeine:caffeine:2.9.3")
+ @Suppress("GradlePackageUpdate") shadeRelocated("com.github.ben-manes.caffeine:caffeine:2.9.3")
// for other mods and universalcraft
val kotlinVersion: String by project
@@ -126,14 +136,19 @@ dependencies {
shade("org.jetbrains.kotlinx:kotlinx-serialization-cbor-jvm:$serializationVersion")
shade("org.jetbrains.kotlinx:atomicfu-jvm:$atomicfuVersion")
- shade("org.spongepowered:mixin:0.7.11-SNAPSHOT") {
- isTransitive = false
+ if (platform.isLegacyForge) {
+ shade("org.spongepowered:mixin:0.7.11-SNAPSHOT") {
+ isTransitive = false
+ }
}
shadeNoPom(project(":")) {
isTransitive = false
}
shade("cc.polyfrost:lwjgl:1.0.0-alpha1")
- shadeNoPom(prebundle(shadeRelocated))
+ val prebundled = prebundle(shadeRelocated)
+ modCompileOnly(prebundled)
+ modRuntimeOnly(prebundled)
+ shadeNoPom2(prebundled)
dokkaHtmlPlugin("org.jetbrains.dokka:kotlin-as-java-plugin:1.6.21")
@@ -155,7 +170,7 @@ tasks {
inputs.property("java_level", compatLevel)
inputs.property("version", mod_version)
inputs.property("mcVersionStr", project.platform.mcVersionStr)
- filesMatching(listOf("mcmod.info", "mixins.${mod_id}.json", "mods.toml")) {
+ filesMatching(listOf("mcmod.info", "mixins.${mod_id}.json", "**/mods.toml")) {
expand(
mapOf(
"id" to mod_id,
@@ -184,11 +199,11 @@ tasks {
withType(Jar::class.java) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
if (project.platform.isFabric) {
- exclude("mcmod.info", "mods.toml")
+ exclude("mcmod.info", "META-INF/mods.toml")
} else {
exclude("fabric.mod.json")
if (project.platform.isLegacyForge) {
- exclude("mods.toml")
+ exclude("**/mods.toml")
exclude("META-INF/versions/**")
exclude("**/module-info.class")
exclude("**/package-info.class")
@@ -204,7 +219,7 @@ tasks {
val shadowJar = named<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar>("shadowJar") {
archiveClassifier.set("full-dev")
- configurations = listOf(shade, shadeNoPom)
+ configurations = listOf(shade, shadeNoPom, shadeNoPom2)
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
dependsOn(jar)
}
@@ -219,8 +234,9 @@ tasks {
}
jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
- dependsOn(shadeNoPom)
- from(shadeNoPom.map { if (it.isDirectory) it else zipTree(it) })
+ dependsOn(shadeNoPom, shadeNoPom2)
+ from(ArrayList<File>().run { addAll(shadeNoPom); addAll(shadeNoPom2); this }
+ .map { if (it.isDirectory) it else zipTree(it) })
manifest {
attributes(
mapOf(
@@ -228,10 +244,21 @@ tasks {
"ForceLoadAsMod" to true,
"TweakOrder" to "0",
"MixinConfigs" to "mixins.oneconfig.json",
- "TweakClass" to "cc.polyfrost.oneconfig.internal.plugin.asm.OneConfigTweaker"
+ "TweakClass" to "cc.polyfrost.oneconfig.internal.plugin.asm.OneConfigTweaker",
+ "FMLModType" to "LIBRARY",
+ "Specification-Title" to mod_id,
+ "Specification-Vendor" to mod_id,
+ "Specification-Version" to "1", // We are version 1 of ourselves, whatever the hell that means
+ "Implementation-Title" to mod_name,
+ "Implementation-Version" to mod_version,
+ "Implementation-Vendor" to mod_id,
+ "Implementation-Timestamp" to SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").format(`java.util`.Date())
)
)
}
+ /*/
+
+ */
excludeInternal()
archiveClassifier.set("")
}
diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java b/versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java
index 44a6611..4f73198 100644
--- a/versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java
+++ b/versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java
@@ -36,7 +36,6 @@ public class OneConfig {
public static final Logger LOGGER = LogManager.getLogger("@NAME@");
private static boolean preLaunched = false;
private static boolean initialized = false;
- private static boolean isObfuscated = true;
/**
* Called before mods are loaded.
@@ -44,12 +43,6 @@ public class OneConfig {
*/
public static void preLaunch() {
if (preLaunched) return;
- try {
- Class.forName("net.minecraft.world.World");
- LOGGER.warn("OneConfig is NOT obfuscated!");
- isObfuscated = false;
- } catch (Exception ignored) {
- }
oneConfigDir.mkdirs();
new File(oneConfigDir, "profiles").mkdirs();
if (OneConfigConfig.getInstance() == null) {
@@ -83,12 +76,6 @@ public class OneConfig {
initialized = true;
}
- /** Returns weather this is an obfuscated environment, using a check for obfuscated name of net.minecraft.world.World.class.
- * @return true if this is an obfuscated environment, which is normal for Minecraft or false if not. */
- public static boolean isObfuscated() {
- return isObfuscated;
- }
-
@Subscribe
private void onShutdown(ShutdownEvent event) {
ConfigCore.saveAll();
diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/internal/gui/impl/BlurHandlerImpl.java b/versions/src/main/java/cc/polyfrost/oneconfig/internal/gui/impl/BlurHandlerImpl.java
index 8d0d550..3424d2b 100644
--- a/versions/src/main/java/cc/polyfrost/oneconfig/internal/gui/impl/BlurHandlerImpl.java
+++ b/versions/src/main/java/cc/polyfrost/oneconfig/internal/gui/impl/BlurHandlerImpl.java
@@ -10,7 +10,6 @@ import cc.polyfrost.oneconfig.internal.mixin.ShaderGroupAccessor;
import cc.polyfrost.oneconfig.libs.eventbus.Subscribe;
import cc.polyfrost.oneconfig.libs.universal.UMinecraft;
import cc.polyfrost.oneconfig.libs.universal.UScreen;
-import net.minecraft.client.Minecraft;
import net.minecraft.client.shader.Shader;
import net.minecraft.client.shader.ShaderUniform;
import net.minecraft.util.ResourceLocation;
@@ -55,7 +54,7 @@ public class BlurHandlerImpl implements BlurHandler {
}
// Only update the shader if one is active
- if (!UMinecraft.getMinecraft().entityRenderer.isShaderActive()) {
+ if (!isShaderActive()) {
return;
}
if (progress >= 5) return;
@@ -102,14 +101,14 @@ public class BlurHandlerImpl implements BlurHandler {
// If a shader is not already active and the UI is
// a one of ours, we should load our own blur!
- if (!UMinecraft.getMinecraft().entityRenderer.isShaderActive() && gui instanceof OneConfigGui && Preferences.enableBlur) {
+ if (!isShaderActive() && gui instanceof OneConfigGui && Preferences.enableBlur) {
UMinecraft.getMinecraft().entityRenderer.loadShader(this.blurShader);
this.start = System.currentTimeMillis();
this.progress = 0;
// If a shader is active and the incoming UI is null or we have blur disabled, stop using the shader.
- } else if (UMinecraft.getMinecraft().entityRenderer.isShaderActive() && (gui == null || !Preferences.enableBlur)) {
+ } else if (isShaderActive() && (gui == null || !Preferences.enableBlur)) {
String name = UMinecraft.getMinecraft().entityRenderer.getShaderGroup().getShaderGroupName();
// Only stop our specific blur ;)
@@ -129,4 +128,12 @@ public class BlurHandlerImpl implements BlurHandler {
private float getBlurStrengthProgress() {
return Math.min((System.currentTimeMillis() - this.start) / 50F, 5.0F);
}
+
+ private boolean isShaderActive() {
+ return UMinecraft.getMinecraft().entityRenderer.getShaderGroup() != null
+ //#if MC<=11202
+ && net.minecraft.client.renderer.OpenGlHelper.shadersSupported
+ //#endif
+ ;
+ }
}
diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/internal/plugin/OneConfigMixinPlugin.java b/versions/src/main/java/cc/polyfrost/oneconfig/internal/plugin/OneConfigMixinPlugin.java
new file mode 100644
index 0000000..0063d1b
--- /dev/null
+++ b/versions/src/main/java/cc/polyfrost/oneconfig/internal/plugin/OneConfigMixinPlugin.java
@@ -0,0 +1,140 @@
+package cc.polyfrost.oneconfig.internal.plugin;
+
+import cc.polyfrost.oneconfig.platform.Platform;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.Type;
+import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
+import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
+
+import java.io.File;
+import java.util.ArrayList;
+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() {
+ if (Platform.getInstance().getMinecraftVersion() >= 11600) {
+ ArrayList<String> mixins = new ArrayList<>();
+ mixins.add("ClientModLoaderMixin");
+ mixins.add("KeyboardListenerMixin");
+ mixins.add("MouseHelperAccessor");
+ mixins.add("MouseHelperMixin");
+ mixins.add("TimeTrackerMixin");
+ return mixins;
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public void preApply(String targetClassName, org.spongepowered.asm.lib.tree.ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
+
+ }
+
+ @Override
+ public void postApply(String targetClassName, org.spongepowered.asm.lib.tree.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(org.spongepowered.asm.lib.tree.ClassNode node) {
+ if (!node.interfaces.contains("cc/polyfrost/oneconfig/config/compatibility/vigilance/VigilantAccessor")) {
+ node.fields.add(new org.spongepowered.asm.lib.tree.FieldNode(Opcodes.ACC_PUBLIC, "oneconfig$config", "Lcc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceConfig;", null, null));
+ node.fields.add(new org.spongepowered.asm.lib.tree.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");
+ org.spongepowered.asm.lib.tree.MethodNode methodNode = new org.spongepowered.asm.lib.tree.MethodNode(Opcodes.ACC_PUBLIC, "getPropertyCollector", "()Lgg/essential/vigilance/data/PropertyCollector;", null, null);
+ org.spongepowered.asm.lib.tree.LabelNode labelNode = new org.spongepowered.asm.lib.tree.LabelNode();
+ methodNode.instructions.add(labelNode);
+ methodNode.instructions.add(new org.spongepowered.asm.lib.tree.LineNumberNode(421421, labelNode));
+ methodNode.instructions.add(new org.spongepowered.asm.lib.tree.VarInsnNode(Opcodes.ALOAD, 0));
+ methodNode.instructions.add(new org.spongepowered.asm.lib.tree.FieldInsnNode(Opcodes.GETFIELD, "gg/essential/vigilance/Vigilant", "propertyCollector", "Lgg/essential/vigilance/data/PropertyCollector;"));
+ methodNode.instructions.add(new org.spongepowered.asm.lib.tree.InsnNode(Opcodes.ARETURN));
+ node.methods.add(methodNode);
+
+ org.spongepowered.asm.lib.tree.MethodNode methodNode2 = new org.spongepowered.asm.lib.tree.MethodNode(Opcodes.ACC_PUBLIC, "handleOneConfigDependency", "(Lgg/essential/vigilance/data/PropertyData;Lgg/essential/vigilance/data/PropertyData;)V", null, null);
+ org.spongepowered.asm.lib.tree.LabelNode labelNode2 = new org.spongepowered.asm.lib.tree.LabelNode();
+ org.spongepowered.asm.lib.tree.LabelNode labelNode3 = new org.spongepowered.asm.lib.tree.LabelNode();
+ org.spongepowered.asm.lib.tree.LabelNode labelNode4 = new org.spongepowered.asm.lib.tree.LabelNode();
+ methodNode2.instructions.add(labelNode2);
+ methodNode2.instructions.add(new org.spongepowered.asm.lib.tree.LineNumberNode(15636436, labelNode2));
+ methodNode2.instructions.add(new org.spongepowered.asm.lib.tree.VarInsnNode(Opcodes.ALOAD, 0));
+ methodNode2.instructions.add(new org.spongepowered.asm.lib.tree.FieldInsnNode(Opcodes.GETFIELD, "gg/essential/vigilance/Vigilant", "oneconfig$config", "Lcc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceConfig;"));
+
+ methodNode2.instructions.add(new org.spongepowered.asm.lib.tree.JumpInsnNode(Opcodes.IFNULL, labelNode4));
+
+ methodNode2.instructions.add(labelNode3);
+ methodNode2.instructions.add(new org.spongepowered.asm.lib.tree.LineNumberNode(15636437, labelNode3));
+ methodNode2.instructions.add(new org.spongepowered.asm.lib.tree.VarInsnNode(Opcodes.ALOAD, 0));
+ methodNode2.instructions.add(new org.spongepowered.asm.lib.tree.FieldInsnNode(Opcodes.GETFIELD, "gg/essential/vigilance/Vigilant", "oneconfig$config", "Lcc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceConfig;"));
+ methodNode2.instructions.add(new org.spongepowered.asm.lib.tree.VarInsnNode(Opcodes.ALOAD, 1));
+ methodNode2.instructions.add(new org.spongepowered.asm.lib.tree.VarInsnNode(Opcodes.ALOAD, 2));
+ methodNode2.instructions.add(new org.spongepowered.asm.lib.tree.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 org.spongepowered.asm.lib.tree.LineNumberNode(15636438, labelNode4));
+ methodNode2.instructions.add(new org.spongepowered.asm.lib.tree.InsnNode(Opcodes.RETURN));
+ node.methods.add(methodNode2);
+
+ for (org.spongepowered.asm.lib.tree.MethodNode method : node.methods) {
+ if (method.name.equals("initialize")) {
+ org.spongepowered.asm.lib.tree.InsnList list = new org.spongepowered.asm.lib.tree.InsnList();
+ list.add(new org.spongepowered.asm.lib.tree.VarInsnNode(Opcodes.ALOAD, 0));
+ list.add(new org.spongepowered.asm.lib.tree.VarInsnNode(Opcodes.ALOAD, 0));
+ list.add(new org.spongepowered.asm.lib.tree.VarInsnNode(Opcodes.ALOAD, 0));
+ list.add(new org.spongepowered.asm.lib.tree.FieldInsnNode(Opcodes.GETFIELD, "gg/essential/vigilance/Vigilant", "oneconfig$file", Type.getDescriptor(File.class)));
+ list.add(new org.spongepowered.asm.lib.tree.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 org.spongepowered.asm.lib.tree.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")) {
+ org.spongepowe