1
0
mirror of https://github.com/GeyserMC/Rainbow.git synced 2025-12-19 14:59:16 +00:00

Export generated pack into ZIP-file

This commit is contained in:
Eclipse
2025-07-18 09:29:14 +00:00
parent 2950cc5f9e
commit f83402b654
2 changed files with 36 additions and 1 deletions

View File

@@ -14,9 +14,14 @@ import org.joml.Vector3f;
import org.joml.Vector3fc;
import java.io.IOException;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.Map;
import java.util.function.Supplier;
import java.util.stream.Stream;
public class CodecUtil {
// It's fine to cast to mutable here since codecs won't change the data
@@ -64,6 +69,28 @@ public class CodecUtil {
}
}
public static void tryZipDirectory(Path directory, Path output) throws IOException {
try (FileSystem zip = FileSystems.newFileSystem(output, Map.of("create", "true"))) {
try (Stream<Path> paths = Files.walk(directory)) {
paths.forEach(path -> {
try {
Path inZip = zip.getPath(String.valueOf(directory.relativize(path)));
if (Files.isDirectory(path)) {
Files.createDirectories(inZip);
} else {
Files.copy(path, inZip, StandardCopyOption.REPLACE_EXISTING);
}
} catch (IOException exception) {
Rainbow.LOGGER.warn("Failed to copy contents from {} to ZIP-file {}!", path, output, exception);
}
});
}
} catch (IOException exception) {
Rainbow.LOGGER.warn("Failed to write ZIP-file {}!", output, exception);
throw exception;
}
}
public static void ensureDirectoryExists(Path directory) throws IOException {
if (!Files.isDirectory(directory)) {
try {

View File

@@ -12,6 +12,7 @@ import net.minecraft.world.item.ItemStack;
import org.apache.commons.io.IOUtils;
import org.geysermc.rainbow.CodecUtil;
import org.geysermc.rainbow.PackConstants;
import org.geysermc.rainbow.Rainbow;
import org.geysermc.rainbow.mapping.BedrockItemMapper;
import org.geysermc.rainbow.mapping.geyser.GeyserMappings;
import org.geysermc.rainbow.mixin.SplashRendererAccessor;
@@ -38,7 +39,7 @@ public class BedrockPack {
"meow", "we'll be done here soon™", "got anything else to say?", "we're done now!", "this will be fixed by v6053", "expect it to be done within 180 business days!");
private static final RandomSource RANDOM = RandomSource.create();
private static final Path EXPORT_DIRECTORY = FabricLoader.getInstance().getGameDir().resolve("rainbow");
private static final Path EXPORT_DIRECTORY = FabricLoader.getInstance().getGameDir().resolve(Rainbow.MOD_ID);
private static final Path PACK_DIRECTORY = Path.of("pack");
private static final Path ATTACHABLES_DIRECTORY = Path.of("attachables");
private static final Path GEOMETRY_DIRECTORY = Path.of("models/entity");
@@ -48,6 +49,7 @@ public class BedrockPack {
private static final Path MANIFEST_FILE = Path.of("manifest.json");
private static final Path ITEM_ATLAS_FILE = Path.of("textures/item_texture.json");
private static final Path PACK_ZIP_FILE = Path.of("pack.zip");
private static final Path REPORT_FILE = Path.of("report.txt");
private final String name;
@@ -155,6 +157,12 @@ public class BedrockPack {
}
}
try {
CodecUtil.tryZipDirectory(packPath, exportPath.resolve(PACK_ZIP_FILE));
} catch (IOException exception) {
success = false;
}
try {
Files.writeString(exportPath.resolve(REPORT_FILE), createPackSummary());
} catch (IOException exception) {