Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 31 additions & 17 deletions src/main/java/net/fameless/forcebattle/bossbar/BossbarManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,25 @@ public void run() {
continue;
}

BossBar playerBar = BossBar.bossBar(
getPlayerObjectiveTitle(battlePlayer),
1,
BossBar.Color.BLUE,
BossBar.Overlay.PROGRESS
);
updateBossBar(battlePlayer, playerBar, lastPlayerBarMap);

if (!timerRunning) {
showWaitingBossbar(battlePlayer);
hideBossBar(battlePlayer, lastTeamBarMap);
continue;
} else {
hideBossBar(battlePlayer, lastPlayerBarMap);
}

Objective playerObjective = battlePlayer.getObjective();
if (playerObjective != null) {
BossBar playerBar = BossBar.bossBar(
getPlayerObjectiveTitle(battlePlayer),
1,
BossBar.Color.BLUE,
BossBar.Overlay.PROGRESS
);
updateBossBar(battlePlayer, playerBar, lastPlayerBarMap);
} else {
hideBossBar(battlePlayer, lastPlayerBarMap);
}

if (battlePlayer.isInTeam()) {
Expand All @@ -71,23 +79,31 @@ public void run() {
new Timer("forcebattle/bossbar").scheduleAtFixedRate(task, 150, 150);
}

private static void showWaitingBossbar(BattlePlayer battlePlayer) {
BossBar waitingBar = BossBar.bossBar(
Caption.of("waiting"),
1,
BossBar.Color.YELLOW,
BossBar.Overlay.PROGRESS
);
updateBossBar(battlePlayer, waitingBar, lastPlayerBarMap);
}

private static void hideBossBars(BattlePlayer battlePlayer) {
hideBossBar(battlePlayer, lastPlayerBarMap);
hideBossBar(battlePlayer, lastTeamBarMap);
}

private static void hideBossBar(BattlePlayer battlePlayer, HashMap<BattlePlayer, BossBar> map) {
if (map.containsKey(battlePlayer)) {
battlePlayer.getAudience().hideBossBar(map.get(battlePlayer));
map.remove(battlePlayer);
BossBar existing = map.remove(battlePlayer);
if (existing != null) {
battlePlayer.getAudience().hideBossBar(existing);
}
}

private static @NotNull Component getPlayerObjectiveTitle(BattlePlayer battlePlayer) {
if (!ForceBattle.getTimer().isRunning()) return Caption.of("waiting");

Objective playerObjective = battlePlayer.getObjective();
if (playerObjective == null) return Caption.of("waiting");
if (playerObjective == null) return Component.empty();

boolean isPlayerInTeam = battlePlayer.isInTeam();
int points = isPlayerInTeam ? battlePlayer.getTeam().getPoints() : battlePlayer.getPoints();
Expand Down Expand Up @@ -131,9 +147,7 @@ private static void hideBossBar(BattlePlayer battlePlayer, HashMap<BattlePlayer,
}

private static void updateBossBar(BattlePlayer battlePlayer, BossBar bossBar, HashMap<BattlePlayer, BossBar> map) {
if (map.containsKey(battlePlayer)) {
battlePlayer.getAudience().hideBossBar(map.get(battlePlayer));
}
hideBossBar(battlePlayer, map);
battlePlayer.getAudience().showBossBar(bossBar);
map.put(battlePlayer, bossBar);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package net.fameless.forcebattle.configuration;

import net.fameless.forcebattle.ForceBattle;
import net.fameless.forcebattle.game.Team;
import net.fameless.forcebattle.gui.impl.SettingsGUI;
import net.fameless.forcebattle.player.BattlePlayer;
import net.fameless.forcebattle.util.BattleType;
Expand Down Expand Up @@ -56,10 +57,11 @@ public static void applyMinimum() {
}

private static void updateSetting(Setting setting) {
if (setting == Setting.CHAIN_MODE || setting.name().startsWith("FORCE_")) {
if (setting == Setting.CHAIN_MODE) {
ForceBattle.getObjectiveManager().updateChainList();
}
BattlePlayer.BATTLE_PLAYERS.forEach(player -> player.updateObjective(false, false));
Team.teams.forEach(team -> team.updateObjective(null, false, false));
}

public static boolean isMultiState(Setting setting) {
Expand Down
5 changes: 2 additions & 3 deletions src/main/java/net/fameless/forcebattle/game/GameListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,6 @@ public GameListener() {
TaskManager.startAll();
}

//TODO does chain mode work with team objective?
//TODO support only team objective if not already possible

@EventHandler
public void onPlayerLogin(AsyncPlayerPreLoginEvent event) {
if (ForceBattle.getTimer().isRunning()) {
Expand Down Expand Up @@ -205,6 +202,8 @@ public void onGameEnd(TimerEndEvent event) {
for (BattlePlayer player : BattlePlayer.getOnlinePlayers()) {
if (player.getPlayer() == null) return;

if (player.isInTeam()) player.getTeam().setObjective(null);
player.setCurrentObjective(null, false, false);
player.getPlayer().teleport(Bukkit.getWorld("world").getSpawnLocation());
player.getPlayer().setHealth(20);
player.getPlayer().setSaturation(20);
Expand Down
33 changes: 20 additions & 13 deletions src/main/java/net/fameless/forcebattle/game/NametagManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,70 +23,77 @@
BattlePlayer.BATTLE_PLAYERS.forEach(NametagManager::updateNametag), 0, 3);
}

private static void updateNametag(@NotNull BattlePlayer battlePlayer) {
Player player = battlePlayer.getPlayer();
if (player == null) return;

Scoreboard scoreboard = ScoreboardManager.getOrCreateScoreboard(battlePlayer);

for (BattlePlayer targetPlayer : BattlePlayer.BATTLE_PLAYERS) {
Player target = targetPlayer.getPlayer();
if (target == null) continue;

Team team = scoreboard.getTeam(targetPlayer.getUuid().toString());
if (team == null) {
team = scoreboard.registerNewTeam(targetPlayer.getUuid().toString());
team.addEntry(targetPlayer.getName());
}

StringBuilder suffix = new StringBuilder(" ");

if (targetPlayer.isExcluded()) {
suffix.append(Caption.getAsLegacy("excluded"));
} else if (!ForceBattle.getTimer().isRunning()) {
suffix.append(Caption.getAsLegacy("waiting"));
} else {
var objective = targetPlayer.getObjective();
String objectiveString;
}

Objective objective = targetPlayer.getObjective();
if (objective == null && targetPlayer.isInTeam()) {
objective = targetPlayer.getTeam().getObjective();
}

if (objective != null) {
String objectiveString;
if (BukkitUtil.convertObjective(BattleType.FORCE_ADVANCEMENT, objective.getObjectiveString()) instanceof FBAdvancement advancement) {
objectiveString = advancement.name;
} else {
objectiveString = StringUtility.formatName(objective.getObjectiveString());
}

if (!SettingsManager.isEnabled(SettingsManager.Setting.HIDE_OBJECTIVES)) {
boolean hideObjectives = SettingsManager.isEnabled(SettingsManager.Setting.HIDE_OBJECTIVES);
boolean hidePoints = SettingsManager.isEnabled(SettingsManager.Setting.HIDE_POINTS);

if (!hideObjectives) {
suffix.append(" ")
.append(ChatColor.GRAY)
.append(objective.getBattleType().getPrefix())
.append(ChatColor.DARK_GRAY)
.append(" » ")
.append(ChatColor.BLUE)
.append(objectiveString);
}

if (!SettingsManager.isEnabled(SettingsManager.Setting.HIDE_OBJECTIVES)
&& !SettingsManager.isEnabled(SettingsManager.Setting.HIDE_POINTS)) {
if (!hideObjectives && !hidePoints) {
suffix.append(ChatColor.DARK_GRAY).append(" |");
}

if (!SettingsManager.isEnabled(SettingsManager.Setting.HIDE_POINTS)) {
if (!hidePoints) {
suffix.append(" ").append(ChatColor.GRAY).append("Points")
.append(ChatColor.DARK_GRAY).append(" » ")
.append(ChatColor.BLUE).append(targetPlayer.getPoints());
}
}

var teamData = targetPlayer.getTeam();
if (teamData != null) {
suffix.append(ChatColor.DARK_GRAY).append(" | ").append(ChatColor.GRAY)
.append("Team").append(ChatColor.DARK_GRAY).append(" » ")
.append(ChatColor.BLUE).append(teamData.getId());
}
var teamData = targetPlayer.getTeam();
if (teamData != null) {
suffix.append(ChatColor.DARK_GRAY).append(" | ").append(ChatColor.GRAY)
.append("Team").append(ChatColor.DARK_GRAY).append(" » ")
.append(ChatColor.BLUE).append(teamData.getId());
}

team.setSuffix(suffix.toString());
}

player.setScoreboard(scoreboard);
}

Check notice on line 98 in src/main/java/net/fameless/forcebattle/game/NametagManager.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/fameless/forcebattle/game/NametagManager.java#L26-L98

Complex Method
}
133 changes: 113 additions & 20 deletions src/main/java/net/fameless/forcebattle/game/ObjectiveManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,21 @@
public class ObjectiveManager {

private final List<String> chainList = new ArrayList<>();
private final List<String> teamChainList = new ArrayList<>();

public Objective getNewObjective(Team team) {
if (SettingsManager.isEnabled(SettingsManager.Setting.CHAIN_MODE)) {
int progress = team.getChainProgress();
String objective;
try {
objective = getTeamChainList().get(progress);
} catch (IndexOutOfBoundsException e) {
progress = 0;
objective = getTeamChainList().get(progress);
}
return new Objective(BukkitUtil.getBattleType(objective), objective);
}

List<BattlePlayer> players = team.getPlayers();
if (players.isEmpty()) return null;

Expand Down Expand Up @@ -102,7 +115,7 @@ private Objective generateObjective(BattleType battleType, BattlePlayer battlePl
battlePlayer.sendMessage(Caption.of(
"error.no_objective_available", TagResolver.resolver("type", Tag.inserting(Component.text(battleType.name())))
));
if (team != null) {
if (team != null && SettingsManager.isEnabled(SettingsManager.Setting.EXTRA_TEAM_OBJECTIVE)) {
return getNewObjective(team);
} else {
return getNewObjective(battlePlayer);
Expand Down Expand Up @@ -305,37 +318,117 @@ public List<String> getChainList() {
return chainList;
}

public List<String> getTeamChainList() {
if (teamChainList.isEmpty()) {
updateTeamChainList();
}
return teamChainList;
}

public void updateChainList() {
chainList.clear();
if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_ITEM))
getAvailableItems().forEach(m -> chainList.add(m.name()));

if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_MOB))
getAvailableMobs().forEach(e -> chainList.add(e.name()));
for (BattleType type : BattleType.values()) {
SettingsManager.SettingState state = type.getSettingState();

if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_BIOME)) {
if (SettingsManager.isEnabled(SettingsManager.Setting.SIMPLIFIED_OBJECTIVES)) {
getAvailableBiomesSimplified().forEach(b -> chainList.add(b.getName()));
} else {
getAvailableBiomes().forEach(b -> chainList.add(b.name()));
if (state != SettingsManager.SettingState.PLAYER && state != SettingsManager.SettingState.BOTH) continue;

switch (type) {
case BattleType.FORCE_ITEM -> {
if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_ITEM)) {
getAvailableItems().forEach(m -> chainList.add(m.name()));
}
}
case BattleType.FORCE_MOB -> {
if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_MOB)) {
getAvailableMobs().forEach(e -> chainList.add(e.name()));
}
}
case BattleType.FORCE_ADVANCEMENT -> {
if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_ADVANCEMENT)) {
getAvailableAdvancements().forEach(a -> chainList.add(a.name()));
}
}
case BattleType.FORCE_HEIGHT -> {
if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_HEIGHT)) {
getAvailableHeights().forEach(h -> chainList.add(String.valueOf(h)));
}
}
case BattleType.FORCE_BIOME -> {
if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_BIOME)) {
if (SettingsManager.isEnabled(SettingsManager.Setting.SIMPLIFIED_OBJECTIVES)) {
getAvailableBiomesSimplified().forEach(b -> chainList.add(b.getName()));
} else {
getAvailableBiomes().forEach(b -> chainList.add(b.name()));
}
}
}
case BattleType.FORCE_STRUCTURE -> {
if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_STRUCTURE)) {
if (SettingsManager.isEnabled(SettingsManager.Setting.SIMPLIFIED_OBJECTIVES)) {
getAvailableStructuresSimplified().forEach(s -> chainList.add(s.name()));
} else {
getAvailableStructures().forEach(s -> chainList.add(s.name()));
}
}
}
}
}

