Lookups
Available in Prism 4.4 and above.
Prism allows you to easily build queries without writing any SQL. Prism’s lookup convenince method passes your query object to the storage service and executes it on an async thread.
// Query the last 5 sprint-toggle activities
var query = PaperActivityQuery.builder()
.actionTypeKeys(List.of("sprint-toggle"))
.grouped(false)
.limit(5)
.build();
prism
.lookup(query)
.whenComplete((results, error) -> {
if (error != null) {
sender.sendMessage("Query failed: " + error.getMessage());
return;
}
if (results.isEmpty()) {
sender.sendMessage("No sprint-toggle activities found.");
return;
}
for (Activity activity : results) {
sender.sendMessage(" - " + activity.action().descriptor() + " at " + activity.coordinate());
}
});Direct Querying
If you need finer control over which thread your query runs on, you can use the storageAdapter directly. We strongly advise you run it on an async thread to avoid blocking the main server thread.
// Run on an async thread to avoid blocking the game server
Bukkit.getAsyncScheduler()
.runNow(this, task -> {
try {
// Query the last 5 sprint-toggle activities
var query = PaperActivityQuery.builder()
.actionTypeKeys(List.of("sprint-toggle"))
.grouped(false)
.limit(5)
.build();
// Pass to the storage adapter to execute
List<Activity> results = prism.storageAdapter().queryActivities(query);
sender.sendMessage("Last " + results.size() + " sprint-toggle activities:");
for (Activity activity : results) {
sender.sendMessage(" - " + activity.action().descriptor() + " at " + activity.coordinate());
}
} catch (Exception e) {
// handle error
}
});