Code Patterns
Copy-paste examples for common plugin tasks. Commands, events, ECS, GUI, and more.
All
225
Command
60
Damage
2
Ecs
27
Entity
5
Gui
75
Interaction
2
Inventory
4
Moderation
3
Permission
2
Player
9
Plugin
4
Storage
2
Teleport
3
Ui
22
Util
5
← Back to Patterns
java
ecs
Ticking System
Create systems that run every game tick with query filtering.
Example Code
// 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);
}
}