• Chào bạn, hãy đăng ký hoặc đăng nhập để tham gia cùng bọn mình và sử dụng được đầy đủ chức năng của diễn đàn :).
V

Java Check số lượng vật phẩm

Đây là class để lấy Item từ Inventory và xoá item đó

Nếu xài class này thì lấy ra và xoá theo các bước
- Lấy List Item từ Inventory qua hàm #getMatchedItemsInInventory
- Kiểm tra gì gì đó ở cái List
- Xoá bằng hàm #removeItemInInventory
 
Đây là class để lấy Item từ Inventory và xoá item đó

Nếu xài class này thì lấy ra và xoá theo các bước
- Lấy List Item từ Inventory qua hàm #getMatchedItemsInInventory
- Kiểm tra gì gì đó ở cái List
- Xoá bằng hàm #removeItemInInventory


Cảm ơn 2 ông nhưng tui thử đi thử lại vẫn không được, tui nghĩ vấn đề ở chỗ này
39148


Check inventory thì 2 stack tách ra còn khi check item để remove thì lại x128
 
#getContents() nó trả về tất cả itemstack cùng loại cho nên sẽ có Item có amount là x128.
Còn trường hợp của OP thì không cần loop cả cái mảng đó, gọi #removeItem(ItemStack item) trong Inventory là xong.
 
#getContents() nó trả về tất cả itemstack cùng loại cho nên sẽ có Item có amount là x128.
Còn trường hợp của OP thì không cần loop cả cái mảng đó, gọi #removeItem(ItemStack item) trong Inventory là xong.
cảm ơn anh, để em thử
 
Check số lượng vật phẩm cần lấy thì xài:
Java:
    public static int getPlayerAmount(HumanEntity player, ItemStack item) {
        final PlayerInventory inv = player.getInventory();
        final ItemStack[] items = inv.getContents();
        int c = 0;
        for (final ItemStack is : items) {
            if (is != null) {
                if (is.isSimilar(item)) {
                    c += is.getAmount();
                }
            }
        }
        return c;
    }

Muốn lấy vật phẩm đó ra thì xài:
Java:
    public static void removeItems(Player player, ItemStack item, long amount) {
        item = item.clone();
        final PlayerInventory inv = player.getInventory();
        final ItemStack[] items = inv.getContents();
        int c = 0;
        for (int i = 0; i < items.length; ++i) {
            final ItemStack is = items[i];
            if (is != null) {
                if (is.isSimilar(item)) {
                    if (c + is.getAmount() > amount) {
                        final long canDelete = amount - c;
                        is.setAmount((int) (is.getAmount() - canDelete));
                        items[i] = is;
                        break;
                    }
                    c += is.getAmount();
                    items[i] = null;
                }
            }
        }
        inv.setContents(items);
        player.updateInventory();
    }

Xài getPlayerAmount để lấy số lượng vật phẩm đó trước rồi xài removeItems để xóa tất cả hoặc có thể nhập số lượng tùy thích
 
Similar content Most view Xem thêm
Back
Top Bottom