Skip to content

API Examples

Practical snippets for the most common API tasks. All examples use the published API coordinates from Developer API.

Model ID Change

As of release 5.2.0.0, all model IDs use Twitter Snowflake IDs instead of UUID v4.


Creating a Region

Create a new region owned by a player:

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import me.tayebyassine.homestead.managers.RegionManager;
import me.tayebyassine.homestead.models.Region;

Player player = Bukkit.getPlayer("TFA_Gaming");
Region region = RegionManager.createRegion("ExampleRegion", player);

Fetching a Region

Look up a region by name (case-insensitive) or by its numeric ID:

import me.tayebyassine.homestead.managers.RegionManager;
import me.tayebyassine.homestead.models.Region;

// By name (case-insensitive)
Region region = RegionManager.findRegion("ExampleRegion");

// By ID
Region region = RegionManager.findRegion(309031393541763072L);

Deleting a Region

Delete a region by ID after confirming it exists:

import me.tayebyassine.homestead.managers.RegionManager;
import me.tayebyassine.homestead.models.Region;

long regionId = 309031393541763072L;

Region region = RegionManager.findRegion(regionId);
if (region != null) {
    RegionManager.deleteRegion(regionId);
}

Claiming a Chunk

Claim a chunk for a region. The return value is a ChunkManager.Error. null means success:

import org.bukkit.Chunk;
import me.tayebyassine.homestead.managers.ChunkManager;
import me.tayebyassine.homestead.models.Region;

Region region = ...;
Chunk chunk = ...;

ChunkManager.Error error = ChunkManager.claimChunk(region.getUniqueId(), chunk);

if (error == null) {
    // Success
} else {
    // Handle error (e.g. error == ChunkManager.Error.CHUNK_NOT_ADJACENT_TO_REGION)
}

Possible errors: REGION_NOT_FOUND, CHUNK_NOT_FOUND, CHUNK_IN_DISABLED_WORLD, CHUNK_NOT_ADJACENT_TO_REGION, CHUNK_WOULD_SPLIT_REGION.


Unclaiming a Chunk

Remove a chunk from a region:

import org.bukkit.Chunk;
import me.tayebyassine.homestead.managers.ChunkManager;
import me.tayebyassine.homestead.models.Region;

Region region = ...;
Chunk chunk = ...;

ChunkManager.Error error = ChunkManager.unclaimChunk(region.getUniqueId(), chunk);

if (error == null) {
    // Success
}

Managing Members

Invite players, revoke invites, and check invitation status:

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import me.tayebyassine.homestead.managers.InviteManager;
import me.tayebyassine.homestead.models.Region;

Player target = Bukkit.getPlayer("test_account");
Region region = ...;

// Invite a player
InviteManager.invitePlayer(region, target);

// Delete invites of a player
InviteManager.deleteInvitesOfPlayer(target);

// Delete invites of a region
InviteManager.deleteInvitesOfRegion(region);

// Get invites of a player
InviteManager.getInvitesOfPlayer(target);

// Get invites of a region
InviteManager.getInvitesOfRegion(region);

// Check if invited
boolean invited = InviteManager.isInvited(region, target);

Working with Flags

Read and modify bitwise flag values on a region:

import java.util.List;
import me.tayebyassine.homestead.flags.FlagCalculator;
import me.tayebyassine.homestead.flags.PlayerFlag;
import me.tayebyassine.homestead.models.Region;

Region region = ...;

// Get flag values
long playerFlags = region.getPlayerFlags();
long worldFlags = region.getWorldFlags();

// Get all player flag names as they appear in the config
List<String> flagNames = PlayerFlag.getFlags();

// Resolve a config name to its bitmask value
long flag = PlayerFlag.parse("break-blocks");

// Modify flags — PlayerFlag is an enum, so OR in the bit you want
long newFlags = playerFlags | PlayerFlag.BREAK_BLOCKS.getBitmask();
// → Non-members CAN break blocks

newFlags = FlagCalculator.removeFlag(newFlags, PlayerFlag.CONTAINERS);
// → Non-members CANNOT open containers

// Check if a flag is set
if (FlagCalculator.isFlagSet(playerFlags, PlayerFlag.PVP)) {
    // PvP is allowed
}

// Apply changes
region.setPlayerFlags(newFlags);

Don't Mix Flag Types

Each flag class (PlayerFlag, WorldFlag, ControlFlag) has its own values. Don't use WorldFlag values for player flags.

The flags are enums, not constants classes

PlayerFlag.valueOf("break-blocks") throws IllegalArgumentException — valueOf matches the Java constant name (BREAK_BLOCKS), not the config name. Use PlayerFlag.parse("break-blocks") to go from config name to bitmask, or PlayerFlag.BREAK_BLOCKS.getBitmask() for the constant.


Listening to Events

Register a listener to react to Homestead events:

import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import me.tayebyassine.homestead.api.events.chunk.ChunkClaimEvent;
import me.tayebyassine.homestead.api.events.communication.RegionChatEvent;
import me.tayebyassine.homestead.api.events.economy.BankDepositEvent;
import me.tayebyassine.homestead.api.events.player.PlayerJoinRegionEvent;
import me.tayebyassine.homestead.api.events.region.RegionCreateEvent;

public class HomesteadListener implements Listener {

    @EventHandler
    public void onChunkClaim(ChunkClaimEvent event) {
        event.getRegion();  // The region
        event.getChunk();   // The chunk being claimed
        event.setCancelled(true);  // ChunkClaimEvent is cancellable
    }

    @EventHandler
    public void onRegionCreate(RegionCreateEvent event) {
        event.getRegion();
        event.getPlayer();  // OfflinePlayer
    }

    @EventHandler
    public void onPlayerJoinRegion(PlayerJoinRegionEvent event) {
        event.getPlayer();  // OfflinePlayer
        event.getRegion();
    }

    @EventHandler
    public void onBankDeposit(BankDepositEvent event) {
        event.getRegion();
        event.getAmount();
    }

    @EventHandler
    public void onRegionChat(RegionChatEvent event) {
        event.getPlayer();  // OfflinePlayer
        event.getMessage();
        event.getRegion();
    }
}

Events live in sub-packages

me.tayebyassine.homestead.api.events.* only reaches APIEvent — every concrete event sits in a sub-package such as api.events.chunk or api.events.region. Import them individually, as above. See Developer API for the full mapping.

Register Your Listener

import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;

public final class MyPlugin extends JavaPlugin {

    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(new HomesteadListener(), this);
    }
}

Depend on Homestead at runtime too

Add depend: [Homestead] (or softdepend: [Homestead] if optional) to your plugin.yml so Bukkit loads Homestead before your plugin — otherwise the event classes will not be on the server when you register.