Помогите Как создать и перебрать список с EntityId

  • Автор темы Автор темы slime_j
  • Дата начала Дата начала

slime_j

Участник
Пользователь
Баллы
36
Имя в Minecraft
slime_j
Привет) Я новичок в создании плагинов для майна, хочу понять, как создать индивидуальный список с id мобов для какого-то игрока а затем перебирать его при событии EntityDamageByEntityEvent
Коротко о моей цели:
Когда игрок бьет какого-то моба для игрока добавляется на некоторое время BossBar с именем моба и setProgres(health). Когда игрок бьет нескольких мобов, то появляется несколько боссбаров, если игрок не бьет моба 5 секунд то боссбар пропадает.
 
HashSet<UUID> или HashSet<Entity>, если не планируешь хранить списки сущностей на диске и в БД.
Для проверки наличия в списке Set#contains(element).
А боссбары с использованием шедулера
 
HashSet<UUID> или HashSet<Entity>, если не планируешь хранить списки сущностей на диске и в БД.
Для проверки наличия в списке Set#contains(element).
А боссбары с использованием шедулера
Код:
public static HashMap<Entity, Integer> IdHashMap = new HashMap<>();
    public String name;
    private int task;   
    private int task2;
    private Entity entity;
    @SuppressWarnings("deprecation")
    @EventHandler
    public void onDamage(EntityDamageByEntityEvent event) {
        this.entity = event.getEntity();
        if(IdHashMap.get(entity) == event.getEntity().getEntityId()) {
            return;
        }else {
            IdHashMap.put(entity, event.getEntity().getEntityId());
        }
        if(event.getEntity() instanceof Monster||event.getEntity() instanceof Player||event.getEntity() instanceof Animals) {
            if(name!=null) {
                if(name.equals(event.getEntity().getName())) return;
            }
            Player player = (Player) event.getDamager();
            Entity entity = event.getEntity();
            
            name = entity.getName();
            if(entity instanceof Monster|| entity instanceof Player|| entity instanceof Animals) {
                Location loc = new Location(entity.getLocation().getWorld(), entity.getLocation().getX(), entity.getLocation().getY(), entity.getLocation().getZ());
                double HP = (int) ((Monster) event.getEntity()).getHealth();
                double MAXHP = (int) ((Monster) event.getEntity()).getMaxHealth();
                if(event.getDamager()==player) {
                    BossBar bossBar = Bukkit.getServer().createBossBar(entity.getName() + (ChatColor.RED + "" +  HP + "/" + MAXHP), BarColor.RED, BarStyle.SOLID);
                    bossBar.addPlayer(player);
                    task = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInstance(), () ->{
                        task2 = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInstance(), ()->{
                            if(entity.getLocation()==loc) {
                            Bukkit.getScheduler().cancelTask(task);
                            Bukkit.getScheduler().cancelTask(task2);
                            bossBar.setVisible(false);
                            }
                        },3*20,3*20);
                        if(!entity.isDead()) {
                            bossBar.setProgress(((Damageable) entity).getHealth() / ((Damageable) entity).getMaxHealth());
                            bossBar.setTitle(entity.getName() + (ChatColor.RED + "" +  HP + "/" + MAXHP));
                        }else {
                            List<Player> players = bossBar.getPlayers();
                            for (Player player1 : players) {
                                bossBar.removePlayer(player1);
                            }
                            bossBar.setVisible(false);
                            Bukkit.getScheduler().cancelTask(task);
                        }
                    },0,10);
                        
                }
            }
        }
        
    }
Никак не пойму в чем ошибка... Полагаю в плохом знании джабы, можешь помочь?
 
А зачем так?
Я бы создал так:
Код:
HashMap<Player, HashSet<Entity>>
и уже работать с этим контенером.
Ну да. Кажется, я неверно понял задачу.
Если список индивидуальный - должно быть как раз так.

Никак не пойму в чем ошибка... Полагаю в плохом знании джабы, можешь помочь?
Я не могу сейчас досконально проверить код.
В чём конкретно ошибка заключается? Код не компилируется или выполняется, но не приводит к нужному результату?
 
Назад
Верх