From 16d0ea6dcc51699c94d64a674bf11d4dc6dd1c4b Mon Sep 17 00:00:00 2001 From: ZekerZhayard Date: Tue, 23 Mar 2021 06:12:51 +0800 Subject: [PATCH] Compatible with forge 1.15.2-31.2.50. --- README.md | 9 ++- build.gradle | 16 +++-- gradle.properties | 8 +-- .../renderer/WorldRendererTransformer.java | 7 ++- .../entity/ItemFrameRendererTransformer.java | 3 +- .../entity/ItemRendererTransformer.java | 3 +- .../entity/LivingRendererTransformer.java | 4 +- .../renderer/model/FaceBakeryTransformer.java | 4 +- .../model/ModelBakeryTransformer.java | 5 +- .../texture/AtlasTextureTransformer.java | 4 +- .../renderer/texture/StitcherTransformer.java | 9 +-- .../client/world/ClientWorldTransformer.java | 58 +++++++++++++++++++ .../EntityDataManagerTransformer.java | 3 +- .../reflect/ReflectorClassTransformer.java | 4 +- .../optiforge/asm/utils/ASMUtils.java | 18 ------ ...ptiforge.asm.transformers.ITransformerImpl | 1 + 16 files changed, 105 insertions(+), 51 deletions(-) create mode 100644 src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/world/ClientWorldTransformer.java diff --git a/README.md b/README.md index c5cfe39..7dd3f25 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # OptiForge ([CurseForge](https://www.curseforge.com/minecraft/mc-mods/optiforge)) -*Compatibility: (2020-11-24)* - *OptiForge-0.1.31* - *Forge-1.15.2-31.2.43 or newer version* +*Compatibility: (2021-03-22)* + *OptiForge-0.1.33* + *Forge-1.15.2-31.2.50 or newer version*  *OptiFine-1.15.2-G5-pre1 or newer version* ## How to Use @@ -26,8 +26,7 @@ I recommend installing [MoreCrashInfo](https://github.com/xfl03/MoreCrashInfo/re *Notice:* *1. If you redefined your Gradle user home, you should add a VM argument:* *`-Dofdev.mcjar=\caches\forge_gradle\minecraft_repo\versions\1.15.2\client.jar`* -*2. OptiFineDevTweaker will dump all deobfuscated OptiFine classes to `./run/.optifineDev.classes` folder.* -*3. The recommended mcp mappings version is `snapshot_20200925-1.15.1`* +*2. OptiFineDevTweaker will dump all deobfuscated OptiFine classes to `./run/.optifineDev.classes` folder.* ## Screenshots ![OF0.png](https://i.loli.net/2020/03/31/IBfv1ShQt7wVY2u.png) diff --git a/build.gradle b/build.gradle index a866d9e..7265cc6 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,7 @@ minecraft { // Simply re-run your setup task after changing the mappings to update your workspace. mappings channel: "snapshot", version: "${mcp_mappings}" // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. - + // accessTransformer = file("src/main/resources/META-INF/accesstransformer.cfg") // Default run configurations. @@ -181,10 +181,9 @@ if (apiKey != null) { project { id = "372196" changelogType = "markdown" - changelog = "See [update.json](https://github.com/ZekerZhayard/OptiForge/blob/update/update.json)." + changelog = "Requires at least Forge-${minecraft_version}-${forge_version} and ${-> getOptiFineVersion()}. See [update.json](https://github.com/ZekerZhayard/OptiForge/blob/update/update.json)." releaseType = "beta" relations { - requiredDependency "mixinbootstrap" optionalDependency "morecrashinfo" } mainArtifact jar, { @@ -196,11 +195,20 @@ if (apiKey != null) { addArtifact sourcesJar, { displayName = "${archivesBaseName}-${version}-sources" } - addGameVersion "1.15.2" + addGameVersion "${minecraft_version}" addGameVersion "Forge" } options { detectNewerJava = true } } +} + +String getOptiFineVersion() { + String[] versions = "${optifine_version}".split("\\.") + + String preVer = versions[2].equals("0") ? "" : ("\\_pre" + versions[2]) + String minorVer = Integer.parseInt(versions[1]) - (preVer.equals("") ? 1 : 0) + String majorVer = (char) ((int) ('A' as char) + Integer.parseInt(versions[0]) - 1) + return "OptiFine\\_${minecraft_version}\\_HD\\_U\\_${majorVer}${minorVer}${preVer}" } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index b97bcc1..dd881f1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,10 +3,10 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false -mod_version=0.1.32 +mod_version=0.1.33 # G5_pre1 optifine_version=7.5.1 minecraft_version=1.15.2 -forge_version=31.2.43 -forge_gradle_version=3.0.186 -mcp_mappings=20200925-1.15.1 \ No newline at end of file +forge_version=31.2.50 +forge_gradle_version=3.0.191 +mcp_mappings=20210321-1.15.1 \ No newline at end of file diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/WorldRendererTransformer.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/WorldRendererTransformer.java index 28d906c..419938a 100644 --- a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/WorldRendererTransformer.java +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/WorldRendererTransformer.java @@ -16,6 +16,7 @@ import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.TypeInsnNode; +import org.spongepowered.asm.util.Bytecode; public class WorldRendererTransformer implements ITransformer, ITransformerImpl { @Override @@ -34,7 +35,7 @@ public ClassNode transform(ClassNode input) { // this.field_175009_l.add(chunkrenderdispatcher$chunkrender4); // - MethodNode setupTerrain = Objects.requireNonNull(ASMUtils.findMethod(input, ASMAPI.mapMethod("func_228437_a_"), "(Lnet/minecraft/client/renderer/ActiveRenderInfo;Lnet/minecraft/client/renderer/culling/ClippingHelperImpl;ZIZ)V")); + MethodNode setupTerrain = Objects.requireNonNull(Bytecode.findMethod(input, ASMAPI.mapMethod("func_228437_a_"), "(Lnet/minecraft/client/renderer/ActiveRenderInfo;Lnet/minecraft/client/renderer/culling/ClippingHelperImpl;ZIZ)V")); for (AbstractInsnNode ain : setupTerrain.instructions.toArray()) { if (ain.getOpcode() == Opcodes.INVOKEVIRTUAL) { @@ -85,7 +86,7 @@ public ClassNode transform(ClassNode input) { // this.func_228441_a_(RenderType.func_228643_e_(), p_228426_1_, d0, d1, d2); // - MethodNode updateCameraAndRender = Objects.requireNonNull(ASMUtils.findMethod(input, ASMAPI.mapMethod("func_228426_a_"), "(Lcom/mojang/blaze3d/matrix/MatrixStack;FJZLnet/minecraft/client/renderer/ActiveRenderInfo;Lnet/minecraft/client/renderer/GameRenderer;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/renderer/Matrix4f;)V")); + MethodNode updateCameraAndRender = Objects.requireNonNull(Bytecode.findMethod(input, ASMAPI.mapMethod("func_228426_a_"), "(Lcom/mojang/blaze3d/matrix/MatrixStack;FJZLnet/minecraft/client/renderer/ActiveRenderInfo;Lnet/minecraft/client/renderer/GameRenderer;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/renderer/Matrix4f;)V")); int getModelManagerCount = 0; for (AbstractInsnNode ain : updateCameraAndRender.instructions.toArray()) { @@ -116,7 +117,7 @@ public ClassNode transform(ClassNode input) { // this.field_174995_M.func_228902_a_(chunkrenderdispatcher$chunkrender); // - MethodNode updateChunks = Objects.requireNonNull(ASMUtils.findMethod(input, ASMAPI.mapMethod("func_174967_a"), "(J)V")); + MethodNode updateChunks = Objects.requireNonNull(Bytecode.findMethod(input, ASMAPI.mapMethod("func_174967_a"), "(J)V")); for (AbstractInsnNode ain : updateChunks.instructions.toArray()) { if (ain.getOpcode() == Opcodes.INVOKEVIRTUAL) { diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/entity/ItemFrameRendererTransformer.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/entity/ItemFrameRendererTransformer.java index 2ca3204..72a61ae 100644 --- a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/entity/ItemFrameRendererTransformer.java +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/entity/ItemFrameRendererTransformer.java @@ -16,6 +16,7 @@ import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.VarInsnNode; +import org.spongepowered.asm.util.Bytecode; public class ItemFrameRendererTransformer implements ITransformer, ITransformerImpl { @Override @@ -48,7 +49,7 @@ public ClassNode transform(ClassNode input) { // if (mapdata != null) { // - MethodNode render = Objects.requireNonNull(ASMUtils.findMethod(input, ASMAPI.mapMethod("func_225623_a_"), "(Lnet/minecraft/entity/item/ItemFrameEntity;FFLcom/mojang/blaze3d/matrix/MatrixStack;Lnet/minecraft/client/renderer/IRenderTypeBuffer;I)V")); + MethodNode render = Objects.requireNonNull(Bytecode.findMethod(input, ASMAPI.mapMethod("func_225623_a_"), "(Lnet/minecraft/entity/item/ItemFrameEntity;FFLcom/mojang/blaze3d/matrix/MatrixStack;Lnet/minecraft/client/renderer/IRenderTypeBuffer;I)V")); // flag -> mapdata LocalVariableNode flag = Objects.requireNonNull(ASMUtils.findLocalVariable(render, "Z", 0)); LocalVariableNode mapdata = Objects.requireNonNull(ASMUtils.findLocalVariable(render, "Lnet/minecraft/world/storage/MapData;", 0)); diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/entity/ItemRendererTransformer.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/entity/ItemRendererTransformer.java index 7d41227..2b731d5 100644 --- a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/entity/ItemRendererTransformer.java +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/entity/ItemRendererTransformer.java @@ -15,6 +15,7 @@ import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.VarInsnNode; +import org.spongepowered.asm.util.Bytecode; public class ItemRendererTransformer implements ITransformer, ITransformerImpl { @Override @@ -34,7 +35,7 @@ public ClassNode transform(ClassNode input) { // if (!flag) { // - MethodNode render = Objects.requireNonNull(ASMUtils.findMethod(input, ASMAPI.mapMethod("func_225623_a_"), "(Lnet/minecraft/entity/item/ItemEntity;FFLcom/mojang/blaze3d/matrix/MatrixStack;Lnet/minecraft/client/renderer/IRenderTypeBuffer;I)V")); + MethodNode render = Objects.requireNonNull(Bytecode.findMethod(input, ASMAPI.mapMethod("func_225623_a_"), "(Lnet/minecraft/entity/item/ItemEntity;FFLcom/mojang/blaze3d/matrix/MatrixStack;Lnet/minecraft/client/renderer/IRenderTypeBuffer;I)V")); LocalVariableNode f4 = Objects.requireNonNull(ASMUtils.findLocalVariable(render, "F", 6)); LocalVariableNode f5 = Objects.requireNonNull(ASMUtils.findLocalVariable(render, "F", 7)); LocalVariableNode f6 = Objects.requireNonNull(ASMUtils.findLocalVariable(render, "F", 8)); diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/entity/LivingRendererTransformer.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/entity/LivingRendererTransformer.java index 9a0016f..e1e83fb 100644 --- a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/entity/LivingRendererTransformer.java +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/entity/LivingRendererTransformer.java @@ -4,7 +4,6 @@ import cpw.mods.modlauncher.api.ITransformer; import io.github.zekerzhayard.optiforge.asm.transformers.ITransformerImpl; -import io.github.zekerzhayard.optiforge.asm.utils.ASMUtils; import net.minecraftforge.coremod.api.ASMAPI; import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.AbstractInsnNode; @@ -15,6 +14,7 @@ import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.VarInsnNode; +import org.spongepowered.asm.util.Bytecode; public class LivingRendererTransformer implements ITransformer, ITransformerImpl { @Override @@ -35,7 +35,7 @@ public ClassNode transform(ClassNode input) { // this.field_77045_g.field_217114_e = p_225623_1_.func_70631_g_(); // - MethodNode render = Objects.requireNonNull(ASMUtils.findMethod(input, ASMAPI.mapMethod("func_225623_a_"), "(Lnet/minecraft/entity/LivingEntity;FFLcom/mojang/blaze3d/matrix/MatrixStack;Lnet/minecraft/client/renderer/IRenderTypeBuffer;I)V")); + MethodNode render = Objects.requireNonNull(Bytecode.findMethod(input, ASMAPI.mapMethod("func_225623_a_"), "(Lnet/minecraft/entity/LivingEntity;FFLcom/mojang/blaze3d/matrix/MatrixStack;Lnet/minecraft/client/renderer/IRenderTypeBuffer;I)V")); int maxIndex = 0; boolean isLongOrDouble = false; for (LocalVariableNode lvn : render.localVariables) { diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/model/FaceBakeryTransformer.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/model/FaceBakeryTransformer.java index dd30d65..1b9992a 100644 --- a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/model/FaceBakeryTransformer.java +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/model/FaceBakeryTransformer.java @@ -4,7 +4,6 @@ import cpw.mods.modlauncher.api.ITransformer; import io.github.zekerzhayard.optiforge.asm.transformers.ITransformerImpl; -import io.github.zekerzhayard.optiforge.asm.utils.ASMUtils; import net.minecraftforge.coremod.api.ASMAPI; import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.AbstractInsnNode; @@ -15,6 +14,7 @@ import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.VarInsnNode; +import org.spongepowered.asm.util.Bytecode; public class FaceBakeryTransformer implements ITransformer, ITransformerImpl { @Override @@ -35,7 +35,7 @@ public ClassNode transform(ClassNode input) { // } // - MethodNode fillVertex = Objects.requireNonNull(ASMUtils.findMethod(input, ASMAPI.mapMethod("func_228826_a_"), "([IILnet/minecraft/client/renderer/Vector3f;ILnet/minecraft/client/renderer/texture/TextureAtlasSprite;Lnet/minecraft/client/renderer/model/BlockFaceUV;)V")); + MethodNode fillVertex = Objects.requireNonNull(Bytecode.findMethod(input, ASMAPI.mapMethod("func_228826_a_"), "([IILnet/minecraft/client/renderer/Vector3f;ILnet/minecraft/client/renderer/texture/TextureAtlasSprite;Lnet/minecraft/client/renderer/model/BlockFaceUV;)V")); for (AbstractInsnNode ain : fillVertex.instructions.toArray()) { if (ain.getOpcode() == Opcodes.INVOKEVIRTUAL) { diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/model/ModelBakeryTransformer.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/model/ModelBakeryTransformer.java index 150a1b0..79fa0db 100644 --- a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/model/ModelBakeryTransformer.java +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/model/ModelBakeryTransformer.java @@ -16,6 +16,7 @@ import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.VarInsnNode; +import org.spongepowered.asm.util.Bytecode; public class ModelBakeryTransformer implements ITransformer, ITransformerImpl { @Override @@ -34,7 +35,7 @@ public ClassNode transform(ClassNode input) { // } // - MethodNode lambda$uploadTextures$12 = Objects.requireNonNull(ASMUtils.findMethod(input, "lambda$uploadTextures$12", "(Lnet/minecraft/util/ResourceLocation;)V")); + MethodNode lambda$uploadTextures$12 = Objects.requireNonNull(Bytecode.findMethod(input, "lambda$uploadTextures$12", "(Lnet/minecraft/util/ResourceLocation;)V")); for (AbstractInsnNode ain : lambda$uploadTextures$12.instructions.toArray()) { if (ain.getOpcode() == Opcodes.GETSTATIC) { FieldInsnNode fin = (FieldInsnNode) ain; @@ -55,7 +56,7 @@ public ClassNode transform(ClassNode input) { // this.field_217850_G.put(triple, ibakedmodel); // - MethodNode getBakedModel = Objects.requireNonNull(ASMUtils.findMethod(input, "getBakedModel", "(Lnet/minecraft/util/ResourceLocation;Lnet/minecraft/client/renderer/model/IModelTransform;Ljava/util/function/Function;)Lnet/minecraft/client/renderer/model/IBakedModel;")); + MethodNode getBakedModel = Objects.requireNonNull(Bytecode.findMethod(input, "getBakedModel", "(Lnet/minecraft/util/ResourceLocation;Lnet/minecraft/client/renderer/model/IModelTransform;Ljava/util/function/Function;)Lnet/minecraft/client/renderer/model/IBakedModel;")); // logic: // ... diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/texture/AtlasTextureTransformer.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/texture/AtlasTextureTransformer.java index 93a4a2a..633723d 100644 --- a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/texture/AtlasTextureTransformer.java +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/texture/AtlasTextureTransformer.java @@ -4,7 +4,6 @@ import cpw.mods.modlauncher.api.ITransformer; import io.github.zekerzhayard.optiforge.asm.transformers.ITransformerImpl; -import io.github.zekerzhayard.optiforge.asm.utils.ASMUtils; import net.minecraftforge.coremod.api.ASMAPI; import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.AbstractInsnNode; @@ -12,6 +11,7 @@ import org.objectweb.asm.tree.FieldInsnNode; import org.objectweb.asm.tree.FrameNode; import org.objectweb.asm.tree.MethodNode; +import org.spongepowered.asm.util.Bytecode; public class AtlasTextureTransformer implements ITransformer, ITransformerImpl { @Override @@ -31,7 +31,7 @@ public ClassNode transform(ClassNode input) { // if (j1 < p_229220_4_) { // - MethodNode stitch = Objects.requireNonNull(ASMUtils.findMethod(input, ASMAPI.mapMethod("func_229220_a_"), "(Lnet/minecraft/resources/IResourceManager;Ljava/util/stream/Stream;Lnet/minecraft/profiler/IProfiler;I)Lnet/minecraft/client/renderer/texture/AtlasTexture$SheetData;")); + MethodNode stitch = Objects.requireNonNull(Bytecode.findMethod(input, ASMAPI.mapMethod("func_229220_a_"), "(Lnet/minecraft/resources/IResourceManager;Ljava/util/stream/Stream;Lnet/minecraft/profiler/IProfiler;I)Lnet/minecraft/client/renderer/texture/AtlasTexture$SheetData;")); int warnCount = 0; for (AbstractInsnNode ain : stitch.instructions.toArray()) { diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/texture/StitcherTransformer.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/texture/StitcherTransformer.java index 1c2f7cf..5aa81c1 100644 --- a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/texture/StitcherTransformer.java +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/renderer/texture/StitcherTransformer.java @@ -25,6 +25,7 @@ import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.TypeInsnNode; import org.objectweb.asm.tree.VarInsnNode; +import org.spongepowered.asm.util.Bytecode; public class StitcherTransformer implements ITransformer, ITransformerImpl { @Override @@ -45,7 +46,7 @@ public ClassNode transform(ClassNode input) { input.fields.add(0, new FieldNode(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL, "LOGGER", "Lorg/apache/logging/log4j/Logger;", null, null)); - MethodNode _clinit_ = Objects.requireNonNull(ASMUtils.findMethod(input, "", "()V")); + MethodNode _clinit_ = Objects.requireNonNull(Bytecode.findMethod(input, "", "()V")); InsnList il$_clinit_ = new InsnList(); il$_clinit_.add(new LabelNode()); il$_clinit_.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "org/apache/logging/log4j/LogManager", "getLogger", "()Lorg/apache/logging/log4j/Logger;", false)); @@ -64,7 +65,7 @@ public ClassNode transform(ClassNode input) { // throw new StitcherException(stitcher$holder.field_229213_a_, list.stream().map((p_229212_0_) -> { // - MethodNode doStitch = Objects.requireNonNull(ASMUtils.findMethod(input, ASMAPI.mapMethod("func_94305_f"), "()V")); + MethodNode doStitch = Objects.requireNonNull(Bytecode.findMethod(input, ASMAPI.mapMethod("func_94305_f"), "()V")); for (AbstractInsnNode ain : doStitch.instructions.toArray()) { if (ain.getOpcode() == Opcodes.NEW) { TypeInsnNode tin = (TypeInsnNode) ain; @@ -152,7 +153,7 @@ public ClassNode transform(ClassNode input) { lambda$doStitch$4.instructions.add(label_5); // method body end - input.methods.add(input.methods.indexOf(ASMUtils.findMethod(input, "lambda$doStitch$3", "(Lnet/minecraft/client/renderer/texture/Stitcher$Holder;)Lnet/minecraft/client/renderer/texture/TextureAtlasSprite$Info;")), lambda$doStitch$4); + input.methods.add(input.methods.indexOf(Bytecode.findMethod(input, "lambda$doStitch$3", "(Lnet/minecraft/client/renderer/texture/Stitcher$Holder;)Lnet/minecraft/client/renderer/texture/TextureAtlasSprite$Info;")), lambda$doStitch$4); MethodNode lambda$null$3 = new MethodNode(); @@ -181,7 +182,7 @@ public ClassNode transform(ClassNode input) { lambda$null$3.instructions.add(label_1_); // method body end - input.methods.add(input.methods.indexOf(ASMUtils.findMethod(input, "lambda$doStitch$3", "(Lnet/minecraft/client/renderer/texture/Stitcher$Holder;)Lnet/minecraft/client/renderer/texture/TextureAtlasSprite$Info;")) + 1, lambda$null$3); + input.methods.add(input.methods.indexOf(Bytecode.findMethod(input, "lambda$doStitch$3", "(Lnet/minecraft/client/renderer/texture/Stitcher$Holder;)Lnet/minecraft/client/renderer/texture/TextureAtlasSprite$Info;")) + 1, lambda$null$3); return input; diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/world/ClientWorldTransformer.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/world/ClientWorldTransformer.java new file mode 100644 index 0000000..2c6c4a5 --- /dev/null +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/client/world/ClientWorldTransformer.java @@ -0,0 +1,58 @@ +package io.github.zekerzhayard.optiforge.asm.transformers.net.minecraft.client.world; + +import java.util.Objects; + +import cpw.mods.modlauncher.api.ITransformer; +import io.github.zekerzhayard.optiforge.asm.transformers.ITransformerImpl; +import net.minecraftforge.coremod.api.ASMAPI; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.FieldInsnNode; +import org.objectweb.asm.tree.InsnList; +import org.objectweb.asm.tree.MethodInsnNode; +import org.objectweb.asm.tree.MethodNode; +import org.spongepowered.asm.util.Bytecode; + +public class ClientWorldTransformer implements ITransformer, ITransformerImpl { + @Override + public String targetClass() { + return "net.minecraft.client.world.ClientWorld"; + } + + @Override + public ClassNode transform(ClassNode input) { + + // https://github.com/MinecraftForge/MinecraftForge/blob/1.15.x/patches/minecraft/net/minecraft/client/world/ClientWorld.java.patch#L76-L77 + // + // } + // + // public double func_228331_m_() { + // - return this.field_72986_A.func_76067_t() == WorldType.field_77138_c ? 0.0D : 63.0D; + // + return this.field_73011_w.getHorizonHeight(); + // } + // + // public int func_228332_n_() { + // + + MethodNode getHorizonHeight = Objects.requireNonNull(Bytecode.findMethod(input, ASMAPI.mapMethod("func_228331_m_"), "()D")); + + for (AbstractInsnNode ain : getHorizonHeight.instructions.toArray()) { + if (ain.getOpcode() == Opcodes.ALOAD) { + AbstractInsnNode ain0 = ain.getNext(); + while (ain0.getOpcode() != Opcodes.DRETURN) { + ain0 = ain0.getNext(); + getHorizonHeight.instructions.remove(ain0.getPrevious()); + } + + InsnList il = new InsnList(); + il.add(new FieldInsnNode(Opcodes.GETFIELD, "net/minecraft/client/world/ClientWorld", ASMAPI.mapField("field_73011_w"), "Lnet/minecraft/world/dimension/Dimension;")); + il.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "net/minecraft/world/dimension/Dimension", "getHorizonHeight", "()D", false)); + + getHorizonHeight.instructions.insertBefore(ain0, il); + } + } + + return input; + } +} diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/network/datasync/EntityDataManagerTransformer.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/network/datasync/EntityDataManagerTransformer.java index 766c91d..572c5d5 100644 --- a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/network/datasync/EntityDataManagerTransformer.java +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/minecraft/network/datasync/EntityDataManagerTransformer.java @@ -17,6 +17,7 @@ import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.VarInsnNode; +import org.spongepowered.asm.util.Bytecode; public class EntityDataManagerTransformer implements ITransformer, ITransformerImpl { @Override @@ -35,7 +36,7 @@ public ClassNode transform(ClassNode input) { // try { // - MethodNode createKey = Objects.requireNonNull(ASMUtils.findMethod(input, ASMAPI.mapMethod("func_187226_a"), "(Ljava/lang/Class;Lnet/minecraft/network/datasync/IDataSerializer;)Lnet/minecraft/network/datasync/DataParameter;")); + MethodNode createKey = Objects.requireNonNull(Bytecode.findMethod(input, ASMAPI.mapMethod("func_187226_a"), "(Ljava/lang/Class;Lnet/minecraft/network/datasync/IDataSerializer;)Lnet/minecraft/network/datasync/DataParameter;")); int loggerCount = 0; LabelNode label_0 = new LabelNode(); diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/optifine/reflect/ReflectorClassTransformer.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/optifine/reflect/ReflectorClassTransformer.java index 4bb868f..fef21e9 100644 --- a/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/optifine/reflect/ReflectorClassTransformer.java +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/transformers/net/optifine/reflect/ReflectorClassTransformer.java @@ -4,7 +4,6 @@ import cpw.mods.modlauncher.api.ITransformer; import io.github.zekerzhayard.optiforge.asm.transformers.ITransformerImpl; -import io.github.zekerzhayard.optiforge.asm.utils.ASMUtils; import net.minecraftforge.coremod.api.ASMAPI; import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.ClassNode; @@ -12,6 +11,7 @@ import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.VarInsnNode; +import org.spongepowered.asm.util.Bytecode; public class ReflectorClassTransformer implements ITransformer, ITransformerImpl { @Override @@ -22,7 +22,7 @@ public String targetClass() { @Override public ClassNode transform(ClassNode input) { - MethodNode getTargetClass = Objects.requireNonNull(ASMUtils.findMethod(input, "getTargetClass", "()Ljava/lang/Class;")); + MethodNode getTargetClass = Objects.requireNonNull(Bytecode.findMethod(input, "getTargetClass", "()Ljava/lang/Class;")); ASMAPI.insertInsnList(getTargetClass, ASMAPI.MethodType.STATIC, "java/lang/Class", "forName", "(Ljava/lang/String;)Ljava/lang/Class;", ASMAPI.listOf( diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/utils/ASMUtils.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/utils/ASMUtils.java index be4443f..6abce8f 100644 --- a/src/main/java/io/github/zekerzhayard/optiforge/asm/utils/ASMUtils.java +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/utils/ASMUtils.java @@ -6,30 +6,12 @@ import com.google.common.collect.Lists; import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.AbstractInsnNode; -import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.IincInsnNode; import org.objectweb.asm.tree.LocalVariableNode; import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.VarInsnNode; public class ASMUtils { - /** - * Finds a method given the method descriptor - * - * @param classNode the class to scan - * @param name the method name - * @param desc the method descriptor - * @return discovered method node or null - */ - public static MethodNode findMethod(ClassNode classNode, String name, String desc) { - for (MethodNode method : classNode.methods) { - if (method.name.equals(name) && method.desc.equals(desc)) { - return method; - } - } - return null; - } - public static LocalVariableNode findLocalVariable(MethodNode mn, String desc, int ordinal) { List localVariables = Lists.newArrayList(mn.localVariables); localVariables.sort(Comparator.comparingInt(o -> o.index)); diff --git a/src/main/resources/META-INF/services/io.github.zekerzhayard.optiforge.asm.transformers.ITransformerImpl b/src/main/resources/META-INF/services/io.github.zekerzhayard.optiforge.asm.transformers.ITransformerImpl index 5160b43..5b6b856 100644 --- a/src/main/resources/META-INF/services/io.github.zekerzhayard.optiforge.asm.transformers.ITransformerImpl +++ b/src/main/resources/META-INF/services/io.github.zekerzhayard.optiforge.asm.transformers.ITransformerImpl @@ -6,5 +6,6 @@ io.github.zekerzhayard.optiforge.asm.transformers.net.minecraft.client.renderer. io.github.zekerzhayard.optiforge.asm.transformers.net.minecraft.client.renderer.model.ModelBakeryTransformer io.github.zekerzhayard.optiforge.asm.transformers.net.minecraft.client.renderer.texture.AtlasTextureTransformer io.github.zekerzhayard.optiforge.asm.transformers.net.minecraft.client.renderer.texture.StitcherTransformer +io.github.zekerzhayard.optiforge.asm.transformers.net.minecraft.client.world.ClientWorldTransformer io.github.zekerzhayard.optiforge.asm.transformers.net.minecraft.network.datasync.EntityDataManagerTransformer io.github.zekerzhayard.optiforge.asm.transformers.net.optifine.reflect.ReflectorClassTransformer \ No newline at end of file