Repository navigation
Developer API
OPaperStream edited this page Oct 9, 2026
·
4 revisions
The API is the normal Velocity API plus the PaperProxy extras. It is MIT licensed. Plugins that use it need Java 25, like current Velocity.
Gradle (Kotlin DSL):
repositories {
mavenCentral()
maven("https://repo.papermc.io/repository/maven-public/") // Velocity's Brigadier
maven("https://codeberg.org/api/packages/LucasTHCR/maven")
}
dependencies {
compileOnly("net.paperstream:paperproxy-api:1.2.2-RELEASE")
annotationProcessor("net.paperstream:paperproxy-api:1.2.2-RELEASE")
}Maven:
<repositories>
<repository>
<id>papermc</id>
<url>https://repo.papermc.io/repository/maven-public/</url>
</repository>
<repository>
<id>paperproxy</id>
<url>https://codeberg.org/api/packages/LucasTHCR/maven</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>net.paperstream</groupId>
<artifactId>paperproxy-api</artifactId>
<version>1.2.2-RELEASE</version>
<scope>provided</scope>
</dependency>
</dependencies>The artifact contains the full Velocity API, so you do not need velocity-api as well.
PaperProxy pp = PaperProxy.get();
pp.getClientVersion(player); // "1.21.4"
pp.getMessage("myplugin.welcome", "player", name); // text from messages.yml
pp.isOnline("survival"); // health check result
pp.isMaintenance("survival");
pp.getForwardingMode("survival"); // "modern", "paperguard", ...
pp.async(() -> database.save(player));Needs PaperProxy 1.2.0 or newer.
PartyManager parties = PaperProxy.get().getParties();
Party party = parties.create(leader);
parties.addMember(party, player); // false if full or already in a party
parties.setLeader(party, otherMember);
parties.removeMember(player);
parties.disband(party);
parties.getParty(player).ifPresent(p -> {
p.getLeader();
p.getMembers(); // leader first
p.sendMessage(Component.text("Ready?"));
});Register them like any Velocity event with @Subscribe.
| Event | When |
|---|---|
BackendHealthChangeEvent |
a backend goes offline or comes back |
ClientVersionDeniedEvent |
a client version is refused for a server |
PluginRuntimeChangeEvent |
a plugin was reloaded, loaded or unloaded at runtime |
PartyJoinEvent |
a player joined a party (also the leader of a new one) |
PartyLeaveEvent |
a player left, with the reason LEFT, KICKED, DISCONNECTED or DISBANDED
|
PartyFollowEvent |
a member is about to follow the leader. Cancel it to keep them where they are, for example during a minigame round |
@Subscribe
public void onFollow(PartyFollowEvent event) {
if (game.isRunning(event.getMember())) {
event.setCancelled(true);
}
}On plain Velocity the PaperProxy classes do not exist. Check before you touch them:
boolean paperProxy;
try {
Class.forName("net.paperstream.paperproxy.api.PaperProxy");
paperProxy = true;
} catch (ClassNotFoundException e) {
paperProxy = false;
}