1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем HogeltBellai, 16 дек 2020.

Метки:
  1. Автор темы
    HogeltBellai

    HogeltBellai Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    HogeltBellai
    Йоу, такой вопрос возник при создания SkyWars..
    У нас есть рандом дроп в честах, но он дублируется и иногда даже в 4х количествах.
    Вот один из примеров:[​IMG]
    Никак не могу придумать что с этим делать.
    Подкиньте идеек или полезных статей пожалуйста.:good:
     
  2. NoooobKa

    NoooobKa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    Вставить условие в код, чтобы вещи не дублировались
     
  3. Автор темы
    HogeltBellai

    HogeltBellai Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    HogeltBellai
    Это хорошо конечно, но там есть ArrayList в котором есть вещи и он на рандоме выбирает итем, я вот ищу способ исправить это.
     
  4. NoooobKa

    NoooobKa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    Залей плагин, скажи пакет и класс
     
  5. Автор темы
    HogeltBellai

    HogeltBellai Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    HogeltBellai
    Код:
    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));
        }
    }
    
     
  6. NoooobKa

    NoooobKa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    Код:
                    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;
                    }
     
  7. Автор темы
    HogeltBellai

    HogeltBellai Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    HogeltBellai
    крашит сервер)
     
  8. Автор темы
    HogeltBellai

    HogeltBellai Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    HogeltBellai
    Всё я исправил, кому нужен код вот:

    Код:
                        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;
                        }
     
  9. NoooobKa

    NoooobKa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    Возможно из-за того, что количество лута в сундуках больше разнообразия самого лута, в итоге получаем бесконечный цикл + краш
     

Поделиться этой страницей