Fix sidebars, implement vault api, coin pickups, and player respawning

This commit is contained in:
2022-05-28 19:28:03 +02:00
parent f8b99d44bf
commit a299b167de
15 changed files with 446 additions and 22 deletions

View File

@@ -2,6 +2,9 @@ package gg.malloc.defense.ui;
import gg.malloc.defense.model.Game;
import gg.malloc.defense.model.State;
import gg.malloc.defense.model.Progress;
import java.util.HashMap;
import org.bukkit.boss.BossBar;
import org.bukkit.boss.BarStyle;
@@ -13,6 +16,7 @@ public class BossBars {
BossBar m_gameBar = Bukkit.createBossBar("Malloc Defense", BarColor.PURPLE, BarStyle.SOLID);
BossBar m_waveBar = Bukkit.createBossBar("Malloc Defense", BarColor.PURPLE, BarStyle.SOLID);
BossBar m_bombBar = Bukkit.createBossBar("Bomb Fuse", BarColor.RED, BarStyle.SOLID);
HashMap<Player, BossBar> m_respawnBars = new HashMap<>();
State m_gameState;
@@ -33,12 +37,20 @@ public class BossBars {
m_gameBar.addPlayer(p);
m_waveBar.addPlayer(p);
m_bombBar.addPlayer(p);
BossBar respawnBar = Bukkit.createBossBar("Respawn", BarColor.BLUE, BarStyle.SOLID);
respawnBar.addPlayer(p);
respawnBar.setVisible(false);
m_respawnBars.put(p, respawnBar);
}
public void removePlayer(Player p) {
m_gameBar.removePlayer(p);
m_waveBar.removePlayer(p);
m_bombBar.removePlayer(p);
if (m_respawnBars.containsKey(p)) {
m_respawnBars.get(p).removePlayer(p);
m_respawnBars.remove(p);
}
}
public void update() {
@@ -100,5 +112,15 @@ public class BossBars {
m_bombBar.setVisible(false);
break;
}
for (Player p : m_respawnBars.keySet()) {
Progress respawnProgress = m_gameState.playerRespawnProgress(p);
if (respawnProgress.value() > 0) {
m_respawnBars.get(p).setVisible(true);
m_respawnBars.get(p).setProgress(respawnProgress.toDouble());
m_respawnBars.get(p).setTitle("Respawning in " + respawnProgress.value());
} else {
m_respawnBars.get(p).setVisible(false);
}
}
}
}

View File

@@ -12,6 +12,7 @@ import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Score;
import org.bukkit.scoreboard.Team;
import org.bukkit.scoreboard.Objective;
import org.bukkit.entity.Player;
public class Sidebar {
Scoreboard m_scoreboard;
@@ -19,12 +20,14 @@ public class Sidebar {
ArrayList<String> m_rowKeys;
HashMap<Integer, String> m_rows;
ArrayList<Team> m_teams;
Player m_player;
int m_size;
State m_state;
public Sidebar(State state, Scoreboard scoreboard) {
public Sidebar(State state, Scoreboard scoreboard, Player player) {
m_state = state;
m_player = player;
m_scoreboard = scoreboard;
m_objective = m_scoreboard.registerNewObjective("text", "dummy", ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "Malloc Defense");
m_objective.setDisplaySlot(DisplaySlot.SIDEBAR);
@@ -34,6 +37,7 @@ public class Sidebar {
m_rowKeys.add(ChatColor.BLACK + "" + ChatColor.WHITE);
m_rowKeys.add(ChatColor.GOLD+ "" + ChatColor.WHITE);
m_rowKeys.add(ChatColor.WHITE+ "" + ChatColor.WHITE);
m_rowKeys.add(ChatColor.BLACK+ "" + ChatColor.BLACK);
for(String key : m_rowKeys) {
Team team = m_scoreboard.registerNewTeam(key);
team.addEntry(key);
@@ -50,20 +54,23 @@ public class Sidebar {
case Warmup:
m_rows.put(0, ChatColor.LIGHT_PURPLE + "Wave " + m_state.waveProgress().value() + " / " + m_state.waveProgress().maximum());
m_rows.put(1, ChatColor.AQUA + "Get ready!");
m_rows.put(2, ChatColor.AQUA + "Balance: ");
m_size = 3;
m_rows.put(2, ChatColor.AQUA + "Balance: " + m_state.getPlayerBalance(m_player));
m_rows.put(3, ChatColor.AQUA + "Coins remaining: " + m_state.coinProgress().remaining());
m_size = 4;
break;
case Countdown:
m_rows.put(0, ChatColor.LIGHT_PURPLE + "Wave " + m_state.waveProgress().value() + " / " + m_state.waveProgress().maximum());
m_rows.put(1, ChatColor.GOLD + "Wave incoming!");
m_rows.put(2, ChatColor.AQUA + "Balance: ");
m_size = 3;
m_rows.put(2, ChatColor.AQUA + "Balance: " + m_state.getPlayerBalance(m_player));
m_rows.put(3, ChatColor.AQUA + "Coins remaining: " + m_state.coinProgress().remaining());
m_size = 4;
break;
case Playing:
m_rows.put(0, ChatColor.LIGHT_PURPLE + "Wave " + m_state.waveProgress().value() + " / " + m_state.waveProgress().maximum());
m_rows.put(1, ChatColor.GREEN + "Mobs remaining: " + (m_state.mobProgress().maximum() - m_state.mobProgress().value()));
m_rows.put(2, ChatColor.AQUA + "Balance: ");
m_size = 3;
m_rows.put(1, ChatColor.GREEN + "Mobs remaining: " + m_state.mobProgress().remaining());
m_rows.put(2, ChatColor.AQUA + "Balance: " + m_state.getPlayerBalance(m_player));
m_rows.put(3, ChatColor.AQUA + "Coins remaining: " + m_state.coinProgress().remaining());
m_size = 4;
break;
case GameOver:
m_rows.put(0, ChatColor.RED + "Game over!");

View File

@@ -18,7 +18,7 @@ public class Sidebars {
}
public void addPlayer(Player player) {
m_sidebars.put(player, new Sidebar(m_state, m_scoreboards.getNewScoreboard()));
m_sidebars.put(player, new Sidebar(m_state, m_scoreboards.getNewScoreboard(), player));
player.setScoreboard(m_sidebars.get(player).getScoreboard());
}