API: Item Management
Methods for validating and working with items.
Item Validation
validateItem
Validate if an item matches order requirements.
Signature:
boolean validateItem(ItemStack item, OrderItem orderItem)
Parameters:
item- The item to validateorderItem- The order item to match against
Returns: true if item matches, false otherwise
Example:
OrderItem orderItem = order.getItems().get(0);
ItemStack playerItem = player.getInventory().getItemInMainHand();
if (ordersAPI.validateItem(playerItem, orderItem)) {
// Item matches order requirements
player.sendMessage("Item is valid for this order!");
} else {
// Item doesn't match
player.sendMessage("Item doesn't match order requirements!");
}
Validation Checks:
- Material matches
- Enchantments match (if specified)
- Custom item ID matches (if ItemsAdder item)
NBT Data
hasNBTData
Check if an item has NBT data.
Signature:
boolean hasNBTData(ItemStack item)
Parameters:
item- The item to check
Returns: true if item has NBT data, false otherwise
Example:
ItemStack item = player.getInventory().getItemInMainHand();
if (ordersAPI.hasNBTData(item)) {
// Item has custom name, lore, enchantments, etc.
player.sendMessage("Item has NBT data!");
}
Inventory Operations
countItems
Count items of a specific material in an inventory.
Signature:
int countItems(Inventory inventory, Material material)
Parameters:
inventory- The inventory to checkmaterial- The material to count
Returns: Total count of items
Example:
int diamondCount = ordersAPI.countItems(
player.getInventory(),
Material.DIAMOND
);
player.sendMessage("You have " + diamondCount + " diamonds");
removeItems
Remove items from an inventory.
Signature:
int removeItems(Inventory inventory, Material material, int amount)
Parameters:
inventory- The inventory to remove frommaterial- The material to removeamount- Amount to remove
Returns: Amount actually removed
Example:
int removed = ordersAPI.removeItems(
player.getInventory(),
Material.DIAMOND,
64
);
if (removed == 64) {
player.sendMessage("Removed 64 diamonds");
} else {
player.sendMessage("Only removed " + removed + " diamonds");
}
Complete Example
// Get order
CompletableFuture<Order> orderFuture = ordersAPI.getOrder(orderId);
orderFuture.thenAccept(order -> {
if (order == null) {
player.sendMessage("Order not found!");
return;
}
OrderItem orderItem = order.getItems().get(0);
Inventory inventory = player.getInventory();
// Count available items
int available = ordersAPI.countItems(
inventory,
orderItem.getMaterial()
);
if (available < orderItem.getAmount()) {
player.sendMessage("Not enough items! Need " +
orderItem.getAmount() + ", have " + available);
return;
}
// Validate item
ItemStack item = inventory.getItemInMainHand();
if (!ordersAPI.validateItem(item, orderItem)) {
player.sendMessage("Item doesn't match order!");
return;
}
// Remove items
int removed = ordersAPI.removeItems(
inventory,
orderItem.getMaterial(),
orderItem.getAmount()
);
// Deliver items
ordersAPI.deliverItems(
orderId,
orderItem.getId(),
removed,
player.getUniqueId(),
player.getName()
).thenAccept(success -> {
if (success) {
player.sendMessage("Delivered " + removed + " items!");
}
});
});
Best Practices
- Validate Before Operations: Always validate items before processing
- Check Inventory: Verify items exist before removal
- Handle Partial Removal:
removeItemsmay remove less than requested - NBT Awareness: Be aware of NBT data when validating items
- Error Handling: Handle validation failures gracefully
Related Documentation
- Order Management - Order operations
- Economy Operations - Economy operations