115 lines
3.1 KiB
Java
115 lines
3.1 KiB
Java
package tc.oc.pgm.blitz;
|
|
|
|
import net.md_5.bungee.api.ChatColor;
|
|
import net.md_5.bungee.api.chat.BaseComponent;
|
|
import net.md_5.bungee.api.chat.TranslatableComponent;
|
|
import tc.oc.api.docs.PlayerId;
|
|
import tc.oc.commons.core.chat.Component;
|
|
import tc.oc.pgm.match.Competitor;
|
|
|
|
import javax.annotation.Nullable;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.stream.Stream;
|
|
|
|
public abstract class LivesBase implements Lives {
|
|
|
|
private final Map<PlayerId, Integer> deltas;
|
|
private final Competitor competitor;
|
|
private final int original;
|
|
private int current;
|
|
|
|
public LivesBase(int lives, Competitor competitor) {
|
|
this.deltas = new HashMap<>();
|
|
this.competitor = competitor;
|
|
this.original = lives;
|
|
this.current = lives;
|
|
update();
|
|
}
|
|
|
|
protected void update() {
|
|
competitor().getMatch().callEvent(new LivesEvent(this));
|
|
}
|
|
|
|
@Override
|
|
public Competitor competitor() {
|
|
return competitor;
|
|
}
|
|
|
|
@Override
|
|
public int original() {
|
|
return original;
|
|
}
|
|
|
|
@Override
|
|
public int current() {
|
|
return current;
|
|
}
|
|
|
|
@Override
|
|
public boolean empty() {
|
|
return current() <= 0;
|
|
}
|
|
|
|
@Override
|
|
public void add(@Nullable PlayerId cause, int delta) {
|
|
current = Math.max(0, current() + delta);
|
|
deltas.put(cause, changesBy(cause) + delta);
|
|
update();
|
|
}
|
|
|
|
@Override
|
|
public int changesBy(PlayerId player) {
|
|
return deltas.getOrDefault(player, 0);
|
|
}
|
|
|
|
@Override
|
|
public BaseComponent remaining() {
|
|
return new Component(
|
|
new TranslatableComponent(
|
|
"lives.remaining." + type().name().toLowerCase() + "." + (current() == 1 ? "singular"
|
|
: "plural"),
|
|
new Component(current(), ChatColor.YELLOW)
|
|
),
|
|
ChatColor.AQUA
|
|
);
|
|
}
|
|
|
|
@Override
|
|
public BaseComponent status() {
|
|
int alive = (int) competitor().players().count();
|
|
return new Component(
|
|
Stream.of(
|
|
new Component("("),
|
|
new TranslatableComponent(
|
|
empty() ? alive == 0 ? "lives.status.eliminated"
|
|
: "lives.status.alive"
|
|
: "lives.status.lives",
|
|
new Component(
|
|
empty() ? alive : current(),
|
|
ChatColor.WHITE
|
|
)
|
|
),
|
|
new Component(")")
|
|
),
|
|
ChatColor.GRAY,
|
|
ChatColor.ITALIC
|
|
);
|
|
}
|
|
|
|
@Override
|
|
public BaseComponent change(int delta) {
|
|
int absDelta = Math.abs(delta);
|
|
return new Component(
|
|
new TranslatableComponent(
|
|
(delta > 0 ? "lives.change.gained."
|
|
: "lives.change.lost.") + (absDelta == 1 ? "singular"
|
|
: "plural"),
|
|
new Component(absDelta, ChatColor.AQUA)
|
|
),
|
|
ChatColor.WHITE
|
|
);
|
|
}
|
|
|
|
}
|