diff options
author | nea <nea@nea.moe> | 2023-05-31 01:05:17 +0200 |
---|---|---|
committer | nea <nea@nea.moe> | 2023-05-31 01:08:08 +0200 |
commit | d670ed6bb054945d16a9d1ea2a32d469b524398a (patch) | |
tree | 96e50f42baf2cc21d4efb246f4d95105967b7553 | |
parent | a24a74fa2351d53693226ba0d0018fb9589cddc9 (diff) | |
download | Firmament-d670ed6bb054945d16a9d1ea2a32d469b524398a.tar.gz Firmament-d670ed6bb054945d16a9d1ea2a32d469b524398a.tar.bz2 Firmament-d670ed6bb054945d16a9d1ea2a32d469b524398a.zip |
Add option to auto rebuild resources before F3+T
4 files changed, 81 insertions, 0 deletions
diff --git a/src/main/java/moe/nea/firmament/mixins/devenv/MixinKeyboard.java b/src/main/java/moe/nea/firmament/mixins/devenv/MixinKeyboard.java new file mode 100644 index 0000000..b52af9b --- /dev/null +++ b/src/main/java/moe/nea/firmament/mixins/devenv/MixinKeyboard.java @@ -0,0 +1,18 @@ +package moe.nea.firmament.mixins.devenv; + +import moe.nea.firmament.features.debug.DeveloperFeatures; +import net.minecraft.client.Keyboard; +import net.minecraft.client.MinecraftClient; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.util.concurrent.CompletableFuture; + +@Mixin(Keyboard.class) +public class MixinKeyboard { + @Redirect(method = "processF3", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;reloadResources()Ljava/util/concurrent/CompletableFuture;")) + public CompletableFuture<Void> redirectReloadResources(MinecraftClient instance) { + return DeveloperFeatures.hookOnBeforeResourceReload(instance); + } +} diff --git a/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt b/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt index 5f76c07..dfbb5ed 100644 --- a/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt +++ b/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt @@ -21,6 +21,7 @@ package moe.nea.firmament.features import kotlinx.serialization.Serializable import kotlinx.serialization.serializer import moe.nea.firmament.Firmament +import moe.nea.firmament.features.debug.DeveloperFeatures import moe.nea.firmament.features.fishing.FishingWarning import moe.nea.firmament.features.inventory.SlotLocking import moe.nea.firmament.features.world.FairySouls @@ -48,6 +49,8 @@ object FeatureManager : DataHolder<FeatureManager.Config>(serializer(), "feature loadFeature(FairySouls) loadFeature(FishingWarning) loadFeature(SlotLocking) + if (Firmament.DEBUG) + loadFeature(DeveloperFeatures) hasAutoloaded = true } } diff --git a/src/main/kotlin/moe/nea/firmament/features/debug/DeveloperFeatures.kt b/src/main/kotlin/moe/nea/firmament/features/debug/DeveloperFeatures.kt new file mode 100644 index 0000000..ff69cd1 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/features/debug/DeveloperFeatures.kt @@ -0,0 +1,56 @@ +package moe.nea.firmament.features.debug + +import java.nio.file.Path +import java.util.concurrent.CompletableFuture +import kotlin.io.path.absolute +import kotlin.io.path.exists +import net.minecraft.client.MinecraftClient +import net.minecraft.text.Text +import moe.nea.firmament.features.FirmamentFeature +import moe.nea.firmament.gui.config.ManagedConfig +import moe.nea.firmament.util.MC +import moe.nea.firmament.util.TimeMark +import moe.nea.firmament.util.iterate + +object DeveloperFeatures : FirmamentFeature { + override val name: String + get() = "developer" + override val identifier: String + get() = "developer" + override val config: TConfig + get() = TConfig + override val defaultEnabled: Boolean + get() = false + + val gradleDir by lazy { + Path.of(".").absolute() + .iterate { it.parent } + .find { it.resolve("settings.gradle.kts").exists() }!! + } + + object TConfig : ManagedConfig("developer") { + val autoRebuildResources by toggle("auto-rebuild") { false } + } + + @JvmStatic + fun hookOnBeforeResourceReload(client: MinecraftClient): CompletableFuture<Void> { + val reloadFuture = if (TConfig.autoRebuildResources && isEnabled) { + val builder = ProcessBuilder("./gradlew", ":processResources") + builder.directory(gradleDir.toFile()) + builder.inheritIO() + val process = builder.start() + MC.player?.sendMessage(Text.translatable("firmament.dev.resourcerebuild.start")) + val startTime = TimeMark.now() + process.toHandle().onExit().thenApply { + MC.player?.sendMessage(Text.translatable("firmament.dev.resourcerebuild.done", startTime.passedTime())) + Unit + } + } else { + CompletableFuture.completedFuture(Unit) + } + return reloadFuture.thenCompose { client.reloadResources() } + } + + override fun onLoad() { + } +} diff --git a/src/main/resources/assets/firmament/lang/en_us.json b/src/main/resources/assets/firmament/lang/en_us.json index db720a0..bd6c933 100644 --- a/src/main/resources/assets/firmament/lang/en_us.json +++ b/src/main/resources/assets/firmament/lang/en_us.json @@ -1,4 +1,8 @@ { + "firmament.dev.resourcerebuild.start": "Invoking gradle resource rebuild (./gradlew :processResources)", + "firmament.dev.resourcerebuild.done": "Gradle resource rebuild done in %s", + "firmament.config.developer": "Developer Settings", + "firmament.config.developer.auto-rebuild": "Automatically rebuild resources", "firmament.price": "Checking price for %s", "firmament.price.bazaar": "Bazaar stats:", "firmament.price.bazaar.productid": "Stock id: %s", |