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
34 changes: 17 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,23 +39,23 @@ Objective types can be enabled or disabled individually via the plugin's setting

### 📋 Commands

| Command | Description |
|:----------------------------|:------------------------------------------------------|
| `/backpack` | Opens the personal or team backpack (can be disabled) |
| `/displayresults` | Show the final leaderboard (player, team) |
| `/exclude <player>` | Exclude a player from the battle |
| `/help` | Display a list of available commands |
| `/joker <player> <amount>` | Adjust jokers for a player |
| `/language` | Open the language selection menu |
| `/points <player> <amount>` | Modify a player's points |
| `/randomteams <teamsize>` | Creates random teams with a specific size |
| `/recipe <item>` | Displays the recipe of an item |
| `/reset [player]` | Reset the battle or a specific player |
| `/result <player>` | Show detailed results for a player |
| `/settings` | Open the plugin's settings menu |
| `/skip <player>` | Skip a player's current objective (for admins) |
| `/team` | Manage teams |
| `/timer` | Control the timer (start, stop, set duration) |
| Command | Description |
|:---------------------------------|:------------------------------------------------------|
| `/backpack` | Opens the personal or team backpack (can be disabled) |
| `/displayresults` | Show the final leaderboard (player, team) |
| `/exclude <player>` | Exclude a player from the battle |
| `/help` | Display a list of available commands |
| `/joker <player> <amount>` | Adjust jokers for a player |
| `/language` | Open the language selection menu |
| `/points <player> <amount>` | Modify a player's points |
| `/randomteams <teamsize> <mode>` | Creates random teams with a specific size |
| `/recipe <item>` | Displays the recipe of an item |
| `/reset [player]` | Reset the battle or a specific player |
| `/result <player>` | Show detailed results for a player |
| `/settings` | Open the plugin's settings menu |
| `/skip <player>` | Skip a player's current objective (for admins) |
| `/team` | Manage teams |
| `/timer` | Control the timer (start, stop, set duration) |

---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import net.fameless.forcebattle.command.framework.CommandCaller;
import net.fameless.forcebattle.game.Team;
import net.fameless.forcebattle.player.BattlePlayer;
import net.fameless.forcebattle.util.StringUtility;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
Expand All @@ -22,61 +23,98 @@
"randomteams",
List.of(),
CallerType.PLAYER,
"/randomteams <teamsize>",
"/randomteams <teamsize> <mode>",
"forcebattle.randomteams",
"Command to create random teams."
);
}

