Full Example
This example builds a small addon that defines a custom “jump” event, fires it from a listener and registers a “jump 3 times” task that uses it.
1. Define a custom event
package com.example.myaddon;
import dev.blancocl.simonSays.api.SimonEvent;import dev.blancocl.simonSays.game.Game;import org.bukkit.entity.Player;import org.bukkit.event.HandlerList;
public class PlayerJumpEvent extends SimonEvent {
private static final HandlerList HANDLERS = new HandlerList(); private final Player player;
public PlayerJumpEvent(Game game, Player player) { super(game); this.player = player; }
public Player getPlayer() { return player; }
@Override public HandlerList getHandlers() { return HANDLERS; }
public static HandlerList getHandlerList() { return HANDLERS; }}2. Fire the event from a listener
package com.example.myaddon;
import dev.blancocl.simonSays.api.SimonSaysAPI;import dev.blancocl.simonSays.game.Game;import org.bukkit.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.player.PlayerMoveEvent;
public class JumpListener implements Listener {
@EventHandler public void onMove(PlayerMoveEvent e) { Player player = e.getPlayer(); if (!SimonSaysAPI.get().isPlaying(player)) return;
// Detect a jump (upward Y change) if (e.getFrom().getY() < e.getTo().getY()) { Game game = SimonSaysAPI.get().getGame(player); player.getServer().getPluginManager() .callEvent(new PlayerJumpEvent(game, player)); } }}3. Register the task and use the API
package com.example.myaddon;
import dev.blancocl.simonSays.api.SimonSaysAPI;import dev.blancocl.simonSays.api.TaskBuilder;import dev.blancocl.simonSays.game.Game;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.plugin.java.JavaPlugin;
public class MyAddon extends JavaPlugin implements Listener {
@Override public void onEnable() { // Task: "jump 3 times" TaskBuilder.create("triple-jump") .instruction("<aqua>Jump <yellow>3</yellow> times!</aqua>") .weight(6) .onStart((game, gp, ctx) -> ctx.put("jumps", 0)) .check((game, gp, ctx) -> { Integer jumps = ctx.get("jumps"); return jumps != null && jumps >= 3; }) .register();
getServer().getPluginManager().registerEvents(this, this); getServer().getPluginManager().registerEvents(new JumpListener(), this); }
@EventHandler public void onJump(PlayerJumpEvent e) { if (!SimonSaysAPI.get().isPlaying(e.getPlayer())) return;
Game game = e.getGame(); game.currentContext().ifPresent(ctx -> { Integer jumps = ctx.get("jumps"); ctx.put("jumps", jumps == null ? 1 : jumps + 1); }); }}4. Addon plugin.yml
name: MySimonSaysAddonversion: 1.0.0main: com.example.myaddon.MyAddondepend: [SimonSays]