package org.terasology.entityFactory; import org.terasology.components.ItemComponent; import org.terasology.components.LightComponent; import org.terasology.components.world.BlockItemComponent; import org.terasology.entitySystem.EntityManager; import org.terasology.entitySystem.EntityRef; import org.terasology.entitySystem.PrefabManager; import org.terasology.model.blocks.BlockFamily; /** * @author Immortius <immortius@gmail.com> */ public class BlockItemFactory { private EntityManager entityManager; private PrefabManager prefabManager; public BlockItemFactory(EntityManager entityManager, PrefabManager prefabManager) { this.entityManager = entityManager; this.prefabManager = prefabManager; } public EntityRef newInstance(BlockFamily blockFamily) { return newInstance(blockFamily, 1, null); } public EntityRef newInstance(BlockFamily blockFamily, EntityRef placedEntity) { return newInstance(blockFamily, 1, placedEntity); } public EntityRef newInstance(BlockFamily blockFamily, int quantity) { return newInstance(blockFamily, quantity, null); } private EntityRef newInstance(BlockFamily blockFamily, int quantity, EntityRef placedEntity) { EntityRef entity = entityManager.create(); if (blockFamily.getArchetypeBlock().getLuminance() > 0) { entity.addComponent(new LightComponent()); } ItemComponent item = new ItemComponent(); item.name = blockFamily.getTitle(); item.consumedOnUse = true; if (blockFamily.getArchetypeBlock().isStackable()) { item.stackId = blockFamily.getTitle() + "Block"; item.stackCount = (byte) quantity; } item.usage = ItemComponent.UsageType.ON_BLOCK; entity.addComponent(item); BlockItemComponent blockItem = new BlockItemComponent(blockFamily); if (!blockFamily.getArchetypeBlock().isEntityTemporary()) { if (placedEntity == null || !placedEntity.exists()) { placedEntity = entityManager.create(blockFamily.getArchetypeBlock().getEntityPrefab()); } blockItem.placedEntity = placedEntity; } entity.addComponent(blockItem); return entity; } }