Event List
| Event | Description | Cancellable |
|---|---|---|
PlayerLevelUpEvent | Player levels up | Yes |
QuestCompleteEvent | Quest completed | Yes |
RewardClaimEvent | Reward claimed | Yes |
SeasonStartEvent | Season starts | No |
SeasonEndEvent | Season ends | No |
Register Listener
import com.kitemc.arcpass.api.event.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class ArcPassListener implements Listener {
@EventHandler
public void onLevelUp(PlayerLevelUpEvent event) {
// Handle level up
}
@EventHandler
public void onQuestComplete(QuestCompleteEvent event) {
// Handle quest completion
}
}
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(new ArcPassListener(), this);
}
PlayerLevelUpEvent
Fired when a player’s pass level increases.@EventHandler
public void onLevelUp(PlayerLevelUpEvent event) {
UUID playerId = event.getPlayerId();
int oldLevel = event.getOldLevel();
int newLevel = event.getNewLevel();
long totalExperience = event.getTotalExperience();
Player player = Bukkit.getPlayer(playerId);
if (player != null) {
player.sendMessage("§6Congratulations! §e" + oldLevel + " → " + newLevel);
player.getWorld().spawn(player.getLocation(), Firework.class);
myRewardSystem.checkMilestone(player, newLevel);
}
getLogger().info(player.getName() + " reached level " + newLevel);
}
Properties
| Method | Return Type | Description |
|---|---|---|
getPlayerId() | UUID | Player UUID |
getOldLevel() | int | Previous level |
getNewLevel() | int | New level |
getTotalExperience() | long | Current total XP |
QuestCompleteEvent
Fired when a quest is completed. Can be cancelled.@EventHandler
public void onQuestComplete(QuestCompleteEvent event) {
UUID playerId = event.getPlayerId();
Quest quest = event.getQuest();
int experienceReward = event.getExperienceReward();
Player player = Bukkit.getPlayer(playerId);
if (player == null) return;
// Anti-cheat check
if (antiCheat.isSuspicious(player)) {
event.setCancelled(true);
getLogger().warning("Suspicious completion: " + player.getName());
return;
}
// Double XP event
if (isDoubleExpActive()) {
event.setExperienceReward(experienceReward * 2);
player.sendMessage("§aDouble XP! Extra +" + experienceReward);
}
questStats.recordCompletion(player, quest);
}
Properties
| Method | Return Type | Description |
|---|---|---|
getPlayerId() | UUID | Player UUID |
getQuest() | Quest | Completed quest |
getExperienceReward() | int | XP reward |
setExperienceReward(int) | void | Modify XP reward |
isCancelled() | boolean | Is cancelled |
setCancelled(boolean) | void | Set cancelled |
RewardClaimEvent
Fired when a player claims a reward. Can be cancelled.@EventHandler
public void onRewardClaim(RewardClaimEvent event) {
UUID playerId = event.getPlayerId();
int level = event.getLevel();
String tierId = event.getTierId();
List<Reward> rewards = event.getRewards();
Player player = Bukkit.getPlayer(playerId);
if (player == null) return;
// Check inventory space
int requiredSlots = countRequiredSlots(rewards);
int emptySlots = countEmptySlots(player.getInventory());
if (emptySlots < requiredSlots) {
event.setCancelled(true);
player.sendMessage("§cNot enough inventory space!");
return;
}
getLogger().info(player.getName() + " claimed Lv." + level + " " + tierId);
achievementSystem.checkRewardMilestone(player, level);
}
Properties
| Method | Return Type | Description |
|---|---|---|
getPlayerId() | UUID | Player UUID |
getLevel() | int | Claimed level |
getTierId() | String | Claimed tier |
getRewards() | List<Reward> | Reward list |
isCancelled() | boolean | Is cancelled |
setCancelled(boolean) | void | Set cancelled |
SeasonStartEvent
Fired when a new season starts.@EventHandler
public void onSeasonStart(SeasonStartEvent event) {
Season season = event.getSeason();
Bukkit.broadcastMessage("");
Bukkit.broadcastMessage("§6§l★ " + season.getDisplayName() + " Started! ★");
Bukkit.broadcastMessage("§7Complete quests for exclusive rewards!");
Bukkit.broadcastMessage("");
for (Player player : Bukkit.getOnlinePlayers()) {
player.playSound(player.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 1.0f, 1.0f);
}
seasonTracker.initNewSeason(season);
discordBot.sendSeasonAnnouncement(season);
}
Properties
| Method | Return Type | Description |
|---|---|---|
getSeason() | Season | New season info |
SeasonEndEvent
Fired when a season ends.@EventHandler
public void onSeasonEnd(SeasonEndEvent event) {
Season season = event.getSeason();
Bukkit.broadcastMessage("");
Bukkit.broadcastMessage("§c§l★ " + season.getDisplayName() + " Ended! ★");
Bukkit.broadcastMessage("§7Thanks to all participants!");
Bukkit.broadcastMessage("");
seasonTracker.saveSeasonStats(season);
distributeLeaderboardRewards(season);
discordBot.sendSeasonEndAnnouncement(season);
}
Properties
| Method | Return Type | Description |
|---|---|---|
getSeason() | Season | Ended season info |
Event Priority
Use standard Bukkit event priorities:@EventHandler(priority = EventPriority.HIGH)
public void onQuestComplete(QuestCompleteEvent event) {
// High priority processing
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onQuestCompleteMonitor(QuestCompleteEvent event) {
// Only log if not cancelled
getLogger().info("Quest completed: " + event.getQuest().getId());
}
Best Practices
- Check Player Online Status
@EventHandler
public void onLevelUp(PlayerLevelUpEvent event) {
Player player = Bukkit.getPlayer(event.getPlayerId());
if (player == null || !player.isOnline()) {
return;
}
// ...
}
- Avoid Blocking Main Thread
@EventHandler
public void onSeasonEnd(SeasonEndEvent event) {
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
saveToDatabaseAsync(event.getSeason());
Bukkit.getScheduler().runTask(plugin, () -> {
notifyPlayers();
});
});
}
- Handle Cancellation Properly
@EventHandler(priority = EventPriority.LOW)
public void onRewardClaim(RewardClaimEvent event) {
if (shouldBlock(event)) {
event.setCancelled(true);
}
}
Next Steps
Code Examples
More practical scenarios