if (p.getInventory().containsAtLeast(Voucher.voucher,1)) {
p.getInventory().remove(Voucher.voucher);
SlotMachine.drawLottery(p);
我要判断玩家的背包内是否有兑换券(Voucher.voucher),在判断的时候可以使用containsAtLeast方法,能够正确判断,但是在扣除兑换券的时候,使用remove只能扣除单个堆叠的兑换券,如果玩家有两个以上堆叠起来的兑换券则扣除不了,求大佬支招!
p.getInventory().remove(Voucher.voucher);
SlotMachine.drawLottery(p);
我要判断玩家的背包内是否有兑换券(Voucher.voucher),在判断的时候可以使用containsAtLeast方法,能够正确判断,但是在扣除兑换券的时候,使用remove只能扣除单个堆叠的兑换券,如果玩家有两个以上堆叠起来的兑换券则扣除不了,求大佬支招!
用Inventory的all()方法?提供物品的material,返回Map<Integer,ItemStack>,然后遍历每个key去比对,如果特征符合并数量是1就清空改slot并退出循环,如果特征符合并数量大于1就数量减一退出循环
qazwsxqweasdzx 发表于 2021-10-16 12:26
用Inventory的all()方法?提供物品的material,返回Map,然后遍历每个key去比对,如果特征符合并数量是1就 ...
原版的clear貌似只比对了material
qazwsxqweasdzx 发表于 2021-10-16 12:26
用Inventory的all()方法?提供物品的material,返回Map,然后遍历每个key去比对,如果特征符合并数量是1就 ...
多谢!我也想到过这个方法的,就不知道有没有更简便的,所以来问问看。谢谢!
Fabric的映射表下PlayerInventory有一个removeOne方法,可以移除一个物品,但是不知道Forge里这叫什么😂……
4399123 发表于 2021-10-16 14:21
多谢!我也想到过这个方法的,就不知道有没有更简便的,所以来问问看。谢谢! ...
不要太寄希望于bukkit把方法都提供好,毕竟bukkit想实现这个也是得遍历,你遍历跟他遍历没太大区别
看一下设置那些啥的
脚本插件!
qazwsxqweasdzx 发表于 2021-10-16 12:26
用Inventory的all()方法?提供物品的material,返回Map,然后遍历每个key去比对,如果特征符合并数量是1就 ...
巧了 我也和他一样
大佬你看我这样写成吗
- HashMap<Integer, ItemStack> c = (HashMap<Integer, ItemStack>) inventory.all(itemStack);
- for (Integer A:c.keySet()){
- if(c.get(A).isSimilar(itemStack)){
- if(c.get(A).getAmount() >= 1){
- int a = c.get(A).getAmount();
- c.get(A).setAmount(a-1);
- }else{
微笑大人 发表于 2021-12-3 20:01
巧了 我也和他一样
大佬你看我这样写成吗
- HashMap<Integer, ItemStack> c = (HashMap<Integer, ItemStack>) inventory.all(itemStack);
- for (Integer A:c.keySet()){
- if(c.get(A).isSimilar(itemStack)){
- if(c.get(A).getAmount() > 1){
- int a = c.get(A).getAmount();
- c.get(A).setAmount(a-1);
- }else{
- player.getInventory().remove(c.get(A));
- }
- }
- }