/RuntimeCore

A reflection-based project for custom loaded Spigot plugins.

Primary LanguageJavaOtherNOASSERTION

RuntimePlugin Interface

Overview

The RuntimeCore API provides a simple and open-source way to interact with Spigot (Minecraft) server software without being constrained by the GPL license. This software uses BSD 3 license, which grants us developers much more freedom in development and business.

Support: Java 8 and above

Server Version: Spigot\Paper 1.8.8 and above

License: BSD 3-Clause "New" or "Revised" License

Example: Java Main Class

@SpigotVersion(fromVersion = "1.8.8", toVersion = "1.20.5")
public final class RuntimeHeal extends ReflectPlugin {

    @Override
    public void onEnable() { // Plugin startup logic
        RuntimeEventListener healEventListener = new HealRequest();
        super.getRuntimeEvents().add(healEventListener);
    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
    }
}

public class AsyncPlayerChatEvent extends ReflectWrappedEvent {
    public AsyncPlayerChatEvent() {
        super("org.bukkit.event.player.AsyncPlayerChatEvent");
    }

    public String getMessage(Object eventObj) {
        return (String) super.eventGetter("getMessage", eventObj);
    }

    public void setCancelled(Object eventObj, boolean cancel) {
        eventSetter("setCancelled", eventObj, cancel);
    }

    public void setMessage(Object eventObj, String message) {
        eventSetter("setMessage", eventObj, message);
    }

    public RuntimePlayer getPlayer(Object eventObj) {
        return new ReflectPlayer(super.eventGetter("getPlayer", eventObj));
    }
}

public final class HealRequest extends ReflectEventListener<AsyncPlayerChatEvent> {

    public HealRequest() {
        super(new AsyncPlayerChatEvent());
    }

    @Override
    public void onEvent(Object o) {
        AsyncPlayerChatEvent event = super.getRuntimeWrappedEvent();
        String message = event.getMessage(o).toLowerCase();

        if (!(message.contains("heal me") || message.contains("heal"))) {
            return;
        }

        RuntimePlayer runtimePlayer = event.getPlayer(o);
        runtimePlayer.sendMessage("You have been healed :)");
        runtimePlayer.setHealth(runtimePlayer.getMaxHealth());
    }
}

Example: Maven POM.xml

  <dependencies>
    <dependency>
      <groupId>top.cmarco</groupId>
      <artifactId>RuntimeCore</artifactId>
      <version>1.1.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>