use of org.terasology.engine.persistence.serializers.PrefabSerializer in project Terasology by MovingBlocks.
the class WorldSerializerTest method testNotPersistedIfFlagedOtherwise.
@Test
public void testNotPersistedIfFlagedOtherwise() throws Exception {
EngineEntityManager entityManager = context.get(EngineEntityManager.class);
EntityBuilder entityBuilder = entityManager.newBuilder();
PrefabSerializer prefabSerializer = new PrefabSerializer(entityManager.getComponentLibrary(), entityManager.getTypeSerializerLibrary());
WorldSerializer worldSerializer = new WorldSerializerImpl(entityManager, prefabSerializer);
entityBuilder.setPersistent(false);
// just used to express that an entity got created
@SuppressWarnings("unused") EntityRef entity = entityBuilder.build();
EntityData.GlobalStore worldData = worldSerializer.serializeWorld(false);
assertEquals(0, worldData.getEntityCount());
}
use of org.terasology.engine.persistence.serializers.PrefabSerializer in project Terasology by MovingBlocks.
the class PrefabDeltaFormat method apply.
@Override
public void apply(AssetDataFile assetDataFile, PrefabData assetData) throws IOException {
try (BufferedReader deltaReader = new BufferedReader(new InputStreamReader(assetDataFile.openStream(), Charsets.UTF_8))) {
EntityData.Prefab delta = EntityDataJSONFormat.readPrefab(deltaReader);
PrefabSerializer serializer = new PrefabSerializer(componentLibrary, typeHandlerLibrary);
serializer.deserializeDeltaOnto(delta, assetData);
}
}
use of org.terasology.engine.persistence.serializers.PrefabSerializer in project Terasology by MovingBlocks.
the class PrefabFormat method load.
@Override
public PrefabData load(ResourceUrn resourceUrn, List<AssetDataFile> inputs) throws IOException {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputs.get(0).openStream(), Charsets.UTF_8))) {
EntityData.Prefab prefabData = EntityDataJSONFormat.readPrefab(reader);
if (prefabData != null) {
if (!prefabData.hasName()) {
prefabData = prefabData.toBuilder().setName(resourceUrn.toString()).build();
}
logger.debug("Deserializing prefab {} with inputs {}", resourceUrn, inputs);
PrefabSerializer serializer = new PrefabSerializer(componentLibrary, typeHandlerLibrary);
return serializer.deserialize(prefabData);
} else {
throw new IOException("Failed to read prefab for '" + resourceUrn + "'");
}
}
}
use of org.terasology.engine.persistence.serializers.PrefabSerializer in project Terasology by MovingBlocks.
the class CoreCommands method dumpEntities.
/**
* Writes out information on entities having specific components to a text file for debugging
* If no component names provided - writes out information on all entities
*
* @param componentNames string contains one or several component names, if more then one name
* provided - they must be braced with double quotes and all names separated
* by space
* @return String containing information about number of entities saved
* @throws IOException thrown when error with saving file occures
*/
@Command(shortDescription = "Writes out information on all entities to a JSON file for debugging", helpText = "Writes entity information out into a file named \"<timestamp>-entityDump.json\"." + " Supports list of component names, which will be used to only save entities that contains" + " one or more of those components. Names should be separated by spaces.")
public String dumpEntities(@CommandParam(value = "componentNames", required = false) String... componentNames) throws IOException {
int savedEntityCount;
EngineEntityManager engineEntityManager = (EngineEntityManager) entityManager;
PrefabSerializer prefabSerializer = new PrefabSerializer(engineEntityManager.getComponentLibrary(), engineEntityManager.getTypeSerializerLibrary());
WorldDumper worldDumper = new WorldDumper(engineEntityManager, prefabSerializer);
Path outFile = PathManager.getInstance().getHomePath().resolve(Instant.now() + "-entityDump.json");
if (componentNames.length == 0) {
savedEntityCount = worldDumper.save(outFile);
} else {
List<Class<? extends Component>> filterComponents = Arrays.stream(componentNames).map(// Trim off whitespace
String::trim).filter(// Remove empty strings
o -> !o.isEmpty()).map(// All component class names end with "component"
o -> o.toLowerCase().endsWith("component") ? o : o + "component").map(o -> Streams.stream(moduleManager.getEnvironment().getSubtypesOf(Component.class)).filter(e -> e.getSimpleName().equalsIgnoreCase(o)).findFirst()).filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());
if (!filterComponents.isEmpty()) {
savedEntityCount = worldDumper.save(outFile, filterComponents);
} else {
return "Could not find components matching given names";
}
}
return "Number of entities saved: " + savedEntityCount;
}
Aggregations