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;
}
Aggregations