aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornea <nea@nea.moe>2023-05-31 01:05:17 +0200
committernea <nea@nea.moe>2023-05-31 01:08:08 +0200
commitd670ed6bb054945d16a9d1ea2a32d469b524398a (patch)
tree96e50f42baf2cc21d4efb246f4d95105967b7553
parenta24a74fa2351d53693226ba0d0018fb9589cddc9 (diff)
downloadfirmament-d670ed6bb054945d16a9d1ea2a32d469b524398a.tar.gz
firmament-d670ed6bb054945d16a9d1ea2a32d469b524398a.tar.bz2
firmament-d670ed6bb054945d16a9d1ea2a32d469b524398a.zip
Add option to auto rebuild resources before F3+T
-rw-r--r--src/main/java/moe/nea/firmament/mixins/devenv/MixinKeyboard.java18
-rw-r--r--src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt3
-rw-r--r--src/main/kotlin/moe/nea/firmament/features/debug/DeveloperFeatures.kt56
-rw-r--r--src/main/resources/assets/firmament/lang/en_us.json4
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",