- Баллы
- 76
В общем, я не могу получить то, сколько именно секунд эффекта было выдано каждому игроку отдельно при PotionSplashEvent. Нужно, чтобы если у игрока на голове был шлем, то эффект отравления давался на меньший срок. Вот то, на чём я остановился сейчас.
Тут эффект берётся конкретно из летящего зелья, а не от того, сколько секунд было выдано игроку. А как сделать второе - кроме костылей кривых в голову ничего не лезет (шедулить на тик позже), т. к. на момент срабатывания ивента у игрока никаких эффектов нет.
Код:
@EventHandler
public void splash(PotionSplashEvent e){
Player p = (Player) e.getPotion().getShooter();
usepotion(p, e.getPotion());
for(LivingEntity en:e.getAffectedEntities()){
if(!(en instanceof Player))return;
Player pl = (Player) en;
for(PotionEffect pef:e.getPotion().getEffects()){
PotionEffectType type = pef.getType();
if(type.equals(PotionEffectType.POISON)){
int time = pef.getDuration();
double coef = 1;
if(pl.getEquipment().getArmorContents()[3]!=null&&pl.getEquipment().getArmorContents()[3].getType()!=null)
if(pl.getEquipment().getArmorContents()[3].getType().equals(Material.LEATHER_HELMET))coef=1.1;
else if(pl.getEquipment().getArmorContents()[3].getType().equals(Material.GOLD_HELMET))coef=1.3;
else if(pl.getEquipment().getArmorContents()[3].getType().equals(Material.DIAMOND_HELMET))coef=1.5;
time/=coef;
e.setCancelled(true);
p.sendMessage("real="+pef.getDuration()+";set="+time);
pl.addPotionEffect(new PotionEffect(pef.getType(), time, pef.getAmplifier(), true, true));
}
}
}
}