Custom Flags

Custom flags allow developers to define unique behaviors and rules for claimed lands. Flags can trigger events, control land mechanics, and integrate with other plugin features. This section explains how to create, register, and configure a custom flag.

1. Creating a Custom Flag

Custom flags extend the Flag class and override its methods. Here's an example:

public class CustomFlag extends Flag {
    @EventHandler
    public void onBlockBreak(BlockBreakEvent event) {
        // Check if the block's location belongs to a claimed land
        getLand(event.getBlock().getLocation()).ifPresent(land -> {
            // If the flag is not enabled, notify the player
            if (hasEnabled(land)) {
                event.getPlayer().sendMessage("Breaking " + event.getBlock().getType().name());
            }
        });
    }

    @Override
    public String getFlagName() {
        // Define a unique name for your custom flag
        return "EXAMPLE_CUSTOM_FLAG";
    }
}

Explanation:

  • onBlockBreak: A sample event handler that interacts with the flag's state (hasEnabled).

  • getFlagName: A unique identifier for the flag, required for registration.

2. Registering a Custom Flag

After defining the custom flag, it must be registered to integrate with the plugin. Here's how to do it:

Territory.registerFlag(
    "EXAMPLE_CUSTOM_FLAG",                        // Unique key for the flag
    CustomFlag.class,                     // Class of the custom flag
    new HashMap<>() {{
        put("item", "PAPER");             // Item representing the flag in the GUI
        put("position", 40);              // Slot position in the flag menu
        put("name", "&aCustom Example Flag");  // Display name in the GUI
        // Description/lore
        // %status% will be automaticaly replaced with status values from lang.yml
        put("lore", Arrays.asList("&7Logs mined blocks", "", "%status%"));
    }}
);

Metadata Breakdown:

  • item: The item used to represent the flag in the flag menu (e.g., "PAPER").

  • position: The slot index in the flag menu where the flag appears.

  • name: The display name of the flag, supports color codes.

  • lore: A list of strings for the flag's description, also supports color codes.

Last updated