Delivery System
How the delivery system works in SigmaOrders.
Overviewโ
Players can fulfill orders by delivering the requested items. The system supports partial deliveries, allowing multiple players to contribute to large orders.
Delivery Processโ
1. Find an Orderโ
Players can find orders to deliver:
- Browse
/ordersGUI - Use
/orders listcommand - Search with
/orders search <query>
2. Start Deliveryโ
/orders deliver <order-id>
This opens the delivery GUI showing:
- Required items
- Quantity needed
- Price per item
- Current delivery status
3. Select Itemsโ
- Items are selected from inventory
- System validates items match order requirements
- Supports NBT items (enchantments, custom names, etc.)
4. Complete Deliveryโ
- Items are removed from inventory
- Delivery recorded in database
- Payment made to deliverer (if pay-on-delivery enabled)
- Order status updated
Partial Deliveriesโ
Multiple players can deliver to the same order:
Order: 64 diamonds needed
- Player A delivers 32 diamonds โ 32 remaining
- Player B delivers 16 diamonds โ 16 remaining
- Player C delivers 16 diamonds โ Order complete
Each deliverer is paid proportionally to their delivery.
Concurrent Delivery Protectionโ
The system uses optimistic locking to prevent:
- Over-delivery (delivering more than needed)
- Race conditions (multiple players delivering simultaneously)
- Data corruption
Delivery System Improvements (v1.0.3)โ
Recent improvements to the delivery system:
- Fixed Double Item Return: Prevents double item return on delivery failure - now only returns consumed items, not all items including excess
- Fixed Stale Delivery Data: Delivery count now reads directly from database, preventing first delivery failures caused by stale OrderItem object data
- Improved Reliability: More reliable delivery tracking with direct database reads