Add option to auto rebuild resources before F3+T
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,6 +21,7 @@ package moe.nea.firmament.features
|
|||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.serializer
|
import kotlinx.serialization.serializer
|
||||||
import moe.nea.firmament.Firmament
|
import moe.nea.firmament.Firmament
|
||||||
|
import moe.nea.firmament.features.debug.DeveloperFeatures
|
||||||
import moe.nea.firmament.features.fishing.FishingWarning
|
import moe.nea.firmament.features.fishing.FishingWarning
|
||||||
import moe.nea.firmament.features.inventory.SlotLocking
|
import moe.nea.firmament.features.inventory.SlotLocking
|
||||||
import moe.nea.firmament.features.world.FairySouls
|
import moe.nea.firmament.features.world.FairySouls
|
||||||
@@ -48,6 +49,8 @@ object FeatureManager : DataHolder<FeatureManager.Config>(serializer(), "feature
|
|||||||
loadFeature(FairySouls)
|
loadFeature(FairySouls)
|
||||||
loadFeature(FishingWarning)
|
loadFeature(FishingWarning)
|
||||||
loadFeature(SlotLocking)
|
loadFeature(SlotLocking)
|
||||||
|
if (Firmament.DEBUG)
|
||||||
|
loadFeature(DeveloperFeatures)
|
||||||
hasAutoloaded = true
|
hasAutoloaded = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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": "Checking price for %s",
|
||||||
"firmament.price.bazaar": "Bazaar stats:",
|
"firmament.price.bazaar": "Bazaar stats:",
|
||||||
"firmament.price.bazaar.productid": "Stock id: %s",
|
"firmament.price.bazaar.productid": "Stock id: %s",
|
||||||
|
|||||||
Reference in New Issue
Block a user