Code Patterns

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

← Back to Patterns
ecs

Ticking System

Create systems that run every game tick with query filtering.

Example Code

java
// Simple ticking system
public class GravitySystem extends TickingSystem<EntityStore> {
    @Override
    public void tick(float dt, int systemIndex, Store<EntityStore> store) {
        // Runs every tick
    }
}

// Archetype-filtered system (more efficient)
public class MovementSystem extends ArchetypeTickingSystem<EntityStore> {

    @Override
    public Query<EntityStore> getQuery() {
        // Only process entities with both components
        return Query.and(
            Archetype.of(TransformComponent.getComponentType()),
            Archetype.of(Velocity.getComponentType())
        );
    }

    @Override
    public void tick(float dt, ArchetypeChunk<EntityStore> chunk,
                     Store<EntityStore> store, CommandBuffer<EntityStore> buffer) {
        for (int i = 0; i < chunk.size(); i++) {
            TransformComponent transform = chunk.getComponent(i, TransformComponent.getComponentType());
            Velocity velocity = chunk.getComponent(i, Velocity.getComponentType());

            Vector3d newPos = transform.getPosition().add(velocity.getVelocity().mul(dt));
            transform.setPosition(newPos);
        }
    }
}

// Per-entity system with parallelization
public class AISystem extends EntityTickingSystem<EntityStore> {

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

    @Override
    public boolean isParallel(int chunkSize, int taskCount) {
        return chunkSize > 100;  // Parallelize for large chunks
    }

    @Override
    public void tick(float dt, int index, ArchetypeChunk<EntityStore> chunk,
                     Store<EntityStore> store, CommandBuffer<EntityStore> buffer) {
        AIComponent ai = chunk.getComponent(index, AIComponent.getComponentType());
        ai.think(dt);
    }
}