package net.t7seven7t.craftfx.target;
import com.google.common.collect.ImmutableList;
import net.t7seven7t.craftfx.Target;
import net.t7seven7t.craftfx.effect.Effect;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
/**
*
*/
public final class TargetSelectorSpec {
private final List<String> aliases = new ArrayList<>();
private TargetAdapter targetAdapter = c -> ImmutableList.of(new Target(c.getInitiator()));
private TargetSelectorSpec() {
}
public static Builder builder() {
return new Builder();
}
public List<String> getAliases() {
return ImmutableList.copyOf(aliases);
}
public TargetSelector newTargetSelector(Target origin, Player initiator, Effect effect) {
if (!origin.getBlock().isPresent() && !origin.getEntity().isPresent()
&& !origin.getLocation().isPresent()) {
origin = new Target(initiator);
}
return new TargetSelector(targetAdapter,
new TargetSelectorContext(origin, initiator, effect));
}
public static final class Builder {
private final TargetSelectorSpec spec;
public Builder() {
this.spec = new TargetSelectorSpec();
}
public Builder adapter(TargetAdapter targetAdapter) {
spec.targetAdapter = targetAdapter;
return Builder.this;
}
public Builder aliases(String... aliases) {
for (String alias : aliases) {
spec.aliases.add(alias.toLowerCase());
}
return Builder.this;
}
public TargetSelectorSpec build() {
return spec;
}
}
}