Add optional round-target billboard display
Build / build (push) Successful in 1m14s

This commit is contained in:
Michael Burgess
2026-08-07 07:52:14 -04:00
parent 2a04392942
commit c78d35d104
9 changed files with 212 additions and 5 deletions
@@ -10,6 +10,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitTask;
import us.tss3.blockparty.BlockPartyPlugin;
import us.tss3.blockparty.billboard.BillboardManager;
import us.tss3.blockparty.config.ArenaConfig;
import us.tss3.blockparty.floor.FloorManager;
import us.tss3.blockparty.logic.ArenaPhase;
@@ -35,6 +36,7 @@ public class Arena {
private final BlockPartyPlugin plugin;
private final ArenaConfig config;
private final FloorManager floorManager;
private final BillboardManager billboardManager;
private final ArenaStateMachine stateMachine = new ArenaStateMachine(ArenaPhase.DISABLED);
private final Random random = new Random();
private final TargetColorSelector selector = new TargetColorSelector(random::nextInt);
@@ -56,6 +58,7 @@ public class Arena {
this.plugin = plugin;
this.config = config;
this.floorManager = new FloorManager(plugin, config);
this.billboardManager = new BillboardManager(plugin, config);
if (config.isEnabled()) {
stateMachine.transition(ArenaPhase.WAITING);
}
@@ -109,6 +112,7 @@ public class Arena {
public void disable() {
cancelAllTasks();
billboardManager.despawn();
// Force reset players out regardless of state
List<UUID> all = new ArrayList<>();
all.addAll(players);
@@ -318,6 +322,7 @@ public class Arena {
p.getInventory().setItem(8, display.clone());
plugin.getSoundUtil().play(p, plugin.getConfigManager().getSound("target-select"), 1f, 1f);
}
billboardManager.show(currentTarget);
}
private void setupBossBar() {
@@ -493,6 +498,7 @@ public class Arena {
floorManager.cancelActiveTask();
cancelAllTasks();
round = 0;
billboardManager.clear();
stateMachine.transition(ArenaPhase.WAITING);
}
@@ -516,6 +522,7 @@ public class Arena {
/** Called on plugin disable / world unload to safely stop everything and restore players. */
public void shutdown() {
cancelAllTasks();
billboardManager.despawn();
List<UUID> all = allParticipants();
for (UUID uuid : all) {
Player p = plugin.getServer().getPlayer(uuid);
@@ -529,6 +536,10 @@ public class Arena {
spectators.clear();
}
public BillboardManager getBillboardManager() {
return billboardManager;
}
private String formatMaterial(Material material) {
String name = material.name().replace("_CONCRETE", "").replace("_", " ").toLowerCase();
return name.substring(0, 1).toUpperCase() + name.substring(1);