package de.tobiyas.racesandclasses.entitystatusmanager.dot; import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayer; public class DotBuilder { /** * the Name for the Dot. */ private final String name; /** * The person who damaged. */ private RaCPlayer damager; /** * The total ticks to use. */ private int totalTimeInTicks = 0; /** * the total damage to deal. */ private double totalDamage = 0; /** * Every how many ticks to damage. */ private int damageEveryTicks = 10000; /** * The Type of the Dot. */ private DamageType damageType = DamageType.MAGIC; public DotBuilder(String name, RaCPlayer damager) { this(name); this.damager = damager; } public DotBuilder(String name) { this.name = name; } public DotBuilder setTotalTimeInTicks(int totalTimeInTicks) { this.totalTimeInTicks = totalTimeInTicks; return this; } public DotBuilder setTotalTimeInSeconds(int totalTimeInSeconds) { return setTotalTimeInTicks(totalTimeInSeconds * 20); } public DotBuilder setTotalDamage(double totalDamage) { this.totalDamage = totalDamage; return this; } public DotBuilder setDamager(RaCPlayer damager) { this.damager = damager; return this; } public DotBuilder setDamageEveryTicks(int damageEveryTicks) { this.damageEveryTicks = damageEveryTicks; return this; } public DotBuilder setDamageEverySecond() { return setDamageEverySeconds(1); } public DotBuilder setDamageEverySeconds(int seconds) { return setDamageEveryTicks(seconds * 20); } public DotBuilder setDamageType(DamageType dotType) { this.damageType = dotType; return this; } public String getName() { return name; } public RaCPlayer getDamager() { return damager; } public int getTotalTimeInTicks() { return totalTimeInTicks; } public double getTotalDamage() { return totalDamage; } public int getDamageEveryTicks() { return damageEveryTicks; } public DamageType getDamageType() { return damageType; } /** * Checks if the Builder is valid. * @return true if is valid. */ public boolean valid(){ if(name == null || name.isEmpty()) return false; if(damageEveryTicks <= 0) return false; if(damageType == null) return false; if(totalDamage <= 0) return false; if(totalTimeInTicks <= 0) return false; return true; } /** * Copies the Dot to a new builder. * @return the copied builder */ public DotBuilder copy(){ return new DotBuilder(name, damager) .setDamageEveryTicks(damageEveryTicks) .setDamageType(damageType) .setTotalDamage(totalDamage) .setTotalTimeInTicks(totalTimeInTicks); } /** * This builds a dotcontainer that is ment to be ticked every 5 ticks. * @return the build container or null if not valid. */ public DotContainer build(){ if(!valid()) return null; //Do some optimization to only tick every 5 ticks: int realTicks = totalTimeInTicks / 5; int realdamageEveryTicks = damageEveryTicks / 5; double damageOnTick = (totalDamage / totalTimeInTicks) * damageEveryTicks; return new DotContainer(name, damager, damageType, realTicks, damageOnTick, realdamageEveryTicks); } }