package tc.oc.pgm.spawns.states; import javax.annotation.Nullable; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.TranslatableComponent; import org.bukkit.Location; import tc.oc.commons.core.chat.Component; import tc.oc.pgm.events.ObserverInteractEvent; import tc.oc.pgm.match.MatchPlayer; import tc.oc.pgm.spawns.Spawn; /** * Player is waiting to spawn as a participant */ public abstract class Spawning extends Participating { protected boolean spawnRequested; public Spawning(MatchPlayer player) { super(player); this.spawnRequested = options.auto; } @Override public void enterState() { super.enterState(); player.setDead(true); player.refreshInteraction(); player.refreshVisibility(); } public void requestSpawn() { this.spawnRequested = true; } @Override public void onEvent(ObserverInteractEvent event) { super.onEvent(event); requestSpawn(); } @Override public void tick() { if(!trySpawn()) { updateTitle(); } super.tick(); } protected boolean trySpawn() { if(!spawnRequested) return false; Spawn spawn = chooseSpawn(); if(spawn == null) return false; Location location = spawn.getSpawn(player); if(location == null) return false; transition(new Alive(player, spawn, location)); return true; } public @Nullable Spawn chooseSpawn() { if(spawnRequested) { return smm.chooseSpawn(player); } else { return null; } } public void updateTitle() { player.showTitle(getTitle(), new Component(getSubtitle(), ChatColor.GREEN), 0, 3, 3); } protected abstract BaseComponent getTitle(); protected BaseComponent getSubtitle() { if(!spawnRequested) { return new TranslatableComponent("death.respawn.unconfirmed"); } else if(options.message != null) { return options.message; } else { return new TranslatableComponent("death.respawn.confirmed.waiting"); } } }