Skip to main content
These are only basic examples — you can mix and match events to create complex logic such as countdown-based minigames, reward systems, or event triggers.

Broadcast when a timer starts

@EventHandler
public void onVCTEvent(VCTEvent event) {
    if (event.getType() == VCTEventType.CREATE) {
        String timerId = event.getTimerId();
        String timeInitial = event.getInitialTime();

        Bukkit.broadcastMessage("A new timer has started: " + timerId + " (" + timeInitial + ")");
    }
}
  • Useful for announcing timers to all players.
  • Gives context when a new timer begins.

Send bossbar updates every second

@EventHandler
public void onVCTEvent(VCTEvent event) {
    if (event.getType() == VCTEventType.CHANGE) {
        String timeLeft = event.getTimeLeft();

        Bukkit.getOnlinePlayers().forEach(player -> {
            player.sendActionBar("Time left: " + timeLeft);
        });
    }
}
  • Runs every second.
  • Good for syncing custom UI or scoreboards with the timer.

Grant rewards when timer finishes

@EventHandler
public void onVCTEvent(VCTEvent event) {
    if (event.getType() == VCTEventType.FINISH && event.getTimerId().equals("xp_challenge")) {
        Bukkit.broadcastMessage("The XP Challenge has ended!");

        // Reward all players
        for (Player player : Bukkit.getOnlinePlayers()) {
            player.giveExpLevels(5);
        }
    }
}
  • Perfect for minigames or challenges (xp_challenge) that end with rewards.
  • Trigger extra logic when the timer reaches 00:00:00.

Pause/resume feedback

@EventHandler
public void onVCTEvent(VCTEvent event) {
    switch (event.getType()) {
        case PAUSE:
            if (event.getTimerId().equals("game_round")) {
                Bukkit.broadcastMessage("The round has been paused");
            }
            break;
        case RESUME:
            if (event.getTimerId().equals("game_round")) {
                Bukkit.broadcastMessage("The round has resumed!");
            }
            break;
    }
}
  • Keeps players informed about game-round timers only.

Log when a timer is stopped manually

@EventHandler
public void onVCTEvent(VCTEvent event) {
    if (event.getType() == VCTEventType.STOP) {
        Bukkit.getLogger().info("[MyPlugin] Timer stopped: " + event.getTimerId());
    }
}
  • Useful for debugging or auditing timer interruptions.
  • Logs any timer being stopped.

Announce time modifications

@EventHandler
public void onVCTEvent(VCTEvent event) {
    if (event.getType() == VCTEventType.MODIFY && event.getTimerId().equals("pvp_event")) {
        String modifier = event.getModifier();
        String modification = event.getModification();

        if (modifier.equals("ADD")) {
            Bukkit.broadcastMessage("The PVP event has been extended by " + modification + "!");
        } else if (modifier.equals("TAKE")) {
            Bukkit.broadcastMessage("The PVP event has been reduced by " + modification);
        } else if (modifier.equals("BOSSBAR_STYLE")) {
            Bukkit.broadcastMessage("The segments of the boss bar in the PVP event have changed to " + modification);
        }
    }
}
  • Lets everyone know when the timer is adjusted or modified.
  • Great for competitive scenarios (adding bonus time, penalties, etc.).
I