• Trong thời gian này, bạn không thể tạo bài mới, đăng comment, hay tạo tài nguyên mới để diễn đàn dọn dẹp nội dung.
    Diễn đàn sẽ sớm mở trở lại, chi tiết hãy theo dõi tại Discord
V

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

  • Người tạo chủ đề Người tạo chủ đề VoChiDanh
  • Ngày gửi Ngày gửi
Đâ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
 
Nội dung tương tự Xem nhiều nhất Xem thêm

Thống kê nội dung

Tạo
VoChiDanh,
Trả lời lần cuối từ
Cortez Romeo,
Trả lời
8
Lượt xem
1,559
Quay lại
Trên cùng