if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_ADVANCEMENT))
getAvailableAdvancements().forEach(a -> chainList.add(a.name()));
Collections.shuffle(chainList);
}

if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_HEIGHT))
getAvailableHeights().forEach(h -> chainList.add(String.valueOf(h)));
public void updateTeamChainList() {
teamChainList.clear();

if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_STRUCTURE)) {
if (SettingsManager.isEnabled(SettingsManager.Setting.SIMPLIFIED_OBJECTIVES)) {
getAvailableStructuresSimplified().forEach(s -> chainList.add(s.name()));
} else {
getAvailableStructures().forEach(s -> chainList.add(s.name()));
for (BattleType type : BattleType.values()) {
SettingsManager.SettingState state = type.getSettingState();

if (state != SettingsManager.SettingState.TEAM && state != SettingsManager.SettingState.BOTH) continue;

switch (type) {
case BattleType.FORCE_ITEM -> {
if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_ITEM)) {
getAvailableItems().forEach(m -> teamChainList.add(m.name()));
}
}
case BattleType.FORCE_MOB -> {
if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_MOB)) {
getAvailableMobs().forEach(e -> teamChainList.add(e.name()));
}
}
case BattleType.FORCE_ADVANCEMENT -> {
if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_ADVANCEMENT)) {
getAvailableAdvancements().forEach(a -> teamChainList.add(a.name()));
}
}
case BattleType.FORCE_HEIGHT -> {
if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_HEIGHT)) {
getAvailableHeights().forEach(h -> teamChainList.add(String.valueOf(h)));
}
}
case BattleType.FORCE_BIOME -> {
if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_BIOME)) {
if (SettingsManager.isEnabled(SettingsManager.Setting.SIMPLIFIED_OBJECTIVES)) {
getAvailableBiomesSimplified().forEach(b -> teamChainList.add(b.getName()));
} else {
getAvailableBiomes().forEach(b -> teamChainList.add(b.name()));
}
}
}
case BattleType.FORCE_STRUCTURE -> {
if (SettingsManager.isEnabled(SettingsManager.Setting.FORCE_STRUCTURE)) {
if (SettingsManager.isEnabled(SettingsManager.Setting.SIMPLIFIED_OBJECTIVES)) {
getAvailableStructuresSimplified().forEach(s -> teamChainList.add(s.name()));
} else {
getAvailableStructures().forEach(s -> teamChainList.add(s.name()));
}
}
}
}
}

