Developer API
Professional License Required
The Developer API is only available with the Professional plan. If you are using the Standard plan, ArcPassProvider.isLoaded() will return false. You can upgrade your license at any time on the License Center.
ArcPass provides a complete API for third-party plugin integration.
API Overview
The ArcPass API module (arcpass-api) is open source under the MIT License.
Features
- Get and modify player data
- Query passes, quests, rewards
- Manage season system
- Listen to events
- Trigger custom quest progress
Documentation
Getting Started
Add dependency and basic usage
Event System
Listen to ArcPass events
Code Examples
Common scenario examples
Quick Start
Add Dependency
Maven
xml
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/KiteMC/ArcPass</url>
</repository>
<dependency>
<groupId>com.kitemc</groupId>
<artifactId>arcpass-api</artifactId>
<version>1.4.1</version>
<scope>provided</scope>
</dependency>Gradle (Kotlin DSL)
kotlin
repositories {
maven {
url = uri("https://maven.pkg.github.com/KiteMC/ArcPass")
}
}
dependencies {
compileOnly("com.kitemc:arcpass-api:1.4.1")
}Get API Instance
java
import com.kitemc.arcpass.api.ArcPassAPI;
import com.kitemc.arcpass.api.ArcPassProvider;
ArcPassAPI api = ArcPassProvider.get();Basic Example
java
// Get player level
api.getPlayerData(player.getUniqueId())
.thenAccept(optionalData -> {
optionalData.ifPresent(data -> {
int level = data.getLevel();
long exp = data.getTotalExperience();
player.sendMessage("Your level: " + level);
});
});
// Give experience
api.addExperience(player.getUniqueId(), 100)
.thenAccept(newTotal -> {
player.sendMessage("Gained 100 XP! Total: " + newTotal);
});API Interface
ArcPassAPI
Main API interface:
java
public interface ArcPassAPI {
// Player data
CompletableFuture<Optional<PlayerData>> getPlayerData(UUID playerId);
PlayerData getPlayerDataIfCached(UUID playerId);
CompletableFuture<Long> addExperience(UUID playerId, long amount);
CompletableFuture<Boolean> claimReward(UUID playerId, int level, String tierId);
// Pass system
Collection<Pass> getPasses();
Optional<Pass> getPass(String passId);
Pass getDefaultPass();
// Quest system
Collection<Quest> getActiveQuests(UUID playerId);
CompletableFuture<Boolean> completeQuest(UUID playerId, String questId);
void triggerCustomEvent(UUID playerId, String eventId, Object data);
// Season system
Optional<Season> getCurrentSeason();
CompletableFuture<Boolean> startNewSeason(String seasonId);
CompletableFuture<Boolean> endSeason();
// Utilities
void reload();
String getVersion();
}Data Models
PlayerData
java
public interface PlayerData {
UUID getPlayerId();
int getLevel();
long getTotalExperience();
long getCurrentLevelExperience();
long getExperienceToNextLevel();
Set<String> getUnlockedTiers();
boolean hasTier(String tierId);
Set<String> getCompletedQuests();
boolean hasCompletedQuest(String questId);
Set<String> getClaimedRewards();
boolean hasClaimedReward(int level, String tierId);
}Pass
java
public interface Pass {
String getId();
String getDisplayName();
List<String> getDescription();
int getMaxLevel();
long getExperienceForLevel(int level);
Collection<PassTier> getTiers();
Optional<PassTier> getTier(String tierId);
Optional<PassLevel> getLevel(int level);
}Quest
java
public interface Quest {
String getId();
String getDisplayName();
String getDescription();
QuestType getType();
int getExperienceReward();
List<QuestObjective> getObjectives();
List<QuestCondition> getConditions();
}Season
java
public interface Season {
String getId();
String getDisplayName();
int getSeasonNumber();
SeasonStatus getStatus();
long getStartTime();
long getEndTime();
long getTimeRemainingSeconds();
boolean isActive();
}Async Operations
ArcPass API uses CompletableFuture for async operations:
java
api.getPlayerData(playerId)
.thenAccept(data -> {
// Process data on async thread
})
.exceptionally(ex -> {
plugin.getLogger().warning("Failed: " + ex.getMessage());
return null;
});
// If main thread needed
api.getPlayerData(playerId)
.thenAccept(data -> {
Bukkit.getScheduler().runTask(plugin, () -> {
// Update UI on main thread
});
});Thread Safety
- API methods can be called from any thread
- Returned data objects are immutable or thread-safe
- CompletableFuture callbacks may execute on any thread