Skip to content

Commit

Permalink
Compatible with forge 1.15.2-31.2.50.
Browse files Browse the repository at this point in the history
  • Loading branch information
ZekerZhayard committed Mar 22, 2021
1 parent b46f488 commit 16d0ea6
Show file tree
Hide file tree
Showing 16 changed files with 105 additions and 51 deletions.
9 changes: 4 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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=<gradle.user.home>\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)
16 changes: 12 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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, {
Expand All @@ -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}"
}
8 changes: 4 additions & 4 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
forge_version=31.2.50
forge_gradle_version=3.0.191
mcp_mappings=20210321-1.15.1
Original file line number Diff line number Diff line change
Expand Up @@ -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<ClassNode>, ITransformerImpl {
@Override
Expand All @@ -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) {
Expand Down Expand Up @@ -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()) {
Expand Down Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<ClassNode>, ITransformerImpl {
@Override
Expand Down Expand Up @@ -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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<ClassNode>, ITransformerImpl {
@Override
Expand All @@ -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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<ClassNode>, ITransformerImpl {
@Override
Expand All @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<ClassNode>, ITransformerImpl {
@Override
Expand All @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<ClassNode>, ITransformerImpl {
@Override
Expand All @@ -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;
Expand All @@ -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:
// ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@

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;
import org.objectweb.asm.tree.ClassNode;
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<ClassNode>, ITransformerImpl {
@Override
Expand All @@ -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()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<ClassNode>, ITransformerImpl {
@Override
Expand All @@ -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, "<clinit>", "()V"));
MethodNode _clinit_ = Objects.requireNonNull(Bytecode.findMethod(input, "<clinit>", "()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));
Expand All @@ -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;
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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<ClassNode>, 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;
}
}
Loading

0 comments on commit 16d0ea6

Please sign in to comment.