Search in sources :

Example 21 with Prefab

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;
}
Also used : DisplayNameComponent(org.terasology.logic.common.DisplayNameComponent) ItemComponent(org.terasology.logic.inventory.ItemComponent) LightComponent(org.terasology.rendering.logic.LightComponent) EntityBuilder(org.terasology.entitySystem.entity.EntityBuilder) LightComponent(org.terasology.rendering.logic.LightComponent) ItemComponent(org.terasology.logic.inventory.ItemComponent) Component(org.terasology.entitySystem.Component) DisplayNameComponent(org.terasology.logic.common.DisplayNameComponent) Prefab(org.terasology.entitySystem.prefab.Prefab)

Example 22 with Prefab

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;
}
Also used : ComponentMetadata(org.terasology.entitySystem.metadata.ComponentMetadata) EntityInfoComponent(org.terasology.entitySystem.entity.internal.EntityInfoComponent) Component(org.terasology.entitySystem.Component) Prefab(org.terasology.entitySystem.prefab.Prefab) EntityInfoComponent(org.terasology.entitySystem.entity.internal.EntityInfoComponent)

Example 23 with Prefab

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);
    }
}
Also used : Prefab(org.terasology.entitySystem.prefab.Prefab)

Example 24 with Prefab

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);
    }
}
Also used : Component(org.terasology.entitySystem.Component) Prefab(org.terasology.entitySystem.prefab.Prefab) EntityRef(org.terasology.entitySystem.entity.EntityRef)

Example 25 with Prefab

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();
}
Also used : NetworkComponent(org.terasology.network.NetworkComponent) Prefab(org.terasology.entitySystem.prefab.Prefab)

Aggregations

Prefab (org.terasology.entitySystem.prefab.Prefab)49 PojoPrefab (org.terasology.entitySystem.prefab.internal.PojoPrefab)20 PrefabData (org.terasology.entitySystem.prefab.PrefabData)13 Test (org.junit.Test)11 ResourceUrn (org.terasology.assets.ResourceUrn)9 Component (org.terasology.entitySystem.Component)9 EntityRef (org.terasology.entitySystem.entity.EntityRef)9 ModuleAwareAssetTypeManager (org.terasology.assets.module.ModuleAwareAssetTypeManager)7 ContextImpl (org.terasology.context.internal.ContextImpl)6 ModuleManager (org.terasology.engine.module.ModuleManager)6 StringComponent (org.terasology.entitySystem.stubs.StringComponent)6 Command (org.terasology.logic.console.commandSystem.annotations.Command)6 ClientComponent (org.terasology.network.ClientComponent)6 Before (org.junit.Before)5 EntityBuilder (org.terasology.entitySystem.entity.EntityBuilder)5 NetworkComponent (org.terasology.network.NetworkComponent)5 BeforeClass (org.junit.BeforeClass)4 NetworkSystem (org.terasology.network.NetworkSystem)4 EngineEntityManager (org.terasology.entitySystem.entity.internal.EngineEntityManager)3 AssetManager (org.terasology.assets.management.AssetManager)2