@Override
protected void executeCommand(final CommandCaller caller, final String[] args) {
if (ForceBattle.getTimer().isRunning()) {
caller.sendMessage(Caption.of("error.game_already_started"));
return;
}

if (args.length > 0 && !args[0].isEmpty()) {
Team.deleteAll();

int size;
try {
size = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
caller.sendMessage(Caption.of("command.not_a_number"));
return;
}

List<BattlePlayer> players = new ArrayList<>(BattlePlayer.getOnlinePlayers());
int playerAmount = players.size();

if (playerAmount % size != 0) {
caller.sendMessage(Caption.of("error.no_equal_teams"));
return;
}

Random random = new Random();
int amountOfTeams = playerAmount / size;

for (int i = 0; i < amountOfTeams; i++) {
BattlePlayer player = players.get(random.nextInt(players.size()));
players.remove(player);
Team team = new Team(List.of(player));
if (args[1].equalsIgnoreCase("fillExistingTeams")) {
List<Team> existingTeams = new ArrayList<>(Team.teams);
Random random = new Random();

for (Team team : existingTeams) {
for (BattlePlayer p : team.getPlayers()) {
players.remove(p);
}
}

for (int j = 0; j < size; j++) {
if (team.getPlayers().size() == size) break;
BattlePlayer newPlayer = players.get(random.nextInt(players.size()));
team.addPlayer(newPlayer);
players.remove(newPlayer);
for (Team team : existingTeams) {
while (team.getPlayers().size() > size) {
BattlePlayer removed = team.getPlayers().get(random.nextInt(team.getPlayers().size()));
team.removePlayer(removed);
players.add(removed);
}
}

for (Team team : existingTeams) {
while (team.getPlayers().size() < size && !players.isEmpty()) {
BattlePlayer randomPlayer = players.remove(random.nextInt(players.size()));
team.addPlayer(randomPlayer);
}
}

while (!players.isEmpty()) {
BattlePlayer first = players.remove(random.nextInt(players.size()));
Team team = new Team(List.of(first));

while (team.getPlayers().size() < size && !players.isEmpty()) {
BattlePlayer next = players.remove(random.nextInt(players.size()));
team.addPlayer(next);
}
}
} else {
Team.deleteAll();

Random random = new Random();

for (int i = 0; i < amountOfTeams; i++) {
BattlePlayer first = players.remove(random.nextInt(players.size()));
Team team = new Team(List.of(first));

while (team.getPlayers().size() < size && !players.isEmpty()) {
BattlePlayer next = players.remove(random.nextInt(players.size()));
team.addPlayer(next);
}
}
}

caller.sendMessage(Caption.of("notification.randomteams_successfully_created",
TagResolver.resolver("amount", Tag.inserting(Component.text(String.valueOf(amountOfTeams))))));
}
}

Check notice on line 112 in src/main/java/net/fameless/forcebattle/command/RandomTeamsCommand.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/fameless/forcebattle/command/RandomTeamsCommand.java#L32-L112

Complex Method
@Override
protected List<String> tabComplete(final CommandCaller caller, final String[] args) {
if (args.length == 2) {
return StringUtility.copyPartialMatches(args[1], List.of("fillExistingTeams"), new ArrayList<>());
}
return List.of();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ public void executeCommand(@NotNull CommandCaller caller, String[] args) {
return;
}
Team team = Team.getPlaces().get(place);
if (team == null) return;
for (BattlePlayer player : BattlePlayer.getOnlinePlayers()) {
new ResultGUI(team, true).open(player);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public SkipCommand() {
"skip",
List.of(),
CallerType.NONE,
"/skip <player>",
"/skip <player/team> <player/team>",
"forcebattle.skip",
"Command to skip a player's objective - meant for admins if an item is unobtainable"
);
Expand Down
37 changes: 37 additions & 0 deletions src/main/java/net/fameless/forcebattle/game/GameListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import net.fameless.forcebattle.caption.Caption;
import net.fameless.forcebattle.configuration.PluginUpdater;
import net.fameless.forcebattle.configuration.SettingsManager;
import net.fameless.forcebattle.event.PlayerTeamJoinEvent;
import net.fameless.forcebattle.event.PlayerTeamLeaveEvent;
import net.fameless.forcebattle.event.TimerEndEvent;
import net.fameless.forcebattle.event.TimerStartEvent;
import net.fameless.forcebattle.game.tasks.AdvancementTask;
Expand Down Expand Up @@ -44,6 +46,7 @@
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
Expand Down Expand Up @@ -76,6 +79,10 @@
TaskManager.startAll();
}

//TODO "waiting" flickert im nametag

Check warning on line 82 in src/main/java/net/fameless/forcebattle/game/GameListener.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/fameless/forcebattle/game/GameListener.java#L82

Resolve unexpected comment. (com.puppycrawl.tools.checkstyle.checks.TodoCommentCheck)
//TODO backpack buggt wohl bisl => man kann nicht pages switchen wenn jemand anders drin ist

Check warning on line 83 in src/main/java/net/fameless/forcebattle/game/GameListener.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/fameless/forcebattle/game/GameListener.java#L83

Resolve unexpected comment. (com.puppycrawl.tools.checkstyle.checks.TodoCommentCheck)
//TODO randomteams command should fill already existing teams

Check warning on line 84 in src/main/java/net/fameless/forcebattle/game/GameListener.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/fameless/forcebattle/game/GameListener.java#L84

Resolve unexpected comment. (com.puppycrawl.tools.checkstyle.checks.TodoCommentCheck)

@EventHandler
public void onPlayerLogin(AsyncPlayerPreLoginEvent event) {
if (ForceBattle.getTimer().isRunning()) {
Expand Down Expand Up @@ -119,6 +126,8 @@
public void onPlayerJoin(@NotNull PlayerJoinEvent event) {
BattlePlayer battlePlayer = BattlePlayer.adapt(event.getPlayer());

updateAllTablists();

if (!ForceBattle.getTimer().isRunning() && startPhase) {
if (!spawnCreated) {
StructureUtil.createSpawn();
Expand All @@ -140,6 +149,11 @@
}
}

@EventHandler
public void onPlayerLeave(PlayerQuitEvent event) {
updateAllTablists();
}

@EventHandler
public void onGameStart(TimerStartEvent event) throws IOException {
startPhase = false;
Expand All @@ -164,6 +178,8 @@
}
}

updateAllTablists();

for (BattlePlayer player : BattlePlayer.getOnlinePlayers()) {
if (player.getPlayer() == null) return;

Expand Down Expand Up @@ -223,6 +239,16 @@
}
}

@EventHandler
public void onTeamJoin(PlayerTeamJoinEvent event) {
updateAllTablists();
}

@EventHandler
public void onTeamLeave(PlayerTeamLeaveEvent event) {
updateAllTablists();
}

@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (!SettingsManager.isEnabled(SettingsManager.Setting.FORCE_MOB)) return;
Expand All @@ -247,7 +273,18 @@
}
}

private void updateAllTablists() {
BattlePlayer.getOnlinePlayers().forEach(player -> {
if (player.isInTeam()) {
player.getPlayer().setPlayerListOrder(player.getTeam().getId());
} else {
player.getPlayer().setPlayerListOrder(999);
}
});
}

private void checkPlayerObjective(BattlePlayer battlePlayer, LivingEntity target) {
if (battlePlayer.getObjective() == null) return;
if (battlePlayer.getObjective().getBattleType() != BattleType.FORCE_MOB) return;

String objective = battlePlayer.getObjective().getObjectiveString();
Expand Down
Loading
Loading