Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -850,6 +850,10 @@ public static class DeveloperConfigs {
@Configurable
@Configurable.Comment({ "Dump all registered GT models/blockstates/etc?", "Default: false" })
public boolean dumpAssets = false;
@Configurable
@Configurable.Comment({ "Executes ./gradlew :processResources when F3+T is pressed",
"Only works in a development environment", "Default: false" })
public boolean autoRebuildResources = false;
}

public static class RendererConfigs {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.gregtechceu.gtceu.core.mixins.dev.client;

import com.gregtechceu.gtceu.utils.dev.ResourceReloadDetector;

import net.minecraft.client.KeyboardHandler;
import net.minecraft.client.Minecraft;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

import java.util.concurrent.CompletableFuture;

@Mixin(KeyboardHandler.class)
public abstract class KeyboardHandlerMixin {

@WrapOperation(method = "handleDebugKeys",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/client/Minecraft;reloadResourcePacks()Ljava/util/concurrent/CompletableFuture;"))
private CompletableFuture<Void> gtceu$hookResourceReload(Minecraft instance,
Operation<CompletableFuture<Void>> original) {
return ResourceReloadDetector.regenerateResourcesOnReload(() -> original.call(instance));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1233,6 +1233,9 @@ public static void init(RegistrateLangProvider provider) {
provider.add("gtceu.key.enable_step_assist", "Enable StepAssist");
provider.add("gtceu.debug.f3_h.enabled",
"GregTech has modified the debug info! For Developers: enable the misc:debug config option in the GregTech config file to see more");
provider.add("gtceu.debug.resource_rebuild.done", "Gradle resource rebuild done in %s");
provider.add("gtceu.debug.resource_rebuild.start",
"Invoking gradle resource rebuild (./gradlew :processResources)");
provider.add("config.jade.plugin_gtceu.controllable_provider", "[GTCEu] Controllable");
provider.add("config.jade.plugin_gtceu.workable_provider", "[GTCEu] Workable");
provider.add("config.jade.plugin_gtceu.battery_info", "[GTCEu] Battery info");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package com.gregtechceu.gtceu.utils.dev;

import com.gregtechceu.gtceu.GTCEu;
import com.gregtechceu.gtceu.config.ConfigHolder;

import net.minecraft.Util;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component;

import com.sun.jna.platform.win32.*;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import java.time.Instant;
import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;

@ApiStatus.Internal
public class ResourceReloadDetector {

private static final Path gradleDir = findGradleDir();

@ApiStatus.Internal
public static CompletableFuture<Void> regenerateResourcesOnReload(Supplier<CompletableFuture<Void>> reloadFuture) {
if (!ConfigHolder.INSTANCE.dev.autoRebuildResources || !GTCEu.isDev() || gradleDir == null) {
return reloadFuture.get();
}
ProcessBuilder builder = switch (Util.getPlatform()) {
case WINDOWS -> new ProcessBuilder("cmd.exe", "/c", "gradlew.bat", ":processResources");
default -> new ProcessBuilder("./gradlew", ":processResources");
};
builder.directory(gradleDir.toFile());
builder.inheritIO();
Process process;
try {
process = builder.start();
} catch (IOException exception) {
GTCEu.LOGGER.error("Cound not run ./gradlew :processResources", exception);
GTCEu.LOGGER.error("Message the GTCEu developers about this!");
return reloadFuture.get();
}
Minecraft.getInstance().player.sendSystemMessage(Component.translatable("gtceu.debug.resource_rebuild.start"));
Instant start = Instant.now();
// wait for the resource reload to finish, then send chat message, then let MC actually reload resources
return process.toHandle().onExit()
.thenRun(() -> Minecraft.getInstance().player
.sendSystemMessage(Component.translatable("gtceu.debug.resource_rebuild.done",
Duration.between(start, Instant.now()))))
.thenCompose($ -> reloadFuture.get());
}

private static @Nullable Path findGradleDir() {
Path path = Path.of(".").toAbsolutePath();
do {
if (Files.isRegularFile(path.resolve("settings.gradle")) ||
Files.isRegularFile(path.resolve("settings.gradle.kts"))) {
return path;
}
path = path.getParent();
} while (path.getParent() != null);

return null;
}
}
1 change: 1 addition & 0 deletions src/main/resources/gtceu.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"client.MultiPlayerGameModeMixin",
"client.PlayerInfoAccessor",
"client.VariantDeserializerMixin",
"dev.client.KeyboardHandlerMixin",
"ftbchunks.FTBChunksClientMixin",
"ftbchunks.LargeMapScreenMixin",
"ftbchunks.RegionMapPanelMixin",
Expand Down
Loading