Zithium Studios
  • 👋Getting Started
  • All Plugins
    • Item Options
    • Text Colors (RGB)
    • ❓FAQ
  • Zithium Series
    • ZithiumTags
      • Menu Options
    • ZithiumMobCoins
      • Commands & Permissions
      • Placeholders
      • Menu Options
      • DeluxeWithdraw Add-on
    • ZithiumBuckets
      • Default Files
    • Zithium Collectors
      • Commands & Permissions
      • Configuration
      • Developer API
  • XL Series
    • 🏆XLTournaments
      • Commands and Permissions
      • Objective Types
      • PlaceholderAPI
      • Configuration Files
      • Developer API
        • Events
        • Custom Objectives
    • ⛏️XLAutoMiner
  • Other Plugins
    • DonutCrates
    • DeluxeHub
      • Commands & Permissions
    • SponsoredSlots
    • DeluxeCoinflip
      • Configuration
      • Developer API
      • Placeholders
      • Custom Currency
Powered by GitBook
On this page
  1. XL Series
  2. XLTournaments
  3. Developer API

Custom Objectives

This guide will explain how to add your very own objective to XLTournaments.

Creating a custom objective is a fairly straight forward process. First of all, ensure you have the API dependency loaded into your project and set it as a depend in your plugin.yml file.


Create your objective class that extends XLObjective. In this example, I will create a class called PlaceObjective which will track block placement:

public class PlaceObjective extends XLObjective {
}

You will need to create a constructor matching the super class. Your IDE may prompt you to do so. Inside the super(...); you will add your objective identifier. In this case, it's called "BLOCK_PLACE" and you'd use this in the tournament configuration.

public class PlaceObjective extends XLObjective {

    public PlaceObjective() {
        super("BLOCK_PLACE");
    }
    
}

Next we'll need to add the loadTournament method, this will allow you to load any objective exclusive settings from each tournament configuration file:

public class PlaceObjective extends XLObjective {

    public PlaceObjective() {
        super("BLOCK_PLACE");
    }
    
    @Override
    public boolean loadTournament(FileConfiguration config) {
        // Load optional or required values from config
        
        // Return true if successful load, otherwise false and the tournament being loaded will be disabled
        return true;
    }
    
}

Finally, we add our event listener (and method contents) to track block placement:

You do not need to register the events in this class as this is done by XLT internally in the super class.

public class PlaceObjective extends XLObjective {

    public PlaceObjective() {
        super("BLOCK_PLACE");
    }

    @EventHandler(priority = EventPriority.HIGH)
    public void onBlockPlace(BlockPlaceEvent event) {
        Player player = event.getPlayer();
        
        for(Tournament tournament : getTournaments()) {
            if(canExecute(tournament, player)) {
                tournament.addScore(player.getUniqueId(), 1);
            }
        }
    }

}

We need to get all active tournaments which use the block place objective and using the canExecute method we if the user is a participant and has finished the challenge (if applicable) and if they are in a disabled world. We can then add the score directly to the tournament passing the UUID of the player and the amount of points to add. We add 1 point in this example as this is represents one block broken.

Register the objective

Now we simply need to register the objective as shown below.

// Accessing the API
XLTournamentsAPI api = (XLTournamentsAPI) Bukkit.getPluginManager().getPlugin("XLTournaments");

// Register (internal) objective
api.registerObjective(new PlaceObjective());

If your objective requires an external plugin (we will check if the plugin is enabled) then use:

// Register objective requiring an external dependency
api.registerObjective(new PlaceObjective(), "RequiredPlugin");

Make sure XLTournaments has been added as a depend in your plugin.yml to ensure it loads correctly.

PreviousEventsNextXLAutoMiner

Last updated 1 year ago

🏆