- Баллы
- 36
Как и где ты добавляешь игроков и как частицы создаёшь?Не получается, частицы не появляются. В конфиге игроки не заносятся. Я туда занес это:
blooding_players:
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Как и где ты добавляешь игроков и как частицы создаёшь?Не получается, частицы не появляются. В конфиге игроки не заносятся. Я туда занес это:
blooding_players:
@EventHandler
public static void onBlooding(EntityDamageEvent e) {
if(!(e.getEntity() instanceof Player)) return;
Player p = (Player) e.getEntity();
Random r = new Random();
if(r.nextInt(100) <= 50) {
if(e.getCause().equals(DamageCause.ENTITY_ATTACK) && p.getLastDamageCause().getDamage() <= 5.0f) {
MessageManager.getManager().msg(p, MsgType.INFORMATION, "Я получил серьезную рану и из нее течет кровь!");
p.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, Integer.MAX_VALUE, 1));
}
}
}
@EventHandler
public void onMoveBlooding(PlayerMoveEvent e) {
Player p = e.getPlayer();
if(plugin.blooding_players.contains(e.getPlayer().getName())) {
p.playEffect(p.getLocation(), Effect.HEART, 50);
}
}
plugin.blooding_players.add(p.getName());
plugin.blooding_players.remove(p.getName());
...public static void onBlooding(EntityDamageEvent e) {
@EventHandler
public void onBlooding(EntityDamageEvent e) {
if(!(e.getEntity() instanceof Player)) return;
Player p = (Player) e.getEntity();
Random r = new Random();
if(r.nextInt(100) <= 50) {
if(e.getCause().equals(DamageCause.ENTITY_ATTACK) && p.getLastDamageCause().getDamage() <= 5.0f) {
MessageManager.getManager().msg(p, MsgType.INFORMATION, "Я получил серьезную рану и из нее течет кровь!");
plugin.blooding_players.add(p.getName());
p.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, Integer.MAX_VALUE, 1));
}
}
}
@EventHandler
public void onMoveBlooding(PlayerMoveEvent e) {
Player p = e.getPlayer();
if(plugin.blooding_players.contains(e.getPlayer().getName())) {
p.playEffect(p.getLocation(), Effect.HEART, 50);
}
}
Эм...Что за уебищное решение? В жабе удалили хешмап?![]()
А зачем тут хешмэп, если можно юзать ArrayList. Чем он лучше?Вот пример.
HashMap<Player, Boolean> effect = new HashMap<Player, Boolean>();
..............
effect.put(e.getPlayer(), true);
..............
effect.get(e.getPlayer());
..............
effect.remove(e.getPlayer());
В удобстве и тем что можно повесить на игрока не 1 эффект.А зачем тут хешмэп, если можно юзать ArrayList. Чем он лучше?
Если с использованием конструктора, то this.plugin.mapuser.get() и тп.Соглашусь, но как мне его добавить? Ввел его в самое начало в мейн класс, назвал blooding_players.
В ивентах не знаю, какую строчку внести. Все строчки ругаются, что не могут вытянуть игрока, пытался вытянуть, но не вышло
От греха подальше лучше хранить UUID игрока.Почему бы не ArrayList<Player> ?
@EventHandler
public void onBlooding(EntityDamageEvent e) {
if(!(e.getEntity() instanceof Player)) return;
Player p = (Player) e.getEntity();
Random r = new Random();
HashMap blooding_players = API.blooding_players;
if(r.nextInt(100) <= 50) {
if(e.getCause().equals(DamageCause.ENTITY_ATTACK) && p.getLastDamageCause().getDamage() <= 5.0f) {
MessageManager.getManager().msg(p, MsgType.INFORMATION, "Я получил серьезную рану и из нее течет кровь!");
this.plugin.blooding_players.get(p.getPlayer().getName());
p.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, Integer.MAX_VALUE, 1));
}
}
}
Поправил недочеты, что надо внести во второй аргумент?Минимальное замечание 1: Random r = new Random(); можно разместить снаружи метода-обработчика, в теле содержащего класса, пометив private final. Не будет необходимости каждый раз создавать новый объект в памяти.
Минимальное замечание 2: Зачем тебе лишняя ссылка HashMap blooding_players = API.blooding_players;, её можно смело убрать. Они нигде ниже не используется.
Минимальное замечание 3: Random::nextInt(n) возвращает случайное число в пределах [0; n), поэтому, чтобы на множестве сравнений было 50:50, а не по факту 49:51, нужно делать сравнение "строго меньше" (... < 50).
Критическая ошибка 1: this.plugin.blooding_players.get(p.getPlayer().getName()); пытается получить из HashMap объект, которому соответствует ключ = имени игрока. Результат никуда не присваивается и игнорируется, строчка имеет абсолютно нулевое значение. Предполагаю, что ТС хотел всё-таки добавить игрока в карту, но ошибся, написав get вместо put (или add).
Ну я всё-таки склоняюсь к тому, чтобы хранить не имя игрока, а либо его uniqueId(), либо сам объект Player, но это всё-таки решение ТС-а.
@EventHandler
public void onBlooding(EntityDamageEvent e) {
if(!(e.getEntity() instanceof Player)) return;
Player p = (Player) e.getEntity();
if(r.nextInt(100) <= 50) {
if(e.getCause().equals(DamageCause.ENTITY_ATTACK) && p.getLastDamageCause().getDamage() <= 5.0f) {
MessageManager.getManager().msg(p, MsgType.INFORMATION, "Я получил серьезную рану и из нее течет кровь!");
plugin.blooding_players.put(p, "blood");
p.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, Integer.MAX_VALUE, 1));
}
}
}
@EventHandler
public void onMoveBlooding(PlayerMoveEvent e) {
Player p = e.getPlayer();
if(plugin.blooding_players.containsKey(p)) {
plugin.blooding_players.get(p);
p.playEffect(p.getLocation(), Effect.HEART, 50);
}
}