Collections.shuffle(chainList);
Collections.shuffle(teamChainList);
}

private final List<Material> ENDITEMS = List.of(
Expand Down
12 changes: 11 additions & 1 deletion src/main/java/net/fameless/forcebattle/game/Team.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import lombok.Setter;
import net.fameless.forcebattle.ForceBattle;
import net.fameless.forcebattle.caption.Caption;
import net.fameless.forcebattle.configuration.SettingsManager;
import net.fameless.forcebattle.event.ObjectiveUpdateEvent;
import net.fameless.forcebattle.event.PlayerTeamJoinEvent;
import net.fameless.forcebattle.event.PlayerTeamLeaveEvent;
Expand Down Expand Up @@ -41,6 +42,9 @@ public class Team {
@Setter
private Objective objective;
@Getter
@Setter
private int chainProgress = 0;
@Getter
private JoinRequest lastJoinRequest = null;

public Team(List<BattlePlayer> players) {
Expand Down Expand Up @@ -222,7 +226,6 @@ public void updateObjective(BattlePlayer finisher, boolean finishLast, boolean h
}

Objective newObjective = ForceBattle.getObjectiveManager().getNewObjective(this);
if (newObjective == null) return;

ObjectiveUpdateEvent updateEvent = new ObjectiveUpdateEvent(this, newObjective);
Bukkit.getPluginManager().callEvent(updateEvent);
Expand All @@ -238,6 +241,13 @@ public void updateObjective(BattlePlayer finisher, boolean finishLast, boolean h
));
}
}
if (SettingsManager.isEnabled(SettingsManager.Setting.CHAIN_MODE)) {
increaseChainProgress();
}
}

public void increaseChainProgress() {
chainProgress++;
}

@Getter
Expand Down
Loading
Loading