PlaceHolder.java
package dev.aura.bungeechat.api.placeholder;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.function.Predicate;
import lombok.EqualsAndHashCode;
import lombok.Getter;
@EqualsAndHashCode(of = "placeholder")
public class PlaceHolder implements BungeeChatPlaceHolder {
@Getter private final String placeholder;
private final ReplacementSupplier replacementSupplier;
private final List<Predicate<? super BungeeChatContext>> requirements = new LinkedList<>();
@SafeVarargs
public PlaceHolder(
String placeholder,
ReplacementSupplier replacementSupplier,
Predicate<? super BungeeChatContext>... requirements) {
this(placeholder, replacementSupplier, Arrays.asList(requirements));
}
public PlaceHolder(
String placeholder,
ReplacementSupplier replacementSupplier,
List<Predicate<? super BungeeChatContext>> requirements) {
this.placeholder = placeholder;
this.replacementSupplier = replacementSupplier;
this.requirements.addAll(requirements);
}
@Override
public boolean isContextApplicable(BungeeChatContext context) {
for (Predicate<? super BungeeChatContext> requirement : requirements) {
if (!requirement.test(context)) return false;
}
return true;
}
@Override
public String getReplacement(String name, BungeeChatContext context) {
return replacementSupplier.get(context);
}
public void addRequirement(Predicate<? super BungeeChatContext> requirement) {
if (requirements.contains(requirement)) return;
requirements.add(requirement);
}
@Override
public String getName() {
return getPlaceholder();
}
public PlaceHolder[] createAliases(String... aliases) {
int size = aliases.length;
PlaceHolder[] placeHolders = new PlaceHolder[size + 1];
for (int i = 0; i < size; i++) {
placeHolders[i] = new PlaceHolder(aliases[i], replacementSupplier, requirements);
}
placeHolders[size] = this;
return placeHolders;
}
}