Skip to content

Commit 701a66f

Browse files
committed
GTNHLib compat for real
1 parent 15a2eb8 commit 701a66f

6 files changed

Lines changed: 49 additions & 7 deletions

File tree

build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ repositories {
6262
includeGroup("com.falsepattern")
6363
}
6464
}
65+
exclusive(maven("horizon", "https://mvn.falsepattern.com/horizon"), "com.github.GTNewHorizons")
6566
exclusive(jitpack(), "com.github.basdxz")
6667
exclusive(maven("mega_uploads", "https://mvn.falsepattern.com/gtmega_uploads"), "optifine")
6768
exclusive(mega(), "codechicken")
@@ -74,6 +75,8 @@ dependencies {
7475

7576
compileOnly(deobf("optifine:optifine:1.7.10_hd_u_e7"))
7677

78+
compileOnly("com.github.GTNewHorizons:GTNHLib:0.5.19:dev")
79+
7780
implementation("org.joml:joml:1.10.5")
7881
implementation("it.unimi.dsi:fastutil:8.5.13")
7982

src/main/java/com/falsepattern/falsetweaks/asm/CoreLoadingPlugin.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,12 @@
3535
import lombok.Getter;
3636
import lombok.val;
3737

38+
import net.minecraft.launchwrapper.Launch;
39+
import net.minecraft.launchwrapper.LaunchClassLoader;
40+
3841
import java.util.List;
3942
import java.util.Map;
43+
import java.util.Set;
4044

4145
@IFMLLoadingPlugin.TransformerExclusions(Tags.ROOT_PKG + ".asm")
4246
public class CoreLoadingPlugin implements IFMLLoadingPlugin {
@@ -73,6 +77,15 @@ private static void pleaseDontBreakMyThreadedRendering() {
7377

7478
@Override
7579
public String[] getASMTransformerClass() {
80+
if (ModuleConfig.THREADED_CHUNK_UPDATES()) {
81+
try {
82+
val f = LaunchClassLoader.class.getDeclaredField("transformerExceptions");
83+
f.setAccessible(true);
84+
@SuppressWarnings("unchecked") val s = (Set<String>) f.get(Launch.classLoader);
85+
s.remove("com.gtnewhorizon.gtnhlib.client.renderer.TessellatorManager");
86+
} catch (Throwable ignored) {
87+
}
88+
}
7689
return new String[]{Tags.ROOT_PKG + ".asm.FalseTweaksTransformer"};
7790
}
7891

src/main/java/com/falsepattern/falsetweaks/mixin/mixins/client/threadedupdates/TessellatorMixin.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import com.falsepattern.falsetweaks.modules.threadedupdates.ICapturableTessellator;
2828
import com.falsepattern.falsetweaks.modules.threadedupdates.OptiFineCompat;
2929
import com.falsepattern.falsetweaks.modules.threadedupdates.ThreadedChunkUpdateHelper;
30+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
31+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
3032
import org.spongepowered.asm.mixin.Mixin;
3133
import org.spongepowered.asm.mixin.Shadow;
3234
import org.spongepowered.asm.mixin.injection.At;
@@ -116,16 +118,15 @@ public void discard() {
116118
* @reason Allow using multiple tessellator instances concurrently by removing static field access in alternate
117119
* instances.
118120
*/
119-
@Redirect(method = "reset",
120-
at = @At(value = "INVOKE",
121+
@WrapOperation(method = "reset",
122+
at = @At(value = "INVOKE",
121123
target = "Ljava/nio/ByteBuffer;clear()Ljava/nio/Buffer;"),
122-
require = 0, //gtnhlib crashes the game if this is nonzero
123-
expect = 1)
124-
private Buffer removeStaticBufferAccessOutsideSingleton(ByteBuffer buffer) {
124+
require = 1)
125+
private Buffer removeStaticBufferAccessOutsideSingleton(ByteBuffer instance, Operation<Buffer> original) {
125126
if (((Object) this) == ThreadedChunkUpdateHelper.mainThreadTessellator()) {
126-
return buffer.clear();
127+
instance.clear();
127128
}
128-
return buffer;
129+
return instance;
129130
}
130131

131132
@Inject(method = "startDrawingQuads",
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.falsepattern.falsetweaks.mixin.mixins.client.threadedupdates.gtnhlib;
2+
3+
import com.gtnewhorizon.gtnhlib.client.renderer.TessellatorManager;
4+
import org.spongepowered.asm.mixin.Mixin;
5+
import org.spongepowered.asm.mixin.Overwrite;
6+
7+
@Mixin(value = TessellatorManager.class,
8+
remap = false)
9+
public abstract class TessellatorManagerMixin {
10+
11+
/**
12+
* @author FalsePattern
13+
* @reason FalseTweaks hijack
14+
*/
15+
@Overwrite
16+
public static boolean isMainInstance(Object instance) {
17+
return true;
18+
}
19+
}

src/main/java/com/falsepattern/falsetweaks/mixin/plugin/standard/Mixin.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,11 @@ public enum Mixin implements IMixin {
237237
THREADING.and(require(TargetedMod.AUTOMAGY)),
238238
"threadedupdates.automagy.RenderBlockGlowOverlayMixin"),
239239

240+
// GTNHLib
241+
ThreadedUpdates_GTNHLib_TessellatorManagerMixin(Side.CLIENT,
242+
THREADING.and(require(TargetedMod.GTNHLIB)),
243+
"threadedupdates.gtnhlib.TessellatorManagerMixin"),
244+
240245
//endregion Threaded Chunk Updates
241246

242247
//region Texture Optimizations Module

src/main/java/com/falsepattern/falsetweaks/mixin/plugin/standard/TargetedMod.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public enum TargetedMod implements ITargetedMod {
5454
COMPUTRONICS("Computronics", false, contains("Computronics-")),
5555
EXTRA_CELLS("Extra Cells 2", false, contains("ExtraCells-")),
5656
AUTOMAGY("Automagy", false, contains("Automagy-")),
57+
GTNHLIB("GTNHLib", false, contains("gtnhlib-"))
5758
;
5859

5960
public static Predicate<List<ITargetedMod>> REQUIRE_OPTIFINE_WITHOUT_SHADERS = require(OPTIFINE_WITHOUT_SHADERS).or(require(OPTIFINE_WITH_DYNAMIC_LIGHTS));

0 commit comments

Comments
 (0)