a little bit less spaghetti and statistics should work for groups now

This commit is contained in:
LunarAkai 2024-05-16 15:17:35 +02:00
commit 5df021e3dd
2 changed files with 109 additions and 79 deletions

View file

@ -3,7 +3,6 @@ package de.lunarakai.minecleaner;
import java.util.Arrays; import java.util.Arrays;
import java.util.Iterator; import java.util.Iterator;
import java.util.UUID; import java.util.UUID;
import java.util.logging.Level;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -227,60 +226,70 @@ public class MinecleanerListener implements Listener {
@EventHandler @EventHandler
public void onPlayerQuit(PlayerQuitEvent e) { public void onPlayerQuit(PlayerQuitEvent e) {
MinecleanerArena arena = plugin.getArenaList().getPlayerArena(e.getPlayer()); Player player = e.getPlayer();
MinecleanerGroupManager groupManager = plugin.getGroupManager();
MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player);
if(arena != null) { if(arena != null) {
if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) { if(groupManager.getGroup(player) != null) {
if(plugin.getGroupManager().getGroup(e.getPlayer()).getOwner().equals(e.getPlayer())) { MinecleanerGroupManager.MinecleanerGroup group = groupManager.getGroup(player);
Player[] players = new Player[plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size()]; Player ownerPlayer = Bukkit.getPlayer(group.getOwner());
int i = 0; if(player == ownerPlayer) {
for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().iterator(); iterator.hasNext();) { Player[] players = iterateOverGroupMembersOnCreatorPlayerQuit(player, groupManager, group);
Player iteratorPlayer = Bukkit.getPlayer(iterator.next());
players[i] = iteratorPlayer;
}
plugin.getManager().leaveArena(players, false, true); plugin.getManager().leaveArena(players, false, true);
} else {
iterateOverGroupMembersOnPlayerQuit(player, group);
}
} else {
Player[] players = new Player[] {
e.getPlayer()
};
plugin.getManager().leaveArena(players, false, true);
}
} else {
if(groupManager.getGroup(player) != null) {
MinecleanerGroupManager.MinecleanerGroup group = groupManager.getGroup(player);
Player ownerPlayer = Bukkit.getPlayer(group.getOwner());
if(player == ownerPlayer) {
iterateOverGroupMembersOnCreatorPlayerQuit(player, groupManager, group);
} else {
iterateOverGroupMembersOnPlayerQuit(player, group);
}
} else {
return; return;
} }
Player[] players = new Player[] {
e.getPlayer()
};
plugin.getGroupManager().getGroup(e.getPlayer()).removePlayerFromGroup(e.getPlayer());
plugin.getManager().leaveArena(players, false, false);
} else {
Player[] players = new Player[] {
e.getPlayer()
};
plugin.getManager().leaveArena(players, false, true);
} }
} else { }
if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) {
if(plugin.getGroupManager().getGroup(e.getPlayer()).getOwner().equals(e.getPlayer())) { private void iterateOverGroupMembersOnPlayerQuit(Player player, MinecleanerGroupManager.MinecleanerGroup group) {
Player[] players = new Player[group.players.size()];
int i = 0; int i = 0;
Player[] players = new Player[plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size()]; for(Iterator<UUID> iterator = group.getPlayers().iterator(); iterator.hasNext();) {
for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().iterator(); iterator.hasNext();) {
Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); Player iteratorPlayer = Bukkit.getPlayer(iterator.next());
if(iteratorPlayer == e.getPlayer()) { if(iteratorPlayer == player) {
i++; i++;
continue; continue;
} }
players[i] = iteratorPlayer; players[i] = iteratorPlayer;
players[i].sendMessage(Component.text("Die " + plugin.getDisplayedPluginName() + "gruppe in der du dich befindest wurde aufgelöst. Die Person, welche die Gruppe erstellt hat, hat den Server verlassen", NamedTextColor.YELLOW)); iteratorPlayer.sendMessage(Component.text(player.getName() + " hat den Server verlassen und wurde aus der Gruppe entfernt.", NamedTextColor.YELLOW));
i++;
} }
if(plugin.getArenaList().getPlayerArena(e.getPlayer()) != null) { group.removePlayerFromGroup(player);
plugin.getManager().leaveArena(players, false, true);
}
return;
}
Player[] players = new Player[] {
e.getPlayer()
};
plugin.getGroupManager().getGroup(e.getPlayer()).removePlayerFromGroup(e.getPlayer());
if(plugin.getArenaList().getPlayerArena(e.getPlayer()) != null) {
plugin.getManager().leaveArena(players, false, false);
} }
private Player[] iterateOverGroupMembersOnCreatorPlayerQuit(Player player, MinecleanerGroupManager groupManager, MinecleanerGroupManager.MinecleanerGroup group) {
Player[] players = new Player[group.players.size()];
int i = 0;
for(Iterator<UUID> iterator = group.getPlayers().iterator(); iterator.hasNext();) {
Player iteratorPlayer = Bukkit.getPlayer(iterator.next());
if(iteratorPlayer == player) {
i++;
continue;
} }
players[i] = iteratorPlayer;
iteratorPlayer.sendMessage(Component.text("Die " + plugin.getDisplayedPluginName() + "gruppe in der du dich befindest wurde aufgelöst. Die Person, welche die Gruppe erstellt hat, hat den Server verlassen", NamedTextColor.YELLOW));
} }
groupManager.deleteGroup(group);
return players;
} }
@EventHandler @EventHandler

View file

