Skip to main content

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

Build docs developers (and LLMs) love