Code Patterns

Copy-paste examples for common plugin tasks. Commands, events, ECS, GUI, and more.

← Back to Patterns
ecs

ECS Event Handler

Handle ECS events like crafting, block breaking, damage using EntityEventSystem.

Example Code

java
public class CancelFibreCraft extends EntityEventSystem<EntityStore, CraftRecipeEvent.Pre> {

    public CancelFibreCraft() {
        super(CraftRecipeEvent.Pre.class);
    }

    @Override
    public void handle(int index,
                       @NonNullDecl ArchetypeChunk<EntityStore> archetypeChunk,
                       @NonNullDecl Store<EntityStore> store,
                       @NonNullDecl CommandBuffer<EntityStore> commandBuffer,
                       @NonNullDecl CraftRecipeEvent.Pre event) {

        CraftingRecipe recipe = event.getCraftedRecipe();
        if (recipe.getInput() != null) {
            for (MaterialQuantity mq : recipe.getInput()) {
                if (Objects.equals(mq.getItemId(), "Ingredient_Fibre")) {
                    event.setCancelled(true);
                    break;
                }
            }
        }
    }

    @Override
    public Query<EntityStore> getQuery() {
        return Archetype.empty();
    }
}

// Register in setup():
getEntityStoreRegistry().registerSystem(new CancelFibreCraft());

Thread Safety

ECS events run on world thread.

Common Mistakes

Using registerGlobal instead of registerSystem for ECS events. Forgetting getQuery() implementation.