/** * 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 Prefab prefab = Assets.getPrefab(blockFamily.getArchetypeBlock().getPrefab()); if (prefab != null) { for (Component component : prefab.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; }
public EntityRef newInstance(BlockFamily blockFamily, EntityRef blockEntity) { if (blockFamily == null) { return EntityRef.NULL; } 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 for (Component component : blockEntity.iterateComponents()) { if (component.getClass().getAnnotation(AddToBlockBasedItem.class) != null) { builder.addComponent(entityManager.getComponentLibrary().copy(component)); } } ItemComponent item = builder.getComponent(ItemComponent.class); if (blockFamily.getArchetypeBlock().isStackable()) { item.stackId = "block:" + blockFamily.getURI().toString(); item.stackCount = (byte) 1; } BlockItemComponent blockItem = builder.getComponent(BlockItemComponent.class); blockItem.blockFamily = blockFamily; return builder.build(); }
private EntityRef createResultItem(String itemResult) { String resultText = itemResult; int count = 1; int starIndex = resultText.indexOf("*"); if (starIndex > -1) { count = Integer.parseInt(resultText.substring(0, starIndex)); resultText = resultText.substring(starIndex + 1); } EntityManager entityManager = CoreRegistry.get(EntityManager.class); BlockManager blockManager = CoreRegistry.get(BlockManager.class); PrefabManager prefabManager = CoreRegistry.get(PrefabManager.class); Prefab prefab = prefabManager.getPrefab(resultText); EntityRef result; if (prefab != null) { result = entityManager.create(prefab); ItemComponent item = result.getComponent(ItemComponent.class); item.stackCount = (byte) count; result.saveComponent(item); } else { BlockItemFactory blockItemFactory = new BlockItemFactory(entityManager); BlockFamily blockFamily = blockManager.getBlockFamily(resultText); result = blockItemFactory.newInstance(blockFamily, count); } return result; }