API: Order Management
Methods for creating, retrieving, and managing orders.
Creating Orders
createOrder
Create a new order programmatically.
Signature:
CompletableFuture<Order> createOrder(
UUID playerUuid,
String playerName,
List<OrderItem> items
)
Parameters:
playerUuid- UUID of the player creating the orderplayerName- Name of the player (for display)items- List of order items (typically one item per order)
Returns: CompletableFuture<Order> - The created order, or null if creation failed
Example:
// Create order item
OrderItem item = new OrderItem(Material.DIAMOND, 64, 100.0);
// Create order
CompletableFuture<Order> future = ordersAPI.createOrder(
player.getUniqueId(),
player.getName(),
Collections.singletonList(item)
);
future.thenAccept(order -> {
if (order != null) {
player.sendMessage("Order #" + order.getId() + " created!");
} else {
player.sendMessage("Failed to create order!");
}
});
Notes:
- Order creation is subject to all normal restrictions (limits, cooldowns, blacklist)
- Payment is handled automatically (escrow system)
- Order expiration is set based on configuration
Retrieving Orders
getOrder
Get an order by ID.
Signature:
CompletableFuture<Order> getOrder(int orderId)
Parameters:
orderId- The order ID
Returns: CompletableFuture<Order> - The order, or null if not found
Example:
CompletableFuture<Order> future = ordersAPI.getOrder(1);
future.thenAccept(order -> {
if (order != null) {
getLogger().info("Order #" + order.getId() +
" by " + order.getPlayerName());
}
});
getActiveOrders
Get all active orders (PENDING or IN_PROGRESS).
Signature:
CompletableFuture<List<Order>> getActiveOrders()
Returns: CompletableFuture<List<Order>> - List of active orders
Example:
CompletableFuture<List<Order>> future = ordersAPI.getActiveOrders();
future.thenAccept(orders -> {
getLogger().info("Found " + orders.size() + " active orders");
for (Order order : orders) {
getLogger().info("Order #" + order.getId() +
": " + order.getItems().get(0).getMaterial());
}
});
getOrdersByPlayer
Get all orders created by a specific player.
Signature:
CompletableFuture<List<Order>> getOrdersByPlayer(UUID playerUuid)
Parameters:
playerUuid- UUID of the player
Returns: CompletableFuture<List<Order>> - List of player's orders
Example:
CompletableFuture<List<Order>> future = ordersAPI.getOrdersByPlayer(
player.getUniqueId()
);
future.thenAccept(orders -> {
long activeCount = orders.stream()
.filter(o -> o.getStatus() == OrderStatus.PENDING ||
o.getStatus() == OrderStatus.IN_PROGRESS)
.count();
player.sendMessage("You have " + activeCount + " active orders");
});
getOrdersByStatus
Get all orders with a specific status.
Signature:
CompletableFuture<List<Order>> getOrdersByStatus(OrderStatus status)
Parameters:
status- The order status to filter by
Returns: CompletableFuture<List<Order>> - List of orders with that status
Example:
CompletableFuture<List<Order>> future = ordersAPI.getOrdersByStatus(
OrderStatus.PENDING
);
future.thenAccept(orders -> {
getLogger().info("Found " + orders.size() + " pending orders");
});
Cancelling Orders
cancelOrder
Cancel an order (only if owned by the player).
Signature:
CompletableFuture<Boolean> cancelOrder(int orderId, UUID playerUuid)
Parameters:
orderId- The order ID to cancelplayerUuid- UUID of the player attempting to cancel
Returns: CompletableFuture<Boolean> - true if cancelled successfully
Example:
CompletableFuture<Boolean> future = ordersAPI.cancelOrder(
orderId,
player.getUniqueId()
);
future.thenAccept(success -> {
if (success) {
player.sendMessage("Order cancelled!");
} else {
player.sendMessage("Failed to cancel order!");
}
});
Notes:
- Only order owner can cancel (unless admin)
- Subject to cancellation restrictions (deliveries, time limits)
- Auto-refund occurs if enabled
Deleting Orders
deleteOrder
Delete an order (admin function).
Signature:
CompletableFuture<Boolean> deleteOrder(int orderId)
Parameters:
orderId- The order ID to delete
Returns: CompletableFuture<Boolean> - true if deleted successfully
Example:
CompletableFuture<Boolean> future = ordersAPI.deleteOrder(orderId);
future.thenAccept(success -> {
if (success) {
getLogger().info("Order #" + orderId + " deleted");
}
});
Warning: This action is irreversible! No refund is processed.
Order Model
Order Class
public class Order {
int getId();
UUID getPlayerUuid();
String getPlayerName();
OrderStatus getStatus();
double getTotalPrice();
double getEscrowBalance();
double getPaidToDeliverers();
int getPriority();
LocalDateTime getCreatedAt();
LocalDateTime getExpiresAt();
LocalDateTime getCompletedAt();
List<OrderItem> getItems();
// Helper methods
boolean isExpired();
boolean isCompleted();
boolean isCancelled();
boolean allItemsDelivered();
boolean allItemsCollected();
boolean allItemsPaid();
}
OrderItem Class
public class OrderItem {
int getId();
int getOrderId();
Material getMaterial();
int getAmount();
double getPricePerItem();
double getTotalPrice();
int getDelivered();
int getCollected();
int getPaid();
Map<String, Integer> getEnchantments();
String getCustomItemId();
// Helper methods
boolean isFullyDelivered();
boolean isFullyCollected();
boolean isFullyPaid();
int getRemainingToDeliver();
int getRemainingToCollect();
int getRemainingToPay();
}
OrderStatus Enum
public enum OrderStatus {
PENDING,
IN_PROGRESS,
DELIVERED,
COMPLETED,
CANCELLED
}
Best Practices
- Handle Null Returns: Always check for
nullwhen getting orders - Use CompletableFuture: Handle async operations properly
- Error Handling: Check return values for success/failure
- Validate Input: Validate order IDs and player UUIDs
- Respect Permissions: Don't bypass permission checks
Related Documentation
- Item Management - Work with items
- Economy Operations - Handle payments
- Getting Started - API setup guide