Code Patterns

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

← Back to Patterns
ecs

RefSystem - Entity Lifecycle

React to entity creation and removal events.

Example Code

java
public class EntityTrackingSystem extends RefSystem<EntityStore> {

    @Override
    public Query<EntityStore> getQuery() {
        // Track all entities with Player component
        return Archetype.of(Player.getComponentType());
    }

    @Override
    public void onEntityAdded(Ref<EntityStore> ref, AddReason reason,
                              Store<EntityStore> store, CommandBuffer<EntityStore> buffer) {
        Player player = store.getComponent(ref, Player.getComponentType());

        if (reason == AddReason.SPAWN) {
            // New player joined
            broadcastJoinMessage(player);
        } else if (reason == AddReason.LOAD) {
            // Player loaded from save
            restorePlayerState(player);
        }
    }

    @Override
    public void onEntityRemove(Ref<EntityStore> ref, RemoveReason reason,
                               Store<EntityStore> store, CommandBuffer<EntityStore> buffer) {
        Player player = store.getComponent(ref, Player.getComponentType());

        if (reason == RemoveReason.REMOVE) {
            // Permanent removal
            broadcastLeaveMessage(player);
        } else if (reason == RemoveReason.UNLOAD) {
            // Saving and unloading
            savePlayerState(player);
        }
    }
}