Skip to main content

API: Statistics

Methods for retrieving player order statistics.

Get Statistics

getPlayerStatistics

Get player order statistics.

Signature:

CompletableFuture<PlayerStats> getPlayerStatistics(UUID playerUuid)

Parameters:

  • playerUuid - UUID of the player

Returns: CompletableFuture<PlayerStats> - Player statistics

Example:

CompletableFuture<PlayerStats> future = ordersAPI.getPlayerStatistics(
player.getUniqueId()
);

future.thenAccept(stats -> {
if (stats == null || !stats.hasActivity()) {
player.sendMessage("No statistics available");
return;
}

player.sendMessage("Orders Created: " + stats.getOrdersCreated());
player.sendMessage("Orders Fulfilled: " + stats.getOrdersFulfilled());
player.sendMessage("Items Delivered: " + stats.getItemsDelivered());
player.sendMessage("Total Spent: " + ordersAPI.formatCurrency(stats.getTotalSpent()));
player.sendMessage("Total Earned: " + ordersAPI.formatCurrency(stats.getTotalEarned()));
});

PlayerStats Class

Methods

public class PlayerStats {
int getOrdersCreated(); // Number of orders created
int getOrdersFulfilled(); // Number of orders fulfilled
int getItemsDelivered(); // Total items delivered
double getTotalSpent(); // Total money spent
double getTotalEarned(); // Total money earned
boolean hasActivity(); // Has any activity
}

Statistics Explained

Orders Created:

  • Total number of orders created by player
  • Includes all statuses (pending, completed, cancelled)

Orders Fulfilled:

  • Number of distinct orders player has delivered to
  • Counts unique orders, not deliveries

Items Delivered:

  • Total quantity of items delivered
  • Sum of all items delivered across all orders

Total Spent:

  • Total money spent on orders
  • Sum of all order prices created

Total Earned:

  • Total money earned from deliveries
  • Sum of all payments received

Complete Example

// Get statistics
CompletableFuture<PlayerStats> future = ordersAPI.getPlayerStatistics(
player.getUniqueId()
);

future.thenAccept(stats -> {
if (stats == null) {
player.sendMessage("Failed to load statistics");
return;
}

if (!stats.hasActivity()) {
player.sendMessage("No order activity yet!");
return;
}

// Format statistics
player.sendMessage("=== Order Statistics ===");
player.sendMessage("Orders Created: " + stats.getOrdersCreated());
player.sendMessage("Orders Fulfilled: " + stats.getOrdersFulfilled());
player.sendMessage("Items Delivered: " + stats.getItemsDelivered());
player.sendMessage("Total Spent: " +
ordersAPI.formatCurrency(stats.getTotalSpent()));
player.sendMessage("Total Earned: " +
ordersAPI.formatCurrency(stats.getTotalEarned()));

// Calculate profit
double profit = stats.getTotalEarned() - stats.getTotalSpent();
player.sendMessage("Net Profit: " +
ordersAPI.formatCurrency(profit));
});

Best Practices

  1. Check for Activity: Use hasActivity() before displaying
  2. Handle Null: Always check for null return
  3. Format Currency: Use formatCurrency() for money
  4. Async Handling: Handle CompletableFuture properly
  5. Error Handling: Handle potential errors