Skip to content
Ren edited this page Jul 21, 2022 · 9 revisions

» Home » Development » Using RPKit APIs

In order to use RPKit APIs in your own plugins, first determine what area of functionality you need - since the libraries are modular, you will have to determine which ones you need to use. For example, if you wanted to get character information, you would need to use rpk-character-lib. If you needed to use economy information, you would need to use rpk-economy-lib, and so forth.

Next, add a dependency on the libraries you need - you will need to depend on rpk-core-bukkit, plus any libraries. You do not need a dependency on any of the implementations.

Transitive dependencies (that is, dependencies of dependencies) are not directly exposed, so if you wish to use services included in player-lib, you will need to depend on both player-lib and character-lib rather than character-lib alone.

Gradle Groovy DSL:

repositories {
  maven { url "https://repo.rpkit.com/repository/maven-releases/" }
}

dependencies {
  implementation group: "com.rpkit", name: "rpk-core-bukkit", version: "2.3.2", classifier: "all"
  implementation group: "com.rpkit", name: "rpk-player-lib-bukkit", version: "2.3.2", classifier: "all"
  implementation group: "com.rpkit", name: "rpk-character-lib-bukkit", version: "2.3.2", classifier: "all"
}

Gradle Kotlin DSL:

repositories {
  maven(url = "https://repo.rpkit.com/repository/maven-releases/")
}

dependencies {
  "implementation"(group = "com.rpkit", name = "rpk-core-bukkit", version = "2.3.2", classifier = "all")
  "implementation"(group = "com.rpkit", name = "rpk-player-lib-bukkit", version = "2.3.2", classifier = "all")
  "implementation"(group = "com.rpkit", name = "rpk-character-lib-bukkit", version = "2.3.2", classifier = "all)
}

Maven:

<repositories>
  <repository>
    <id>rpkit-repo</id>
    <url>https://repo.rpkit.com/repository/maven-releases/</url>
  </repository>
</repositories>

<dependencies>
  <dependency>
    <groupId>com.rpkit</groupId>
    <artifactId>rpk-core-bukkit</artifactId>
    <version>2.3.2</version>
    <classifier>all</classifier>
  </dependency>
  <dependency>
    <groupId>com.rpkit</groupId>
    <artifactId>rpk-player-lib-bukkit</artifactId>
    <version>2.3.2</version>
    <classifier>all</classifier>
  </dependency>
  <dependency>
    <groupId>com.rpkit</groupId>
    <artifactId>rpk-character-lib-bukkit</artifactId>
    <version>2.3.2</version>
    <classifier>all</classifier>
  </dependency>
</dependencies>

You can use the Services singleton to access RPKit services. Here's an example join listener that uses information from RPKCharacterService:

public final class PlayerJoinListener implements Listener {
  private final MyPlugin plugin;

  public PlayerJoinListener(MyPlugin plugin) {
    this.plugin = plugin;
  }

  @EventHandler
  public void onPlayerJoin(PlayerJoinEvent event) {
    final RPKMinecraftProfileService minecraftProfileService = Services.INSTANCE.get(RPKMinecraftProfileProvider.class);
    if (minecraftProfileService == null) return;
    final RPKMinecraftProfile minecraftProfile = minecraftProfileProvider.getPreloadedMinecraftProfile(event.getPlayer());
    if (minecraftProfile == null) return;

    final RPKCharacterService characterService = Services.INSTANCE.get(RPKCharacterService.class);
    if (characterService == null) return;
    final RPKCharacter character = characterProvider.getPreloadedActiveCharacter(minecraftProfile);
    if (character == null) return;

    event.getPlayer().sendMessage("Hello, " + character.getName());
  }
}

Data is preloaded on AsyncPlayerPreLoginEvent, so by the time you get to join, any relevant information is already available. For offline players or information that is deemed less relevant, you may use the non-preloaded version of methods (which return CompletableFutures). When using this, be careful not to interact with any Bukkit APIs (beyond, perhaps, sendMessage and schedulers) as modifying game state is not guaranteed to be threadsafe. You can, however, schedule tasks to be run on the main thread to achieve the outcomes you want.

Clone this wiki locally