Skip to content

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: MySimonSaysAddon
version: 1.0.0
main: com.example.myaddon.MyAddon
depend: [SimonSays]