@ -216,41 +216,57 @@ public class MinecleanerManager {
} }
public void handleGameover(Player[] player, MinecleanerArena arena, boolean isSuccessfullyCleared) { public void handleGameover(Player[] player, MinecleanerArena arena, boolean isSuccessfullyCleared) {
if(plugin.getGroupManager().getGroup(player[0]) != null) { if(plugin.getGroupManager().getGroup(player[0]) != null) {
World world = player[0].getWorld(); World world = player[0].getWorld();
if(!isSuccessfullyCleared) { if(!isSuccessfullyCleared) {
world.playSound(player[0].getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); world.playSound(player[0].getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f);
int arraySize = plugin.getGroupManager().getGroup(player[0]) != null ? plugin.getGroupManager().getGroup(player[0]).getPlayers().size() : 1;
Player[] players = new Player[arraySize];
for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) { for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) {
Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); Player iteratorPlayer = Bukkit.getPlayer(iterator.next());
assert iteratorPlayer != null; assert iteratorPlayer != null;
iteratorPlayer.sendMessage(Component.text("Game Over! Ihr konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!", NamedTextColor.YELLOW)); iteratorPlayer.sendMessage(Component.text("Game Over! Ihr konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!", NamedTextColor.YELLOW));
if(plugin.isStatisticsEnabled()) {
PlayerStatistics ps = plugin.getCubesideStatistics().getStatistics(iteratorPlayer.getUniqueId());
ps.increaseScore(statisticsTotalGamesPlayed.get(arena.getWidthIndex()), 1);
}
} }
arena.showMines(); arena.showMines();
scheduleArenaReset(player[0], arena); scheduleArenaReset(Bukkit.getPlayer(plugin.getGroupManager().getGroup(player[0]).getOwner()), arena);
return; return;
} }
// Todo: Punkte durch Anzahl der Leute in der Gruppe teilen => bei floats abrunden (heißt für Kleine (1 Punkt normal) => 0 Punkte in der Gruppe)
int millis = (int) (System.currentTimeMillis() - arena.getCurrentGameStartTime()); int millis = (int) (System.currentTimeMillis() - arena.getCurrentGameStartTime());
world.playSound(player[0].getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f); world.playSound(player[0].getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f);
int arraySize = plugin.getGroupManager().getGroup(player[0]) != null ? plugin.getGroupManager().getGroup(player[0]).getPlayers().size() : 1; MinecleanerGroupManager.MinecleanerGroup group = plugin.getGroupManager().getGroup(player[0]);
Player[] players = new Player[arraySize];
for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) { for(UUID currentPlayer : group.getPlayers()) {
Player iteratorPlayer = Bukkit.getPlayer(iterator.next());
assert iteratorPlayer != null; Player iteratorPlayer = Bukkit.getPlayer(currentPlayer);
if(iteratorPlayer != null)
iteratorPlayer.sendMessage(Component.text( iteratorPlayer.sendMessage(Component.text(
"Glückwunsch, ihr konntest das " + plugin.getDisplayedPluginName() + "-Feld in ", NamedTextColor.YELLOW) "Glückwunsch, ihr konntet das " + plugin.getDisplayedPluginName() + "-Feld in ", NamedTextColor.YELLOW)
.append(Component.text(MinecleanerStringUtil.timeToString(millis, false), NamedTextColor.RED)) .append(Component.text(MinecleanerStringUtil.timeToString(millis, false), NamedTextColor.RED))
.append(Component.text(" erfolgreich lösen!", NamedTextColor.YELLOW))); .append(Component.text(" erfolgreich lösen!", NamedTextColor.YELLOW)));
if(!plugin.isStatisticsEnabled())
continue;
PlayerStatistics ps = plugin.getCubesideStatistics().getStatistics(currentPlayer);
ps.increaseScore(statisticsTotalGamesPlayed.get(arena.getWidthIndex()), 1);
ps.increaseScore(statisticsWonGamesTotal, 1);
ps.increaseScore(statisticsGames.get(arena.getWidthIndex()), 1);
int wIndex = arena.getWidthIndex();
increaseScore(wIndex, ps, group.getPlayers().size());
} }
scheduleArenaReset(player[0], arena); scheduleArenaReset(Bukkit.getPlayer(group.getOwner()), arena);
return; return;
} }
World world = player[0].getWorld(); World world = player[0].getWorld();
PlayerStatistics ps = null; PlayerStatistics ps = null;
StatisticKey sg = null; StatisticKey sg = null;
@ -298,32 +314,37 @@ public class MinecleanerManager {
} }
int wIndex = arena.getWidthIndex(); int wIndex = arena.getWidthIndex();
increaseScore(wIndex, ps, 1);
} else {
player[0].sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!");
}
scheduleArenaReset(player[0], arena);
}
private void increaseScore(int wIndex, PlayerStatistics ps, int groupSize) {
switch (wIndex) { switch (wIndex) {
case 0: { case 0: {
ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.small")); ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.small") /groupSize));
break; break;
} }
case 1: { case 1: {
ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.medium")); ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.medium") /groupSize));
break; break;
} }
case 2: { case 2: {
ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.large")); ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.large") /groupSize));
break; break;
} }
case 3: { case 3: {
ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.expert")); ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.expert") /groupSize));
break;
} }
default: { default: {
ps.increaseScore(statisticsPointsAcquired, 0); ps.increaseScore(statisticsPointsAcquired, 0);
break; break;
} }
} }
} else {
player[0].sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!");
}
scheduleArenaReset(player[0], arena);
} }
private void scheduleArenaReset(Player player, MinecleanerArena arena) { private void scheduleArenaReset(Player player, MinecleanerArena arena) {