a little bit less spaghetti and statistics should work for groups now
This commit is contained in:
		
					parent
					
						
							
								50f51126bb
							
						
					
				
			
			
				commit
				
					
						5df021e3dd
					
				
			
		
					 2 changed files with 109 additions and 79 deletions
				
			
		|  | @ -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<UUID> 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<UUID> 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<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(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<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 | ||||
|     public void onBlockBurn(BlockBurnEvent e) { | ||||
|         if(plugin.getArenaList().getArenaAtBlock(e.getBlock()) != null) { | ||||
|  |  | |||
|  | @ -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<UUID> 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<UUID> 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) { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue