diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 92cb081..a1bcaab 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -3,7 +3,6 @@ package de.lunarakai.minecleaner; import java.util.Arrays; import java.util.Iterator; import java.util.UUID; -import java.util.logging.Level; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; @@ -227,62 +226,72 @@ public class MinecleanerListener implements Listener { @EventHandler 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(plugin.getGroupManager().getGroup(e.getPlayer()) != null) { - if(plugin.getGroupManager().getGroup(e.getPlayer()).getOwner().equals(e.getPlayer())) { - Player[] players = new Player[plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size()]; - int i = 0; - for(Iterator iterator = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().iterator(); iterator.hasNext();) { - Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - players[i] = iteratorPlayer; - } + if(groupManager.getGroup(player) != null) { + MinecleanerGroupManager.MinecleanerGroup group = groupManager.getGroup(player); + Player ownerPlayer = Bukkit.getPlayer(group.getOwner()); + if(player == ownerPlayer) { + Player[] players = iterateOverGroupMembersOnCreatorPlayerQuit(player, groupManager, group); plugin.getManager().leaveArena(players, false, true); - return; + } else { + iterateOverGroupMembersOnPlayerQuit(player, group); } - 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())) { - int i = 0; - Player[] players = new Player[plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size()]; - for(Iterator iterator = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().iterator(); iterator.hasNext();) { - Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - if(iteratorPlayer == e.getPlayer()) { - i++; - continue; - } - 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)); - i++; - } - if(plugin.getArenaList().getPlayerArena(e.getPlayer()) != null) { - plugin.getManager().leaveArena(players, false, true); - } - return; + } 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); } - 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); - } - + } else { + return; } } } + private void iterateOverGroupMembersOnPlayerQuit(Player player, MinecleanerGroupManager.MinecleanerGroup group) { + Player[] players = new Player[group.players.size()]; + int i = 0; + for(Iterator iterator = group.getPlayers().iterator(); iterator.hasNext();) { + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + if(iteratorPlayer == player) { + i++; + continue; + } + players[i] = iteratorPlayer; + iteratorPlayer.sendMessage(Component.text(player.getName() + " hat den Server verlassen und wurde aus der Gruppe entfernt.", NamedTextColor.YELLOW)); + } + group.removePlayerFromGroup(player); + } + + private Player[] iterateOverGroupMembersOnCreatorPlayerQuit(Player player, MinecleanerGroupManager groupManager, MinecleanerGroupManager.MinecleanerGroup group) { + Player[] players = new Player[group.players.size()]; + int i = 0; + for(Iterator 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 public void onBlockBurn(BlockBurnEvent e) { if(plugin.getArenaList().getArenaAtBlock(e.getBlock()) != null) { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index e1f7115..adb4f34 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -216,41 +216,57 @@ public class MinecleanerManager { } public void handleGameover(Player[] player, MinecleanerArena arena, boolean isSuccessfullyCleared) { + if(plugin.getGroupManager().getGroup(player[0]) != null) { World world = player[0].getWorld(); + if(!isSuccessfullyCleared) { 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 iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); assert iteratorPlayer != null; 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(); - scheduleArenaReset(player[0], arena); + scheduleArenaReset(Bukkit.getPlayer(plugin.getGroupManager().getGroup(player[0]).getOwner()), arena); 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()); 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; - Player[] players = new Player[arraySize]; + MinecleanerGroupManager.MinecleanerGroup group = plugin.getGroupManager().getGroup(player[0]); - for(Iterator iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) { - Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - assert iteratorPlayer != null; - iteratorPlayer.sendMessage(Component.text( - "Glückwunsch, ihr konntest das " + plugin.getDisplayedPluginName() + "-Feld in ", NamedTextColor.YELLOW) - .append(Component.text(MinecleanerStringUtil.timeToString(millis, false), NamedTextColor.RED)) - .append(Component.text(" erfolgreich lösen!", NamedTextColor.YELLOW))); + for(UUID currentPlayer : group.getPlayers()) { + + Player iteratorPlayer = Bukkit.getPlayer(currentPlayer); + if(iteratorPlayer != null) + iteratorPlayer.sendMessage(Component.text( + "Glückwunsch, ihr konntet das " + plugin.getDisplayedPluginName() + "-Feld in ", NamedTextColor.YELLOW) + .append(Component.text(MinecleanerStringUtil.timeToString(millis, false), NamedTextColor.RED)) + .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; } + World world = player[0].getWorld(); PlayerStatistics ps = null; StatisticKey sg = null; @@ -298,27 +314,7 @@ public class MinecleanerManager { } int wIndex = arena.getWidthIndex(); - switch (wIndex) { - case 0: { - ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.small")); - break; - } - case 1: { - ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.medium")); - break; - } - case 2: { - ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.large")); - break; - } - case 3: { - ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.expert")); - } - default: { - ps.increaseScore(statisticsPointsAcquired, 0); - break; - } - } + 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!"); } @@ -326,6 +322,31 @@ public class MinecleanerManager { scheduleArenaReset(player[0], arena); } + private void increaseScore(int wIndex, PlayerStatistics ps, int groupSize) { + switch (wIndex) { + case 0: { + ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.small") /groupSize)); + break; + } + case 1: { + ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.medium") /groupSize)); + break; + } + case 2: { + ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.large") /groupSize)); + break; + } + case 3: { + ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.expert") /groupSize)); + break; + } + default: { + ps.increaseScore(statisticsPointsAcquired, 0); + break; + } + } + } + private void scheduleArenaReset(Player player, MinecleanerArena arena) { schedulerGameOver = Bukkit.getScheduler().runTaskLater(plugin, () -> { if(arena.getArenaStatus() == ArenaStatus.COMPLETED) {