use of org.terasology.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.
the class BlockItemFactory method newBuilder.
/**
* Use this method instead of {@link #newInstance(BlockFamily)} to modify entity properties like the persistence
* flag before it gets created.
*
* @param blockFamily must not be null
*/
public EntityBuilder newBuilder(BlockFamily blockFamily, int quantity) {
EntityBuilder builder = entityManager.newBuilder("engine:blockItemBase");
if (blockFamily.getArchetypeBlock().getLuminance() > 0) {
builder.addComponent(new LightComponent());
}
// Copy the components from block prefab into the block item
Optional<Prefab> prefab = blockFamily.getArchetypeBlock().getPrefab();
if (prefab.isPresent()) {
for (Component component : prefab.get().iterateComponents()) {
if (component.getClass().getAnnotation(AddToBlockBasedItem.class) != null) {
builder.addComponent(entityManager.getComponentLibrary().copy(component));
}
}
}
DisplayNameComponent displayNameComponent = builder.getComponent(DisplayNameComponent.class);
displayNameComponent.name = blockFamily.getDisplayName();
ItemComponent item = builder.getComponent(ItemComponent.class);
if (blockFamily.getArchetypeBlock().isStackable()) {
item.stackId = "block:" + blockFamily.getURI().toString();
item.stackCount = (byte) quantity;
}
BlockItemComponent blockItem = builder.getComponent(BlockItemComponent.class);
blockItem.blockFamily = blockFamily;
return builder;
}
use of org.terasology.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.
the class EntitySerializer method createInitialComponents.
/**
* Creates the components for the entity being deserialized based on its prefab (if any)
*
* @param entityData
* @return The mapping of components
*/
private Map<Class<? extends Component>, Component> createInitialComponents(EntityData.Entity entityData) {
Set<ComponentMetadata<?>> removedComponents = Sets.newHashSet();
for (String removedComp : entityData.getRemovedComponentList()) {
ComponentMetadata<?> removedMetadata = componentLibrary.resolve(removedComp);
if (removedMetadata != null) {
removedComponents.add(removedMetadata);
}
}
Map<Class<? extends Component>, Component> componentMap = Maps.newHashMap();
if (entityData.hasParentPrefab() && !entityData.getParentPrefab().isEmpty() && prefabManager.exists(entityData.getParentPrefab())) {
Prefab prefab = prefabManager.getPrefab(entityData.getParentPrefab());
for (Component component : prefab.iterateComponents()) {
ComponentMetadata<?> metadata = componentLibrary.getMetadata(component);
if (!removedComponents.contains(metadata)) {
componentMap.put(component.getClass(), componentLibrary.copy(component));
}
}
componentMap.put(EntityInfoComponent.class, new EntityInfoComponent(prefab, true, prefab.isAlwaysRelevant()));
}
return componentMap;
}
use of org.terasology.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.
the class PrefabSerializer method deserializeCommonData.
private void deserializeCommonData(EntityData.Prefab prefabData, PrefabData result) {
result.setPersisted((prefabData.hasPersisted()) ? prefabData.getPersisted() : true);
result.setAlwaysRelevant(prefabData.hasAlwaysRelevant() ? prefabData.getAlwaysRelevant() : false);
if (prefabData.hasParentName()) {
Prefab parent = Assets.get(prefabData.getParentName(), Prefab.class).orElse(null);
result.setParent(parent);
}
}
use of org.terasology.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.
the class LocalChunkProvider method generateQueuedEntities.
private void generateQueuedEntities(EntityStore store) {
Prefab prefab = store.getPrefab();
EntityRef entity;
if (prefab != null) {
entity = entityManager.create(prefab);
} else {
entity = entityManager.create();
}
for (Component component : store.iterateComponents()) {
entity.addComponent(component);
}
}
use of org.terasology.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.
the class BaseEntityRef method toString.
@Override
public String toString() {
Prefab parent = getParentPrefab();
StringBuilder builder = new StringBuilder();
builder.append("EntityRef{id = ");
builder.append(getId());
NetworkComponent networkComponent = getComponent(NetworkComponent.class);
if (networkComponent != null) {
builder.append(", netId = ");
builder.append(networkComponent.getNetworkId());
}
if (parent != null) {
builder.append(", prefab = '");
builder.append(parent.getUrn());
builder.append("'");
}
builder.append("}");
return builder.toString();
}
Aggregations