package tc.oc.pgm.join;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import com.google.common.collect.Iterables;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TranslatableComponent;
import static com.google.common.base.Preconditions.checkNotNull;
public class JoinDenied implements JoinResult {
private final BaseComponent message;
private final boolean visible;
private final boolean error;
private final List<BaseComponent> extra = new ArrayList<>();
protected JoinDenied(boolean visible, boolean error, BaseComponent message) {
this.visible = visible;
this.error = error;
this.message = checkNotNull(message);
}
public static JoinDenied translate(boolean visible, boolean error, String translate, Object... with) {
return new JoinDenied(visible, error, new TranslatableComponent(translate, with));
}
/**
* User would generally expect to be able to join right now, but they can't due to
* some exceptional condition.
*
* Example: match full
*/
public static JoinDenied unavailable(String translate, Object... with) {
return translate(true, false, translate, with);
}
/**
* User cannot join right now, but they will be able to in the near future,
* so failure message should look like a friendly reminder rather than an error.
*
* Example: match finished
*/
public static JoinDenied friendly(String translate, Object... with) {
return translate(false, false, translate, with);
}
/**
* Joining is completely off the table, or doesn't make any sense.
*
* Example: already joined, no join permissions
*/
public static JoinDenied error(String translate, Object... with) {
return translate(false, true, translate, with);
}
public JoinDenied also(BaseComponent message) {
extra.add(message);
return this;
}
public JoinDenied also(Iterable<BaseComponent> messages) {
Iterables.addAll(extra, messages);
return this;
}
@Override
public Optional<BaseComponent> message() {
return Optional.of(message);
}
@Override
public Collection<BaseComponent> extra() {
return extra;
}
@Override
public boolean isError() {
return error;
}
@Override
public boolean isVisible() {
return visible;
}
@Override
public boolean isAllowed() {
return false;
}
}