diff options
| author | Wyvest <45589059+Wyvest@users.noreply.github.com> | 2022-07-05 22:37:47 +0900 |
|---|---|---|
| committer | Wyvest <45589059+Wyvest@users.noreply.github.com> | 2022-07-05 22:37:47 +0900 |
| commit | 206063acf3a6e0edc0d16b07d206aa36207b42d4 (patch) | |
| tree | 8d0f31d65cfa4b3f85a3d4f7f0844f6df65b2b7e /versions | |
| parent | fecb67e07ded0d20b12d3bdb48fea3e2e50b7f88 (diff) | |
| download | OneConfig-206063acf3a6e0edc0d16b07d206aa36207b42d4.tar.gz OneConfig-206063acf3a6e0edc0d16b07d206aa36207b42d4.tar.bz2 OneConfig-206063acf3a6e0edc0d16b07d206aa36207b42d4.zip | |
a
Diffstat (limited to 'versions')
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 |
