Skip to content

API and Integrations

Zoriot edited this page Nov 8, 2026 · 1 revision

API & Integrations

Plot System ships a standalone plot-system-api Java library for external plugins (reminders, Discord bots, dashboards, etc.). The main plugin implements the API and publishes Bukkit events / a service at runtime.

Included in Plot System v5.3+. The API artifact is published with core releases.

Maven

Repository: https://mvn.alps-bte.com/repository/alps-bte/

<dependency>
  <groupId>com.alpsbte</groupId>
  <artifactId>plot-system-api</artifactId>
  <version>5.3.0</version> <!-- match your Plot System version -->
  <scope>provided</scope>
</dependency>

Gradle:

repositories {
    maven("https://mvn.alps-bte.com/repository/alps-bte/")
}
dependencies {
    compileOnly("com.alpsbte:plot-system-api:5.3.0")
}

Lifecycle events

Observe-only (not cancellable). Tutorial plots are out of scope.

Event When
PlotCreatedEvent Plot claimed / created
PlotSubmittedEvent Submitted for review
PlotSubmissionUndoneEvent Submission undone
PlotReviewedEvent Accepted
PlotRejectedEvent Rejected
PlotReviewUndoneEvent Review undone
PlotFeedbackUpdatedEvent Feedback edited
PlotAbandonedEvent Abandoned
PlotArchivedEvent Archived (with abandon)
PlotStatusChangedEvent Status change
PlotActivityChangedEvent Owner activity / last-visit update

Notification veto

PlotNotificationIntentEvent is cancellable. Plot System does not fire it — integrations that send notifications should fire it on the server thread immediately before delivery and skip sending when cancelled. Use this so other plugins can veto spam without cancelling plot work.

Reasons include submitted, inactivity, abandoned, created, etc. (PlotNotificationReason).

There is no PlotInactivityWarningEvent. Inactivity reminders are owned by integrations; config inactivity-interval only controls abandonment eligibility.

PlotSnapshotProvider

Registered on Bukkit ServicesManager:

PlotSnapshotProvider provider = Bukkit.getServicesManager()
    .load(PlotSnapshotProvider.class);

Optional<PlotSnapshot> plot = provider.getPlotSnapshot(id);
List<PlotSnapshot> unfinished = provider.getPlotSnapshots(PlotStatus.UNFINISHED);

Lookups are blocking DB reads — call them off the main thread. Use them to reconcile reminder schedules on startup and before delivery; re-fetch after activity/status events. Models include PlotSnapshot, ReviewSnapshot, PlotStatus, PlotType, PlotDifficulty, PlotAbandonReason, PlotReviewOutcome.

Guidance

  1. Register listeners before enumerating snapshots on startup.
  2. Persist your own reminder schedules; do not rely on Plot System for delivery timing.
  3. Reschedule on PlotActivityChangedEvent / PlotStatusChangedEvent.
  4. Fire PlotNotificationIntentEvent before any player-facing notification you own.

Clone this wiki locally