Respackopts/src/client/java/io/gitlab/jfronny/respackopts/RespackoptsClient.java

83 lines
3.0 KiB
Java

package io.gitlab.jfronny.respackopts;
import io.gitlab.jfronny.respackopts.integration.*;
import io.gitlab.jfronny.respackopts.util.MetaCache;
import net.fabricmc.api.*;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.server.integrated.IntegratedServer;
import net.minecraft.util.Identifier;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@Environment(EnvType.CLIENT)
public class RespackoptsClient implements ClientModInitializer, SaveHook {
private static final boolean FREX_LOADED = FabricLoader.getInstance().isModLoaded("frex");
public static final Identifier RPO_SHADER_ID = new Identifier(Respackopts.ID, "config_supplier");
public static boolean forcePackReload = false;
private static String shaderImportSource;
public static String getShaderImportSource() {
if (shaderImportSource == null) {
Respackopts.LOGGER.error("Shader import source is null");
return "";
}
return shaderImportSource;
}
@Override
public void onInitializeClient() {
if (RespackoptsConfig.debugCommands)
RpoClientCommand.register();
if (FREX_LOADED) {
FrexCompat.init();
}
}
@Override
public CompletableFuture<Void> onSave(Arguments args) {
if (RespackoptsConfig.debugLogs)
Respackopts.LOGGER.info("Generating shader code");
StringBuilder sb = new StringBuilder();
sb.append("#ifndef respackopts_loaded");
sb.append("\n#define respackopts_loaded");
MetaCache.forEach((key, state) -> state.configBranch().buildShader(sb, state.packId()));
sb.append("\n#endif");
RespackoptsClient.shaderImportSource = sb.toString();
if (FREX_LOADED) {
FrexCompat.handleSave();
}
if (args.flagResourcesForReload()) {
forcePackReload = true;
DashLoaderCompat.requestForceReload();
}
List<CompletableFuture<Void>> futures = new ArrayList<>();
if (args.reloadResourcesImmediately()) {
futures.add(forceReloadResources());
}
if (args.reloadData()) {
futures.add(reloadIntegratedServerData());
}
return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new));
}
public static CompletableFuture<Void> forceReloadResources() {
forcePackReload = true;
DashLoaderCompat.requestForceReload();
if (RespackoptsConfig.debugLogs) Respackopts.LOGGER.info("Forcing resource reload");
return CompletableFuture.allOf(MinecraftClient.getInstance().reloadResources());
}
public static CompletableFuture<Void> reloadIntegratedServerData() {
IntegratedServer is = MinecraftClient.getInstance().getServer();
if (is != null) {
is.getDataPackManager().scanPacks();
return is.reloadResources(is.getDataPackManager().getEnabledIds());
}
return CompletableFuture.completedFuture(null);
}
}