package de.tobiyas.racesandclasses.traitcontainer.traits.defaultraits.magic.DamageIncreaseBuffTrait;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.TraitHolderCombinder;
import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayer;
import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayerManager;
import de.tobiyas.racesandclasses.traitcontainer.interfaces.annotations.configuration.TraitConfigurationField;
import de.tobiyas.racesandclasses.traitcontainer.interfaces.annotations.configuration.TraitConfigurationNeeded;
import de.tobiyas.racesandclasses.traitcontainer.interfaces.annotations.configuration.TraitEventsUsed;
import de.tobiyas.racesandclasses.traitcontainer.interfaces.annotations.configuration.TraitInfos;
import de.tobiyas.racesandclasses.traitcontainer.interfaces.markerinterfaces.Trait;
import de.tobiyas.racesandclasses.traitcontainer.traits.pattern.AbstractBuffTrait;
import de.tobiyas.racesandclasses.util.friend.EnemyChecker.FriendDetectEvent;
import de.tobiyas.racesandclasses.util.traitutil.TraitConfiguration;
import de.tobiyas.racesandclasses.util.traitutil.TraitConfigurationFailedException;
public class DamageIncreaseBuffTrait extends AbstractBuffTrait {
/**
* The amount to increase.
*/
private double percent = 0.1;
@TraitInfos(category="magic", traitName="DamageIncreaseBuffTrait", visible=true)
@Override
public void importTrait() {}
@TraitEventsUsed()
@Override
public void generalInit() { super.generalInit(); }
@TraitConfigurationNeeded( fields = {
@TraitConfigurationField(fieldName = "value", classToExpect = Double.class, optional = true),
})
@Override
public void setConfiguration(TraitConfiguration configMap) throws TraitConfigurationFailedException {
super.setConfiguration(configMap);
this.percent = configMap.getAsDouble("value", 0.1);
}
@Override
public String getName() {
return "DamageIncreaseBuffTrait";
}
@Override
public boolean isBetterThan(Trait trait) {
return percent > ((DamageIncreaseBuffTrait)trait).percent;
}
@Override
protected void buffActivated(RaCPlayer player) {}
@Override
protected void buffTimeouted(RaCPlayer player) {}
@EventHandler(priority=EventPriority.HIGH)
public void entityDamage(EntityDamageByEntityEvent event){
Entity damager = event.getDamager();
if(damager.getType() != EntityType.PLAYER) return;
if(event.isCancelled()) return;
if(event instanceof FriendDetectEvent) return;
RaCPlayer player = RaCPlayerManager.get().getPlayer(damager.getUniqueId());
if(!TraitHolderCombinder.checkContainer(player, this)) return;
double value = (modifyToPlayer(player, percent, "value") + 1 ) * event.getDamage();
event.setDamage(value);
buffUsed(player);
}
@Override
protected String getPrettyConfigIntern() {
return "does " + (int)(percent*100) + "% more melee damage for " + duration + " seconds";
}
}