Search in sources :

Example 1 with SpongeTagType

use of org.spongepowered.common.tag.SpongeTagType in project SpongeCommon by SpongePowered.

the class TagDataPackSerializer method serialize.

@Override
protected boolean serialize(final SpongeDataPackType<@NonNull ?, TagSerializedObject> type, final Path datapacksDir, final List<TagSerializedObject> objects, int count) throws IOException {
    final Path datapackDir = datapacksDir.resolve(this.getPackName());
    if (!type.persistent()) {
        FileUtils.deleteDirectory(datapackDir.toFile());
    }
    if (objects.isEmpty()) {
        return false;
    }
    // Write our objects
    for (final TagSerializedObject object : objects) {
        final Path namespacedDataDirectory = datapackDir.resolve("data").resolve(object.getKey().namespace());
        final String filename = object.getKey().value() + ".json";
        final Path objectFile = namespacedDataDirectory.resolve(this.typeDirectoryName).resolve(((SpongeTagType<?>) object.getTagType()).internalId()).resolve(filename);
        Files.createDirectories(objectFile.getParent());
        JsonObject toWrite = object.getObject();
        if (Files.exists(objectFile) && !object.getObject().getAsJsonPrimitive("replace").getAsBoolean()) {
            // Merge, baby merge.
            final JsonObject jsonObject;
            try (BufferedReader bufferedReader = Files.newBufferedReader(objectFile)) {
                final JsonElement jsonElement = new JsonParser().parse(bufferedReader);
                jsonObject = jsonElement.getAsJsonObject();
            }
            toWrite = Tag.Builder.tag().addFromJson(jsonObject, filename).addFromJson(object.getObject(), filename).serializeToJson();
        }
        DataPackSerializer.writeFile(objectFile, toWrite);
        this.serializeAdditional(namespacedDataDirectory, object);
    }
    DataPackSerializer.writePackMetadata(this.name, datapackDir);
    return true;
}
Also used : Path(java.nio.file.Path) SpongeTagType(org.spongepowered.common.tag.SpongeTagType) JsonElement(com.google.gson.JsonElement) BufferedReader(java.io.BufferedReader) JsonObject(com.google.gson.JsonObject) TagSerializedObject(org.spongepowered.common.datapack.tag.TagSerializedObject) JsonParser(com.google.gson.JsonParser)

Aggregations

JsonElement (com.google.gson.JsonElement)1 JsonObject (com.google.gson.JsonObject)1 JsonParser (com.google.gson.JsonParser)1 BufferedReader (java.io.BufferedReader)1 Path (java.nio.file.Path)1 TagSerializedObject (org.spongepowered.common.datapack.tag.TagSerializedObject)1 SpongeTagType (org.spongepowered.common.tag.SpongeTagType)1