83 lines
3.0 KiB
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);
|
|
}
|
|
}
|