Skip to content

Commit 2d5dd8a

Browse files
committed
Merge remote-tracking branch 'danyadev/optimize-transforming'
2 parents 3dc556b + 15168f6 commit 2d5dd8a

7 files changed

Lines changed: 32 additions & 64 deletions

File tree

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
plugins {
2-
id("com.falsepattern.fpgradle-mc") version ("2.1.0")
2+
id("com.falsepattern.fpgradle-mc") version ("4.0.2")
33
}
44

55
group = "com.falsepattern"
@@ -64,7 +64,7 @@ repositories {
6464

6565
dependencies {
6666
// region Our deps
67-
implementationSplit("com.falsepattern:falsepatternlib-mc1.7.10:1.9.0")
67+
implementationSplit("com.falsepattern:falsepatternlib-mc1.7.10:1.12.0")
6868
compileOnly("it.unimi.dsi:fastutil:8.5.16")
6969
implementationSplit("com.falsepattern:chunkapi-mc1.7.10:0.8.0")
7070
// endregion

gradle/wrapper/gradle-wrapper.jar

2.93 KB
Binary file not shown.
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip
44
networkTimeout=10000
5+
retries=0
6+
retryBackOffMs=500
57
validateDistributionUrl=true
68
zipStoreBase=GRADLE_USER_HOME
79
zipStorePath=wrapper/dists

gradlew

100644100755
Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gradlew.bat

Lines changed: 10 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/java/com/falsepattern/endlessids/EndlessIDs.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
name = Tags.MODNAME,
4444
acceptedMinecraftVersions = "[1.7.10]",
4545
dependencies = "required-after:chunkapi@[0.8.0,);" +
46-
"required-after:falsepatternlib@[1.9.0,);" +
46+
"required-after:falsepatternlib@[1.12.0,);" +
4747
"after:antiidconflict")
4848
public class EndlessIDs {
4949
public static final byte[] ZERO_LENGTH_BIOME_ARRAY_PLACEHOLDER = new byte[0];

src/main/java/com/falsepattern/endlessids/asm/transformer/chunk/ChunkProviderSuperPatcher.java

Lines changed: 15 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.falsepattern.endlessids.Tags;
2626
import com.falsepattern.endlessids.asm.EndlessIDsCore;
2727
import com.falsepattern.endlessids.asm.EndlessIDsTransformer;
28+
import com.falsepattern.lib.turboasm.BytePatternMatcher;
2829
import com.falsepattern.lib.turboasm.ClassNodeHandle;
2930
import com.falsepattern.lib.turboasm.TurboClassTransformer;
3031
import lombok.Data;
@@ -181,6 +182,9 @@ public class ChunkProviderSuperPatcher implements TurboClassTransformer {
181182
private static State<AbstractInsnNode> STATE17 = null;
182183
private static State<AbstractInsnNode> STATE_FINAL = null;
183184

185+
private static final BytePatternMatcher chunkClassMatcher;
186+
private static final BytePatternMatcher getBiomeArrayMethodMatcher;
187+
184188
static {
185189
if (EndlessIDsCore.deobfuscated) {
186190
CLASS_BiomeGenBase = new String[]{"net/minecraft/world/biome/BiomeGenBase"};
@@ -197,6 +201,9 @@ public class ChunkProviderSuperPatcher implements TurboClassTransformer {
197201
FIELD_biomeID = new String[]{"ay", "field_76756_M"};
198202
METHOD_getBiomeArray = new String[]{"m", "func_76605_m"};
199203
}
204+
205+
chunkClassMatcher = new BytePatternMatcher(CLASS_Chunk, BytePatternMatcher.Mode.Equals);
206+
getBiomeArrayMethodMatcher = new BytePatternMatcher(METHOD_getBiomeArray, BytePatternMatcher.Mode.Equals);
200207
}
201208

202209
static {
@@ -347,35 +354,6 @@ public class ChunkProviderSuperPatcher implements TurboClassTransformer {
347354
});
348355
}
349356

350-
private static boolean scanForBrokenCall(MethodNode method) {
351-
val instructions = method.instructions;
352-
val insnCount = instructions.size();
353-
for (int i = 0; i < insnCount; i++) {
354-
val insn = instructions.get(i);
355-
if (insn.getOpcode() != Opcodes.INVOKEVIRTUAL) {
356-
continue;
357-
}
358-
val invoke = (MethodInsnNode) insn;
359-
360-
if (anyMatch(invoke.owner, CLASS_Chunk) && anyMatch(invoke.name, METHOD_getBiomeArray) &&
361-
invoke.desc.equals("()[B")) {
362-
return true;
363-
}
364-
}
365-
return false;
366-
}
367-
368-
private static boolean anyMatch(List<String> str, String[] candidates) {
369-
for (val s : str) {
370-
for (val candidate : candidates) {
371-
if (s.equals(candidate)) {
372-
return true;
373-
}
374-
}
375-
}
376-
return false;
377-
}
378-
379357
private static boolean anyMatch(String str, String[] candidates) {
380358
for (val candidate : candidates) {
381359
if (str.equals(candidate)) {
@@ -456,17 +434,16 @@ public String name() {
456434

457435
@Override
458436
public boolean shouldTransformClass(@NotNull String className, @NotNull ClassNodeHandle classNode) {
459-
if ("net.minecraft.world.chunk.storage.AnvilChunkLoader".equals(className))
437+
if ("net.minecraft.world.chunk.storage.AnvilChunkLoader".equals(className)) {
460438
return false;
461-
val cn = classNode.getNode();
462-
if (cn == null)
439+
}
440+
441+
val metadata = classNode.getOriginalMetadata();
442+
if (metadata == null) {
463443
return false;
464-
for (MethodNode method : cn.methods) {
465-
if (scanForBrokenCall(method)) {
466-
return true;
467-
}
468444
}
469-
return false;
445+
446+
return metadata.matchesBytes(chunkClassMatcher) && metadata.matchesBytes(getBiomeArrayMethodMatcher);
470447
}
471448

472449
@Override
@@ -664,4 +641,4 @@ public void updateLocalsState(FrameNode frame) {
664641
}
665642
}
666643
}
667-
}
644+
}

0 commit comments

Comments
 (0)