ElvenideCore includes several utility providers to handle common development tasks.

Log Provider

Provides low-verbosity console logging with MiniMessage support.

Core.log.info("<green>Plugin started successfully!");
Core.log.error("An error occurred: " + e.getMessage());

Perm Provider

Simplified permission checking.

if (Core.perms.has(player, "admin.use")) {
    // Player has permission
}

It also supports negated permissions.

if (Core.perms.has(player, "-admin.use")) {
    // Player doesn't have permission
}

Event Provider

Creating custom events using the Bukkit event system is very verbose, with lots of unnecessary boilerplate. ElvenideCore provides the CoreEvent interface, which is a powerful, simple, yet familiar alternative for custom events.

You can even use CoreEvent with record classes to eliminate the need for constructors for simple events.

Example event class:

import com.elvenide.core.providers.event.CoreEvent;
import org.bukkit.entity.Player;

public record YourCustomEvent(Player player, String message) implements CoreEvent {
    // YUP, that's all.
    // No need for constructors
    // No need for handler lists
    // No need for getter methods and private fields
}

If you want your event to be cancellable, just add the CoreCancellable interface:

import com.elvenide.core.providers.event.CoreEvent;
import com.elvenide.core.providers.event.CoreCancellable;
import org.bukkit.entity.Player;

public record YourCustomEvent(Player player, String message) implements CoreEvent, CoreCancellable {
    // YUP, that's all.
    // No need for setCancelled()
    // No need for isCancelled()
}

To call your event:

public void callingEventExample(Player player) {
    String message = "your message here";
    new YourCustomEvent(player, message).callCoreEvent();
}

To create a listener for your event:

import com.elvenide.core.providers.event.CoreEventPriority;
import com.elvenide.core.providers.event.CoreListener;
import com.elvenide.core.providers.event.CoreEventHandler;

public class YourListener implements CoreListener {
    @CoreEventHandler(priority = CoreEventPriority.NORMAL)
    public void onYourCustomEvent(YourCustomEvent event) {
        // Example: send the message to the player
        event.player().sendRichMessage(event.message());
        
        // Example: cancel the event for other, later-priority listeners
        event.setCancelled(true);
    }
}

Register your listener:

// Example registering listeners in your plugin's onEnable() method
public void onEnable() {
    new YourListener().register();
}