VulkanShader_1.21.10-0.0.4-alpha.jar
Download file
package net.vulkanmod.render.shader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.class_310;
import net.vulkanmod.Initializer;
import net.vulkanmod.render.PipelineManager;
public final class ShaderPackManager {
public static final String INTERNAL_PACK = "Internal";
private static final Path SHADERS_DIR = FabricLoader.getInstance().getGameDir().resolve("shaders");
private ShaderPackManager() {
}
public static void ensureShaderDirectory() {
try {
Files.createDirectories(SHADERS_DIR);
} catch (IOException e) {
throw new RuntimeException("Failed to create shader directory: " + String.valueOf(SHADERS_DIR), e);
}
}
public static Path getShadersDirectory() {
ensureShaderDirectory();
return SHADERS_DIR;
}
public static String[] getAvailableShaderPacks() {
ensureShaderDirectory();
List<String> packs = new ArrayList();
packs.add("Internal");
try {
Stream<Path> stream = Files.list(SHADERS_DIR);
try {
Stream var10000 = stream.filter((path) -> Files.isDirectory(path, new LinkOption[0]) || path.getFileName().toString().endsWith(".zip")).map((path) -> path.getFileName().toString()).filter((name) -> !name.isBlank()).sorted(Comparator.naturalOrder());
Objects.requireNonNull(packs);
var10000.forEach(packs::add);
} catch (Throwable var5) {
if (stream != null) {
try {
stream.close();
} catch (Throwable var4) {
var5.addSuppressed(var4);
}
}
throw var5;
}
if (stream != null) {
stream.close();
}
} catch (IOException e) {
Initializer.LOGGER.error("Failed to list shader packs from {}", SHADERS_DIR, e);
}
return (String[])packs.toArray((x$0) -> new String[x$0]);
}
public static Path getActiveShaderPackRoot() {
ensureShaderDirectory();
Path selectedPack = getActiveShaderPackPath();
return selectedPack != null && Files.isDirectory(selectedPack, new LinkOption[0]) ? selectedPack : null;
}
public static Path getActiveShaderPackPath() {
ensureShaderDirectory();
String shaderPack = Initializer.CONFIG.shaderPack;
if (shaderPack != null && !shaderPack.isBlank() && !"Internal".equals(shaderPack)) {
Path packPath = SHADERS_DIR.resolve(shaderPack);
return !Files.exists(packPath, new LinkOption[0]) ? null : packPath;
} else {
return null;
}
}
public static Path getActiveIncludeDirectory() {
Path root = getActiveShaderPackRoot();
if (root == null) {
return null;
} else {
Path includeDir = root.resolve("include");
return Files.isDirectory(includeDir, new LinkOption[0]) ? includeDir : null;
}
}
public static InputStream openActiveShaderResource(String relativePath) {
Path packPath = getActiveShaderPackPath();
if (packPath == null) {
return null;
} else {
try {
if (Files.isDirectory(packPath, new LinkOption[0])) {
Path file = packPath.resolve(relativePath);
return !Files.exists(file, new LinkOption[0]) ? null : Files.newInputStream(file);
} else if (packPath.getFileName().toString().endsWith(".zip")) {
ZipFile zipFile = new ZipFile(packPath.toFile(), StandardCharsets.UTF_8);
ByteArrayInputStream var9;
label55: {
try {
ZipEntry entry = zipFile.getEntry(relativePath);
if (entry == null) {
entry = (ZipEntry)zipFile.stream().filter((candidate) -> !candidate.isDirectory()).filter((candidate) -> candidate.getName().equals(relativePath) || candidate.getName().endsWith("/" + relativePath)).findFirst().orElse((Object)null);
}
if (entry == null) {
var9 = null;
break label55;
}
var9 = new ByteArrayInputStream(zipFile.getInputStream(entry).readAllBytes());
} catch (Throwable var6) {
try {
zipFile.close();
} catch (Throwable var5) {
var6.addSuppressed(var5);
}
throw var6;
}
zipFile.close();
return var9;
}
zipFile.close();
return var9;
} else {
return null;
}
} catch (IOException e) {
throw new UncheckedIOException("Failed to read shader pack resource " + relativePath + " from " + String.valueOf(packPath), e);
}
}
}
public static void reloadActiveShaderPack() {
PipelineManager.reloadPipelines();
class_310 minecraft = class_310.method_1551();
if (minecraft.field_1769 != null) {
minecraft.field_1769.method_3279();
}
}
}
Download file