From eb2a8e87512125704941cd9aafa642ec9b357949 Mon Sep 17 00:00:00 2001 From: arcade_kappa Date: Mon, 30 Sep 2024 17:48:05 +0800 Subject: [PATCH] Add litematica patch --- .gitignore | 1 + build.gradle | 11 +++++++++++ gradle/wrapper/gradle-wrapper.properties | 2 +- .../fugue/common/FugueMixinConfigPlugin.java | 1 + .../fugue/config/ModPatchConfig.java | 2 ++ .../ChunkRenderWorkerLitematicaMixin.java | 17 +++++++++++++++++ src/main/resources/fugue.mixin.mod.json | 1 + 7 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/cleanroommc/fugue/mixin/litematica/ChunkRenderWorkerLitematicaMixin.java diff --git a/.gitignore b/.gitignore index 1afd7fb..4326b53 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ build eclipse run /mcmodsrepo/ +libs/ diff --git a/build.gradle b/build.gradle index beed016..c4550bc 100644 --- a/build.gradle +++ b/build.gradle @@ -10,6 +10,7 @@ buildscript { classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '6.10.+', changing: true classpath "org.spongepowered:mixingradle:0.7.+" classpath "net.kyori:blossom:2.1.0" + classpath "de.undercouch:gradle-download-task:5.6.0" } } apply plugin: 'net.minecraftforge.gradle' @@ -18,6 +19,7 @@ apply plugin: 'maven-publish' apply plugin: 'java' apply plugin: 'org.spongepowered.mixin' apply plugin: 'net.kyori.blossom' +apply plugin: "de.undercouch.download" version = "${minecraft_version}-${mod_version}" group = mod_base_package @@ -27,6 +29,11 @@ archivesBaseName = "+" + mod_name java.toolchain.languageVersion = JavaLanguageVersion.of(21) +tasks.register('downloadLitematica', Download) { + src 'https://masa.dy.fi/mcmods/litematica/litematica-forge-1.12.2-0.0.0-dev.20191217.195055.jar' + dest rootProject.mkdir("libs") +} + minecraft { mappings channel: mappings_channel, version: mappings_version @@ -130,6 +137,8 @@ repositories { dependencies { minecraft "com.cleanroommc:cleanroom:0.2.3-alpha" + compileOnly fileTree('libs') { include '*.jar' } + //Charset Lib compileOnly(fg.deobf("curse.maven:charset-284523:3656492")) @@ -268,6 +277,8 @@ jar { jar.finalizedBy('reobfJar') +compileJava.dependsOn("downloadLitematica") + publishing { publications { mavenJava(MavenPublication) { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9355b41..df97d72 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/java/com/cleanroommc/fugue/common/FugueMixinConfigPlugin.java b/src/main/java/com/cleanroommc/fugue/common/FugueMixinConfigPlugin.java index a99f88f..ae7f7b8 100644 --- a/src/main/java/com/cleanroommc/fugue/common/FugueMixinConfigPlugin.java +++ b/src/main/java/com/cleanroommc/fugue/common/FugueMixinConfigPlugin.java @@ -54,6 +54,7 @@ public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { case "jei" -> Loader.isModLoaded("jei") && FugueConfig.modPatchConfig.enableHEI && Fugue.isModNewerThan("jei", "4.17.0"); case "infinitylib" -> Loader.isModLoaded("infinitylib") && FugueConfig.modPatchConfig.enableInfLib; case "carryon" -> Loader.isModLoaded("carryon") && FugueConfig.modPatchConfig.enableCarryon; + case "litematica" -> Loader.isModLoaded("litematica") && FugueConfig.modPatchConfig.enableLitematica; default -> true; }; } diff --git a/src/main/java/com/cleanroommc/fugue/config/ModPatchConfig.java b/src/main/java/com/cleanroommc/fugue/config/ModPatchConfig.java index 4b07d09..c14af56 100644 --- a/src/main/java/com/cleanroommc/fugue/config/ModPatchConfig.java +++ b/src/main/java/com/cleanroommc/fugue/config/ModPatchConfig.java @@ -122,4 +122,6 @@ public class ModPatchConfig { public boolean enableDropt = true; @Config.Name("Enable Carryon Patch") public boolean enableCarryon = true; + @Config.Name("Enable Litematica Patch") + public boolean enableLitematica = true; } diff --git a/src/main/java/com/cleanroommc/fugue/mixin/litematica/ChunkRenderWorkerLitematicaMixin.java b/src/main/java/com/cleanroommc/fugue/mixin/litematica/ChunkRenderWorkerLitematicaMixin.java new file mode 100644 index 0000000..9ea6d12 --- /dev/null +++ b/src/main/java/com/cleanroommc/fugue/mixin/litematica/ChunkRenderWorkerLitematicaMixin.java @@ -0,0 +1,17 @@ +package com.cleanroommc.fugue.mixin.litematica; + +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import fi.dy.masa.litematica.render.schematic.ChunkRenderWorkerLitematica; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(value = ChunkRenderWorkerLitematica.class, remap = false) +public class ChunkRenderWorkerLitematicaMixin { + @Redirect(method = "processTask", at = @At(value = "INVOKE", target = "Lcom/google/common/util/concurrent/Futures;addCallback(Lcom/google/common/util/concurrent/ListenableFuture;Lcom/google/common/util/concurrent/FutureCallback;)V")) + protected void hackFuture(ListenableFuture listenableFuture, FutureCallback futureCallback) { + Futures.addCallback(listenableFuture, futureCallback, Runnable::run); + } +} diff --git a/src/main/resources/fugue.mixin.mod.json b/src/main/resources/fugue.mixin.mod.json index 28ebabe..2c7530b 100644 --- a/src/main/resources/fugue.mixin.mod.json +++ b/src/main/resources/fugue.mixin.mod.json @@ -22,6 +22,7 @@ "howlingmoon.WerewolfCapabilityMixin", "incontrol.CachePerWorldMixin", "infinitylib.BakedInfBlockModelMixin", + "litematica.ChunkRenderWorkerLitematicaMixin", "mage.ColorspacesMixin", "minecraftmultipartcbe.ASMMixinCompilerMixin", "minecraftmultipartcbe.StackAnalyserMixin",