package io.gitlab.jfronny.respackopts.util; import io.gitlab.jfronny.respackopts.Respackopts; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import java.io.BufferedWriter; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; import static net.fabricmc.fabric.api.client.command.v1.ClientCommandManager.*; public class RpoCommand { private static final ModContainer respackopts = FabricLoader.getInstance().getModContainer(Respackopts.ID).get(); public static void register() { DISPATCHER.register(literal("rpo").then(literal("dump").then(literal("glsl").executes(ctx -> { ctx.getSource().sendFeedback(dump(Respackopts.getShaderImportSource(), "frex.glsl")); return 1; })))); DISPATCHER.register(literal("rpo").then(literal("dump").then(literal("config").executes(ctx -> { MetaCache.forEach((id, branch) -> ctx.getSource().sendFeedback(dump(branch.toString(), id + ".txt"))); return 1; })))); DISPATCHER.register(literal("rpo").then(literal("dump").executes(ctx -> { MetaCache.forEach((id, branch) -> ctx.getSource().sendFeedback(dump(branch.toString(), id + ".txt"))); return 1; }))); DISPATCHER.register(literal("rpo").then(literal("version").executes(ctx -> { ctx.getSource().sendFeedback(new TranslatableText("respackopts.versionText", respackopts.getMetadata().getVersion(), Respackopts.META_VERSION)); return 1; }))); DISPATCHER.register(literal("rpo").executes(ctx -> { ctx.getSource().sendFeedback(new TranslatableText("respackopts.versionText", respackopts.getMetadata().getVersion(), Respackopts.META_VERSION)); return 1; })); } private static final Path dumpPath = FabricLoader.getInstance().getGameDir().resolve("respackopts"); private static Text dump(String text, String fileName) { try { if (!Files.exists(dumpPath)) Files.createDirectories(dumpPath); Path filePath = dumpPath.resolve(fileName); try (BufferedWriter bw = Files.newBufferedWriter(filePath, StandardOpenOption.CREATE)) { bw.write(text); } return new TranslatableText("respackopts.dumpSucceeded", filePath.toAbsolutePath()); } catch (Throwable e) { return new TranslatableText("respackopts.dumpFailed"); } } }