Skip to content

A custom-built API for the events on the NoSkillWorld Minecraft server

Notifications You must be signed in to change notification settings

NoSkillWorld/EventAPI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EventAPI

Introduction:

A simple tool belt for easier management of our awesome events with team handling and game management.

Getting started:

Add those to your pom.xml

The repository:

<repositories>
    <repository>
        <id>repo-nsw</id>
        <url>https://nexus.noskillworld.fr/repository/EventAPI/</url>
    </repository>
    ...
</repositories>

The dependency:

<dependencies>
    <dependency>
        <groupId>fr.noskillworld.eventapi</groupId>
        <artifactId>eventapi</artifactId>
        <version>0.0.1</version>
        <scope>provided</scope>
    </dependency>
    ...
</dependencies>

Registering the API:

Add this code in you onEnable() spigot plugin method:

if (getServer().getPluginManager().getPlugin("EventAPI") == null) {
    logger.warning("No EventAPI found! Disabling the plugin.");
    getPluginLoader().disablePlugin(this);
    return;
}
RegisteredServiceProvider<EventAPI> provider = getServer().getServicesManager().getRegistration(EventAPI.class);
if (provider != null) {
    eventAPI = provider.getProvider();
}

Exemple:

import fr.noskillworld.eventapi.EventAPI;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.logging.Logger;

public class Event extends JavaPlugin {

    private EventAPI eventAPI;
    private Event instance;

    private final Logger logger;

    public Event() {
        instance = this;
        logger = Logger.getLogger("Minecraft");
    }

    @Override
    public void onEnable() {
        setAPI();
        logger.info(String.format("[%s] Plugin loaded successfully", getDescription().getName()));
    }

    @Override
    public void onDisable() {
        instance = null;
        logger.info(String.format("[%s] Plugin shut down successfully", getDescription().getName()));
    }

    private void setAPI() {
        if (getServer().getPluginManager().getPlugin("EventAPI") == null) {
            logger.warning("No EventAPI found! Disabling the plugin.");
            getPluginLoader().disablePlugin(this);
            return;
        }
        RegisteredServiceProvider<EventAPI> provider = getServer().getServicesManager().getRegistration(EventAPI.class);
        if (provider != null) {
            eventAPI = provider.getProvider();
        }
    }

    public EventAPI getEventAPI() {
        return eventAPI;
    }

    public Event getInstance() {
        return instance;
    }
}

And don't forget to add the EventAPI as a dependency in your plugin.yml file of your plugin:

depend: [ EventAPI ]

Using the API:

Event setup

First, you will need to set up the event you want to create using the EventAPI.setup() method:

eventAPI.setup(new EventConfig(
                new Location(Bukkit.getWorld("world"), 0.5, 100, 0.5, 90, 0), //The spawn location
                "Test", //The name of your event
                4, //The number of player per team
                2, //The number of teams
                TeamSelectMode.CHOOSE //The method for putting players into teams (SOLO, RANDOM & CHOOSE are the possible values)
        ));

Now, it should look like this:

public class Event extends JavaPlugin {

    private EventAPI eventAPI;
    private Event instance;

    private final Logger logger;

    public Event() {
        instance = this;
        logger = Logger.getLogger("Minecraft");
    }

    @Override
    public void onEnable() {
        setAPI();

        eventAPI.setup(new EventConfig(
                new Location(Bukkit.getWorld("world"), 0.5, 100, 0.5, 90, 0),
                "Test",
                4,
                2,
                TeamSelectMode.CHOOSE
        ));

        logger.info(String.format("[%s] Plugin loaded successfully", getDescription().getName()));
    }

    @Override
    public void onDisable() {
        instance = null;
        logger.info(String.format("[%s] Plugin shut down successfully", getDescription().getName()));
    }

    private void setAPI() {
        if (getServer().getPluginManager().getPlugin("EventAPI") == null) {
            logger.warning("No EventAPI found! Disabling the plugin.");
            getPluginLoader().disablePlugin(this);
            return;
        }
        RegisteredServiceProvider<EventAPI> provider = getServer().getServicesManager().getRegistration(EventAPI.class);
        if (provider != null) {
            eventAPI = provider.getProvider();
        }
    }

    public EventAPI getEventAPI() {
        return eventAPI;
    }

    public Event getInstance() {
        return instance;
    }
}

Listeners

The API provides a custom event listener, called EventStateChangeEvent triggered every time the event state changes:

@EventHandler
public void onEventStateChange(@NotNull EventStateChangeEvent event) {
    EventState state = event.getEventState();

    switch (state) {
        case PENDING -> System.out.println("DEBUG: event pending");
        case STARTING -> System.out.println("DEBUG: event starting");
        case STARTED -> System.out.println("DEBUG: event started");
        case ENDED -> System.out.println("DEBUG: event ended");
    }
}

Don't forget to register the event listener by calling the registerEvents() method in your onEnable():

getServer().getPluginManager().registerEvents(new OnEventStateChange(this), this);

Finally, you should have this:

public class Event extends JavaPlugin implements Listener {

    private EventAPI eventAPI;
    private Event instance;

    private final Logger logger;

    public Event() {
        instance = this;
        logger = Logger.getLogger("Minecraft");
    }

    @Override
    public void onEnable() {
        setAPI();

        eventAPI.setup(new EventConfig(
                new Location(Bukkit.getWorld("world"), 0.5, 100, 0.5, 90, 0),
                "Test",
                4,
                2,
                TeamSelectMode.CHOOSE
        ));

        logger.info(String.format("[%s] Plugin loaded successfully", getDescription().getName()));
    }

    @Override
    public void onDisable() {
        instance = null;
        logger.info(String.format("[%s] Plugin shut down successfully", getDescription().getName()));
    }

    @EventHandler
    public void onEventStateChange(@NotNull EventStateChangeEvent event) {
        EventState state = event.getEventState();

        switch (state) {
            case PENDING -> System.out.println("DEBUG: event pending");
            case STARTING -> System.out.println("DEBUG: event starting");
            case STARTED -> System.out.println("DEBUG: event started");
            case ENDED -> System.out.println("DEBUG: event ended");
        }
    }

    private void setAPI() {
        if (getServer().getPluginManager().getPlugin("EventAPI") == null) {
            logger.warning("No EventAPI found! Disabling the plugin.");
            getPluginLoader().disablePlugin(this);
            return;
        }
        RegisteredServiceProvider<EventAPI> provider = getServer().getServicesManager().getRegistration(EventAPI.class);
        if (provider != null) {
            eventAPI = provider.getProvider();
        }
    }

    public EventAPI getEventAPI() {
        return eventAPI;
    }

    public Event getInstance() {
        return instance;
    }
}

About

A custom-built API for the events on the NoSkillWorld Minecraft server

Resources

Stars

Watchers

Forks

Releases

No releases published

Languages