Помогите Баланс в сундуках

HogeltBellai

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
HogeltBellai
Йоу, такой вопрос возник при создания SkyWars..
У нас есть рандом дроп в честах, но он дублируется и иногда даже в 4х количествах.
Вот один из примеров:
image.png

Никак не могу придумать что с этим делать.
Подкиньте идеек или полезных статей пожалуйста.:good:
 
Вставить условие в код, чтобы вещи не дублировались
 
Вставить условие в код, чтобы вещи не дублировались
Это хорошо конечно, но там есть ArrayList в котором есть вещи и он на рандоме выбирает итем, я вот ищу способ исправить это.
 
Залей плагин, скажи пакет и класс
 
Код:
public class ChestListener implements Listener{
  
    public static HashMap<Location, Inventory> chests = new HashMap();
    public static HashMap<Player, Integer> openchests = new HashMap<>();
    private ArrayList<ItemStack> loot = new ArrayList();

    @EventHandler
    public void onChestOpen(PlayerInteractEvent e) {
        try{
        if(Main.chestuse == true){
        Player player = e.getPlayer();
        if(e.getAction() == Action.RIGHT_CLICK_BLOCK && e.getClickedBlock().getType() == Material.CHEST || e.getClickedBlock().getType() == Material.TRAPPED_CHEST){
            e.setCancelled(true);
            if (!chests.containsKey(e.getClickedBlock().getLocation())) {
                registerLoot();
              
                openchests.put(e.getPlayer(), openchests.get(e.getPlayer()) + 1);
                Scoreboard.setScoreboard(e.getPlayer());
                Inventory inv = Bukkit.createInventory(null, 27, "Сундук");
                int i = 0;
                while(i < Utils.rndInt(15, 22)) {
                    inv.setItem(Utils.rndInt(0, inv.getSize() - 1), loot.get(Utils.rndInt(0, loot.size() - 1)));
                    ++i;
                }
                chests.put(e.getClickedBlock().getLocation(), inv);
            }else{
                player.sendMessage(Data.Prefix + "§cУже залутан!");
            }
            e.getPlayer().openInventory(chests.get(e.getClickedBlock().getLocation()));
        }
        }else{
            e.setCancelled(true);
        }
    }catch(Exception e){ }
    }
  
    public void registerLoot() {
        loot.add(Utils.create(Material.MELON, Utils.rndInt(1, 5)));
        loot.add(Utils.create(Material.APPLE, Utils.rndInt(1, 4)));
        loot.add(Utils.create(Material.COOKED_CHICKEN, Utils.rndInt(1, 5)));
        loot.add(Utils.create(Material.CHAINMAIL_LEGGINGS, 1));
        loot.add(Utils.create(Material.COOKED_BEEF, Utils.rndInt(1, 5)));
        loot.add(Utils.create(Material.GOLD_BOOTS, 1));
        loot.add(Utils.create(Material.BOW, 1));
        loot.add(Utils.create(Material.CHAINMAIL_HELMET, 1));
        loot.add(Utils.create(Material.APPLE, Utils.rndInt(1, 4)));
        loot.add(Utils.create(Material.GOLD_CHESTPLATE, 1));
        loot.add(Utils.create(Material.STONE_SWORD, 1));
        loot.add(Utils.create(Material.STONE_AXE, 1));
        loot.add(Utils.create(Material.FISHING_ROD, 1));
        loot.add(Utils.create(Material.IRON_CHESTPLATE, 1));
    }
}
 
Код:
                while(i < Utils.rndInt(15, 22)) {
                    itemstack is = loot.get(Utils.rndInt(0, loot.size() - 1));
                    if (inv.first(is) != -1)continue;
                    inv.setItem(Utils.rndInt(0, inv.getSize() - 1), is);
                    ++i;
                }
 
Всё я исправил, кому нужен код вот:

Код:
                    while(i < randomInt(15, 22)) {
                        ItemStack stack = loots.get(randomInt(0, loots.size() - 1));
                        if(inventory.first(stack) != -1) {
                            inventory.remove(stack);
                        }
                        inventory.setItem(randomInt(0, inventory.getSize() - 1), stack);
                        ++i;
                    }
 
Назад
Верх