Documentation Index
Fetch the complete documentation index at: https://mintlify.com/BG-Software-LLC/SuperiorSkyblock2/llms.txt
Use this file to discover all available pages before exploring further.
Island events cover all aspects of island functionality including creation, configuration changes, member management, economy, and more.
Core Lifecycle Events
Island Creation
PreIslandCreateEvent
Called before an island is created. Can be cancelled to prevent creation.
@EventHandler
public void onPreIslandCreate(PreIslandCreateEvent event) {
SuperiorPlayer player = event.getPlayer();
String schematicName = event.getSchematicName();
// Prevent creation under certain conditions
if (!player.asPlayer().hasPermission("custom.create." + schematicName)) {
event.setCancelled(true);
player.asPlayer().sendMessage("You don't have permission for this schematic!");
}
}
IslandCreateEvent
Called when a new island is being created.
@EventHandler
public void onIslandCreate(IslandCreateEvent event) {
Island island = event.getIsland();
SuperiorPlayer player = event.getPlayer();
String schematic = event.getSchematic();
// Customize teleportation behavior
if (player.asPlayer().hasPermission("vip.instant")) {
event.setTeleport(true);
}
// Log island creation
plugin.getLogger().info(player.getName() + " created island with " + schematic);
}
Event Properties:
getPlayer() - Player creating the island
getIsland() - The newly created island object
getSchematic() - Name of the schematic being used
canTeleport() / setTeleport(boolean) - Control player teleportation
isCancelled() / setCancelled(boolean) - Cancel island creation
PostIslandCreateEvent
Called after island creation is fully complete.
@EventHandler
public void onPostIslandCreate(PostIslandCreateEvent event) {
Island island = event.getIsland();
// Grant starter items
giveStarterKit(island.getOwner());
// Announce to server
Bukkit.broadcastMessage(island.getOwner().getName() + " created a new island!");
}
Island Deletion
IslandDisbandEvent
Called when an island is being disbanded.
@EventHandler
public void onIslandDisband(IslandDisbandEvent event) {
Island island = event.getIsland();
SuperiorPlayer player = event.getPlayer();
// Confirm disbanding valuable islands
if (island.getWorth().compareTo(BigDecimal.valueOf(500000)) > 0) {
if (!hasConfirmed(player)) {
event.setCancelled(true);
player.asPlayer().sendMessage("Type /is disband confirm for valuable islands!");
return;
}
}
// Log disbanding
plugin.getLogger().info(player.getName() + " disbanded island: " + island.getName());
}
Member Management Events
IslandJoinEvent
Called when a player joins an island.
@EventHandler
public void onIslandJoin(IslandJoinEvent event) {
SuperiorPlayer player = event.getPlayer();
Island island = event.getIsland();
IslandJoinEvent.Cause cause = event.getCause();
// Different actions based on join cause
switch (cause) {
case INVITE:
island.sendMessage(player.getName() + " accepted the invitation!");
break;
case CREATE:
// Player created the island
break;
}
}
IslandKickEvent
Called when a player is kicked from an island.
@EventHandler
public void onIslandKick(IslandKickEvent event) {
SuperiorPlayer kicked = event.getTarget();
SuperiorPlayer kicker = event.getPlayer();
Island island = event.getIsland();
// Prevent kicking players with specific permission
if (kicked.asPlayer().hasPermission("vip.kickprotection")) {
event.setCancelled(true);
kicker.asPlayer().sendMessage("Cannot kick VIP members!");
}
}
IslandLeaveEvent
Called when a player leaves an island voluntarily.
@EventHandler
public void onIslandLeave(IslandLeaveEvent event) {
SuperiorPlayer player = event.getPlayer();
Island island = event.getIsland();
IslandLeaveEvent.LeaveCause cause = event.getCause();
if (cause == IslandLeaveEvent.LeaveCause.PLAYER_COMMAND) {
island.sendMessage(player.getName() + " has left the island.");
}
}
IslandInviteEvent
Called when a player is invited to an island.
@EventHandler
public void onIslandInvite(IslandInviteEvent event) {
SuperiorPlayer inviter = event.getPlayer();
SuperiorPlayer invited = event.getTarget();
// Limit invites based on island worth
if (event.getIsland().getWorth().compareTo(BigDecimal.ZERO) == 0) {
event.setCancelled(true);
inviter.asPlayer().sendMessage("Build your island first before inviting!");
}
}
IslandBanEvent / IslandUnbanEvent
@EventHandler
public void onIslandBan(IslandBanEvent event) {
SuperiorPlayer banner = event.getPlayer();
SuperiorPlayer banned = event.getTarget();
Island island = event.getIsland();
// Log bans
plugin.getLogger().info(
banner.getName() + " banned " + banned.getName() +
" from island " + island.getName()
);
}
Transfer and Role Events
IslandTransferEvent
Called when island ownership is transferred.
@EventHandler
public void onIslandTransfer(IslandTransferEvent event) {
Island island = event.getIsland();
SuperiorPlayer oldOwner = event.getOldOwner();
SuperiorPlayer newOwner = event.getNewOwner();
// Require confirmation for valuable islands
if (island.getWorth().compareTo(BigDecimal.valueOf(1000000)) > 0) {
if (!hasTransferConfirmation(oldOwner, newOwner)) {
event.setCancelled(true);
return;
}
}
island.sendMessage("Ownership transferred to " + newOwner.getName());
}
IslandChangePlayerPrivilegeEvent
@EventHandler
public void onPrivilegeChange(IslandChangePlayerPrivilegeEvent event) {
SuperiorPlayer target = event.getTarget();
IslandPrivilege privilege = event.getPrivilege();
boolean enabled = event.isPrivilegeEnabled();
plugin.getLogger().info(
target.getName() + " privilege " + privilege.getName() +
" set to: " + enabled
);
}
Coop Management
IslandCoopPlayerEvent / IslandUncoopPlayerEvent
@EventHandler
public void onIslandCoop(IslandCoopPlayerEvent event) {
SuperiorPlayer player = event.getPlayer();
SuperiorPlayer coopPlayer = event.getCoopPlayer();
// Limit coop members
if (event.getIsland().getCoopPlayers().size() >= 5) {
event.setCancelled(true);
player.asPlayer().sendMessage("Maximum 5 coop members!");
}
}
Economy Events
IslandBankDepositEvent
@EventHandler
public void onBankDeposit(IslandBankDepositEvent event) {
SuperiorPlayer player = event.getPlayer();
BigDecimal amount = event.getAmount();
Island island = event.getIsland();
// Bonus for large deposits
if (amount.compareTo(BigDecimal.valueOf(10000)) > 0) {
BigDecimal bonus = amount.multiply(BigDecimal.valueOf(0.05));
island.getIslandBank().depositMoney(bonus);
island.sendMessage("Bonus: $" + bonus + " for large deposit!");
}
// Check for failure
if (event.getFailureReason() != null) {
player.asPlayer().sendMessage("Deposit failed: " + event.getFailureReason());
}
}
IslandBankWithdrawEvent
@EventHandler
public void onBankWithdraw(IslandBankWithdrawEvent event) {
SuperiorPlayer player = event.getPlayer();
BigDecimal amount = event.getAmount();
// Tax large withdrawals
if (amount.compareTo(BigDecimal.valueOf(50000)) > 0) {
BigDecimal tax = amount.multiply(BigDecimal.valueOf(0.02));
event.setAmount(amount.subtract(tax));
player.asPlayer().sendMessage("Tax applied: $" + tax);
}
}
Configuration Change Events
Border and Size
IslandChangeBorderSizeEvent
@EventHandler
public void onBorderSizeChange(IslandChangeBorderSizeEvent event) {
int currentSize = event.getIsland().getIslandSize();
int newSize = event.getBorderSize();
// Enforce maximum size
if (newSize > 500) {
event.setBorderSize(500);
event.getPlayer().asPlayer().sendMessage("Maximum border size is 500!");
}
}
Limits
IslandChangeBlockLimitEvent
@EventHandler
public void onBlockLimitChange(IslandChangeBlockLimitEvent event) {
Key blockKey = event.getBlock();
int newLimit = event.getBlockLimit();
plugin.getLogger().info(
"Block limit for " + blockKey + " changed to " + newLimit
);
}
IslandChangeEntityLimitEvent
@EventHandler
public void onEntityLimitChange(IslandChangeEntityLimitEvent event) {
Key entityKey = event.getEntity();
int newLimit = event.getEntityLimit();
// Prevent setting too high entity limits
if (newLimit > 100) {
event.setEntityLimit(100);
}
}
Effects and Upgrades
IslandChangeEffectLevelEvent
@EventHandler
public void onEffectLevelChange(IslandChangeEffectLevelEvent event) {
PotionEffectType effectType = event.getEffectType();
int level = event.getLevel();
island.sendMessage("Island effect " + effectType.getName() + " set to level " + level);
}
IslandUpgradeEvent
@EventHandler
public void onIslandUpgrade(IslandUpgradeEvent event) {
SuperiorPlayer player = event.getPlayer();
Upgrade upgrade = event.getUpgrade();
UpgradeLevel level = event.getUpgradeLevel();
BigDecimal cost = event.getCost();
// Apply VIP discount
if (player != null && player.asPlayer().hasPermission("vip.discount")) {
BigDecimal discountedCost = cost.multiply(BigDecimal.valueOf(0.9));
event.setCost(discountedCost);
}
// Handle different causes
switch (event.getCause()) {
case PLAYER_RANKUP:
island.sendMessage(player.getName() + " ranked up " + upgrade.getName());
break;
case ADMIN_RANKUP:
island.sendMessage("Admin upgraded " + upgrade.getName());
break;
}
}
Teleportation Events
IslandHomeTeleportEvent
@EventHandler
public void onHomeTeleport(IslandHomeTeleportEvent event) {
SuperiorPlayer player = event.getPlayer();
Island island = event.getIsland();
// Teleport cooldown
if (hasCooldown(player)) {
event.setCancelled(true);
player.asPlayer().sendMessage("Teleport cooldown active!");
}
}
IslandWarpTeleportEvent
@EventHandler
public void onWarpTeleport(IslandWarpTeleportEvent event) {
SuperiorPlayer player = event.getPlayer();
IslandWarp warp = event.getIslandWarp();
// Charge for warp usage
if (economy.getBalance(player.asOfflinePlayer()) >= 100) {
economy.withdrawPlayer(player.asOfflinePlayer(), 100);
} else {
event.setCancelled(true);
player.asPlayer().sendMessage("Insufficient funds for warp!");
}
}
Entry Events
IslandEnterEvent
@EventHandler
public void onIslandEnter(IslandEnterEvent event) {
SuperiorPlayer player = event.getPlayer();
Island island = event.getIsland();
IslandEnterEvent.EnterCause cause = event.getCause();
// Welcome message
if (!island.isMember(player)) {
player.asPlayer().sendMessage("Welcome to " + island.getName() + "!");
}
// Cancel entry for banned players
if (island.isBanned(player)) {
event.setCancelTeleport(getSpawnLocation());
event.setCancelled(true);
}
}
IslandEnterProtectedEvent
@EventHandler
public void onEnterProtected(IslandEnterProtectedEvent event) {
// Player entered the protected area (not just island bounds)
SuperiorPlayer player = event.getPlayer();
Island island = event.getIsland();
// Apply island effects when entering protected area
applyIslandEffects(player, island);
}
IslandLeaveProtectedEvent
@EventHandler
public void onLeaveProtected(IslandLeaveProtectedEvent event) {
SuperiorPlayer player = event.getPlayer();
// Remove island effects when leaving
removeIslandEffects(player);
}
Warp Management Events
IslandCreateWarpEvent
@EventHandler
public void onWarpCreate(IslandCreateWarpEvent event) {
String warpName = event.getWarpName();
Location location = event.getLocation();
// Validate warp name
if (warpName.length() > 16) {
event.setCancelled(true);
event.getPlayer().asPlayer().sendMessage("Warp name too long!");
}
}
IslandDeleteWarpEvent
@EventHandler
public void onWarpDelete(IslandDeleteWarpEvent event) {
IslandWarp warp = event.getIslandWarp();
plugin.getLogger().info("Warp deleted: " + warp.getName());
}
IslandRenameWarpEvent
@EventHandler
public void onWarpRename(IslandRenameWarpEvent event) {
String oldName = event.getIslandWarp().getName();
String newName = event.getWarpName();
event.getIsland().sendMessage("Warp " + oldName + " renamed to " + newName);
}
World Management
IslandLockWorldEvent / IslandUnlockWorldEvent
@EventHandler
public void onWorldLock(IslandLockWorldEvent event) {
World.Environment environment = event.getEnvironment();
event.getIsland().sendMessage(
environment.name() + " world has been locked!"
);
}
IslandWorldResetEvent
@EventHandler
public void onWorldReset(IslandWorldResetEvent event) {
World.Environment environment = event.getEnvironment();
Island island = event.getIsland();
// Backup before reset
backupIslandWorld(island, environment);
}
Worth and Level Events
IslandWorthCalculatedEvent
@EventHandler
public void onWorthCalculated(IslandWorthCalculatedEvent event) {
Island island = event.getIsland();
BigDecimal level = event.getLevel();
BigDecimal worth = event.getWorth();
SuperiorPlayer player = event.getPlayer();
// This event is often async - schedule sync task for Bukkit API
if (player != null) {
Bukkit.getScheduler().runTask(plugin, () -> {
player.asPlayer().sendMessage(
"Island Level: " + level + ", Worth: $" + worth
);
});
}
}
IslandWorthCalculatedEvent is called asynchronously when worth is calculated off the main thread. Use Bukkit.getScheduler().runTask() for Bukkit API calls.
IslandWorthUpdateEvent
@EventHandler
public void onWorthUpdate(IslandWorthUpdateEvent event) {
Island island = event.getIsland();
// Check for level milestones
BigDecimal level = island.getIslandLevel();
if (level.compareTo(BigDecimal.valueOf(100)) >= 0) {
awardMilestoneReward(island, 100);
}
}
Bonus Events
IslandChangeLevelBonusEvent
@EventHandler
public void onLevelBonusChange(IslandChangeLevelBonusEvent event) {
BigDecimal bonus = event.getBonus();
plugin.getLogger().info(
"Level bonus changed to: " + bonus
);
}
IslandChangeWorthBonusEvent
@EventHandler
public void onWorthBonusChange(IslandChangeWorthBonusEvent event) {
BigDecimal bonus = event.getBonus();
event.getIsland().sendMessage("Worth bonus updated: " + bonus);
}
Generator Events
IslandGenerateBlockEvent
@EventHandler
public void onBlockGenerate(IslandGenerateBlockEvent event) {
Block block = event.getBlock();
Key generatedBlock = event.getBlock();
// Custom generator logic
if (Math.random() < 0.01) { // 1% chance
event.setBlock(Key.of("DIAMOND_ORE"));
}
}
IslandChangeGeneratorRateEvent
@EventHandler
public void onGeneratorRateChange(IslandChangeGeneratorRateEvent event) {
Key block = event.getBlock();
int rate = event.getRate();
World.Environment environment = event.getEnvironment();
plugin.getLogger().info(
"Generator rate for " + block + " in " + environment + ": " + rate
);
}
Miscellaneous Island Events
IslandBiomeChangeEvent
@EventHandler
public void onBiomeChange(IslandBiomeChangeEvent event) {
Biome biome = event.getBiome();
event.getIsland().sendMessage("Island biome changed to " + biome.name());
}
IslandRenameEvent
@EventHandler
public void onIslandRename(IslandRenameEvent event) {
String oldName = event.getIsland().getName();
String newName = event.getIslandName();
// Validate name
if (newName.length() > 32) {
event.setCancelled(true);
event.getPlayer().asPlayer().sendMessage("Name too long!");
}
}
IslandChangeDescriptionEvent
@EventHandler
public void onDescriptionChange(IslandChangeDescriptionEvent event) {
String description = event.getDescription();
// Filter inappropriate content
if (containsInappropriateContent(description)) {
event.setCancelled(true);
}
}
IslandChatEvent
@EventHandler
public void onIslandChat(IslandChatEvent event) {
SuperiorPlayer player = event.getPlayer();
String message = event.getMessage();
// Custom chat formatting
String formatted = "[Island] <" + player.getName() + "> " + message;
event.getIsland().sendMessage(formatted);
event.setCancelled(true); // Prevent default message
}
IslandRateEvent
@EventHandler
public void onIslandRate(IslandRateEvent event) {
SuperiorPlayer rater = event.getPlayer();
SuperiorPlayer target = event.getTarget();
int rating = event.getRating();
// Prevent rating own island
if (rater.getIsland() == target.getIsland()) {
event.setCancelled(true);
rater.asPlayer().sendMessage("Cannot rate your own island!");
}
}
IslandSchematicPasteEvent
@EventHandler
public void onSchematicPaste(IslandSchematicPasteEvent event) {
String schematic = event.getSchematic();
Island island = event.getIsland();
plugin.getLogger().info(
"Pasting schematic " + schematic + " for island " + island.getOwner().getName()
);
}
Complete Event List
Here are all island-related events organized by category:
Lifecycle
PreIslandCreateEvent
IslandCreateEvent
PostIslandCreateEvent
IslandDisbandEvent
IslandQuitEvent
Members
IslandJoinEvent
IslandLeaveEvent
IslandKickEvent
IslandInviteEvent
IslandBanEvent
IslandUnbanEvent
IslandCoopPlayerEvent
IslandUncoopPlayerEvent
IslandTransferEvent
Economy
IslandBankDepositEvent
IslandBankWithdrawEvent
IslandChangeBankLimitEvent
Configuration
IslandChangeBorderSizeEvent
IslandChangeBlockLimitEvent
IslandChangeEntityLimitEvent
IslandChangeCoopLimitEvent
IslandChangeMembersLimitEvent
IslandChangeWarpsLimitEvent
IslandChangeRoleLimitEvent
IslandRemoveBlockLimitEvent
IslandRemoveEntityLimitEvent
IslandRemoveRoleLimitEvent
Effects & Upgrades
IslandChangeEffectLevelEvent
IslandRemoveEffectEvent
IslandUpgradeEvent
Privileges
IslandChangePlayerPrivilegeEvent
IslandChangeRolePrivilegeEvent
IslandClearPlayerPrivilegesEvent
IslandClearRolesPrivilegesEvent
Warps
IslandCreateWarpEvent
IslandDeleteWarpEvent
IslandRenameWarpEvent
IslandChangeWarpIconEvent
IslandChangeWarpLocationEvent
IslandCreateWarpCategoryEvent
IslandChangeWarpCategoryIconEvent
IslandChangeWarpCategorySlotEvent
IslandRenameWarpCategoryEvent
IslandOpenWarpEvent
IslandCloseWarpEvent
Teleportation
IslandHomeTeleportEvent
IslandWarpTeleportEvent
IslandVisitorHomeTeleportEvent
IslandSetHomeEvent
IslandSetVisitorHomeEvent
IslandRemoveVisitorHomeEvent
Entry/Exit
IslandEnterEvent
IslandEnterProtectedEvent
IslandLeaveProtectedEvent
IslandEnterPortalEvent
IslandRestrictMoveEvent
Worth & Level
IslandWorthCalculatedEvent
IslandWorthUpdateEvent
IslandChangeLevelBonusEvent
IslandChangeWorthBonusEvent
Generators
IslandGenerateBlockEvent
IslandChangeGeneratorRateEvent
IslandRemoveGeneratorRateEvent
IslandClearGeneratorRatesEvent
IslandChangeSpawnerRatesEvent
IslandChangeCropGrowthEvent
IslandChangeMobDropsEvent
World Management
IslandLockWorldEvent
IslandUnlockWorldEvent
IslandWorldResetEvent
IslandChunkResetEvent
Customization
IslandRenameEvent
IslandChangeDescriptionEvent
IslandChangeDiscordEvent
IslandChangePaypalEvent
IslandBiomeChangeEvent
IslandOpenEvent
IslandCloseEvent
Flags & Settings
IslandEnableFlagEvent
IslandDisableFlagEvent
IslandClearFlagsEvent
Ratings
IslandRateEvent
IslandRemoveRatingEvent
IslandClearRatingsEvent
Miscellaneous
IslandChatEvent
IslandSchematicPasteEvent
Next Steps