Compare commits
	
		
			No commits in common. "main" and "v1.1.4" have entirely different histories.
		
	
	
		
	
		
					 35 changed files with 317 additions and 1905 deletions
				
			
		
							
								
								
									
										6
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -114,9 +114,3 @@ buildNumber.properties | |||
| 
 | ||||
| # Common working directory | ||||
| run/ | ||||
| 
 | ||||
| # eclipse | ||||
| /.classpath | ||||
| /.project | ||||
| /.settings | ||||
| /target | ||||
|  | @ -1,6 +0,0 @@ | |||
| # Minecleaner | ||||
| 
 | ||||
| Minecleaner is a Minecraft Implementation of the classic game "Minesweeper". Made using [Paper](https://papermc.io/). | ||||
| 
 | ||||
| ## Important | ||||
| Before opening an issue on the [GitHub Repo](https://github.com/LunarAkai/Minecleaner) of this Project, please check the issues page on my personal git server [here](https://git.lunarakai.de/LunarAkai/NewMinecleaner/issues) to see if this Bug / Issue is already on my list. | ||||
							
								
								
									
										4
									
								
								pom.xml
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								pom.xml
									
										
									
									
									
								
							|  | @ -6,7 +6,7 @@ | |||
| 
 | ||||
|     <groupId>de.lunarakai</groupId> | ||||
|     <artifactId>Minecleaner</artifactId> | ||||
|     <version>1.2.0-dev</version> | ||||
|     <version>1.1.4</version> | ||||
|     <packaging>jar</packaging> | ||||
| 
 | ||||
|     <name>Minecleaner</name> | ||||
|  | @ -86,7 +86,7 @@ | |||
|         <dependency> | ||||
|             <groupId>io.papermc.paper</groupId> | ||||
|             <artifactId>paper-api</artifactId> | ||||
|             <version>1.21.3-R0.1-SNAPSHOT</version> | ||||
|             <version>1.20.4-R0.1-SNAPSHOT</version> | ||||
|             <scope>provided</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|  |  | |||
|  | @ -2,14 +2,10 @@ package de.lunarakai.minecleaner; | |||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.util.Arrays; | ||||
| import java.util.Collection; | ||||
| import java.util.HashMap; | ||||
| import java.util.Iterator; | ||||
| import java.util.UUID; | ||||
| import java.util.logging.Level; | ||||
| import de.lunarakai.minecleaner.utils.MinecleanerUtils; | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.Location; | ||||
| import org.bukkit.block.Block; | ||||
| import org.bukkit.configuration.ConfigurationSection; | ||||
|  | @ -101,13 +97,6 @@ public class ArenaList { | |||
|         save(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * checks for any other arena that might be at the same location as the new MinecleanerArena | ||||
|      * | ||||
|      * @param newArena  the new Arena that is set to be created | ||||
|      * @return          true if another MinecleanerArena (or at least one Block of another arena) is at the same location as newArena otherwise false | ||||
|      * @see             MinecleanerArena | ||||
|      */ | ||||
|     public boolean collidesWithArena(MinecleanerArena newArena) { | ||||
|         for(Location location : newArena.getBlocks()) { | ||||
|             if(arenaBlocks.get(location) != null) { | ||||
|  | @ -117,74 +106,16 @@ public class ArenaList { | |||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     public void setArenaForPlayers(Player[] players, MinecleanerArena arena) { | ||||
|     public void setArenaForPlayer(Player player, MinecleanerArena arena) { | ||||
|         if(arena != null) { | ||||
|             for(int i = 0; i < players.length; i++) { | ||||
|                 playersInArena.put(players[i].getUniqueId(), arena); | ||||
|             } | ||||
|             playersInArena.put(player.getUniqueId(), arena); | ||||
|         } else { | ||||
|             for(int i = 0; i < players.length; i++) { | ||||
|                 playersInArena.remove(players[i].getUniqueId()); | ||||
|             } | ||||
|             playersInArena.remove(player.getUniqueId()); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public MinecleanerArena getPlayerArena(Player player) { | ||||
|         if(playersInArena.get(player.getUniqueId()) == null) { | ||||
|             return null; | ||||
|         } | ||||
|         int arraySize = MinecleanerUtils.isPlayerInGroup(plugin, player) ? plugin.getGroupManager().getGroupSize(player) : 1; | ||||
|         Player[] players = new Player[arraySize]; | ||||
| 
 | ||||
|         if(plugin.getGroupManager().getGroup(player) != null) { | ||||
|             int i = 0; | ||||
|             for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { | ||||
|                 Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); | ||||
|                 players[i] = iteratorPlayer; | ||||
|                 i++; | ||||
|             } | ||||
|         } else { | ||||
|             Arrays.fill(players, player); | ||||
|         } | ||||
|         return getPlayerArena(players); | ||||
|     } | ||||
| 
 | ||||
|     public MinecleanerArena getPlayerArena(Player[] players) { | ||||
|         return playersInArena.get(players[0].getUniqueId()); | ||||
| //        if(plugin.getGroupManager().getGroup(players[0]) != null) { | ||||
| //            if(players.length == 1) { | ||||
| //                return null; | ||||
| //            } | ||||
| //            MinecleanerArena[] arenas = new MinecleanerArena[players.length]; | ||||
| //            for(int i = 0; i < players.length; i++) { | ||||
| //                if(playersInArena.get(players[i].getUniqueId()) != null) { | ||||
| //                    if(playersInArena.get(Bukkit.getPlayer(plugin.getGroupManager().getGroup(players[0]).getOwner()).getUniqueId()) != null)  { | ||||
| //                        arenas[i] = playersInArena.get(players[i].getUniqueId()); | ||||
| //                        continue; | ||||
| //                    } | ||||
| //                    arenas[i] = null; | ||||
| //                } else { | ||||
| //                    arenas = null; | ||||
| //                } | ||||
| //            } | ||||
| //            if(playersInArena.get(players[0].getUniqueId()) == null)  { | ||||
| //                return null; | ||||
| //            } | ||||
| // | ||||
| //            if(arenas != null && arenas[0] != null) { | ||||
| //                MinecleanerArena[] finalArenas = arenas; | ||||
| //                boolean match = Arrays.stream(arenas).allMatch(s -> s.equals(finalArenas[0])); | ||||
| //                if(match) { | ||||
| //                    return arenas[0]; | ||||
| //                } else { | ||||
| //                    return null; | ||||
| //                } | ||||
| //            } | ||||
| //            return null; | ||||
| // | ||||
| //        } else { | ||||
| //            return playersInArena.get(players[0].getUniqueId()); | ||||
| //        } | ||||
|         return playersInArena.get(player.getUniqueId()); | ||||
|     } | ||||
| 
 | ||||
|     public MinecleanerArena getArenaAtBlock(Block block) { | ||||
|  | @ -196,30 +127,21 @@ public class ArenaList { | |||
|     } | ||||
| 
 | ||||
|     public void removeArena(MinecleanerArena arena) { | ||||
|         if(arena.hasPlayers()) { | ||||
|             plugin.getManager().leaveArena(arena.getCurrentPlayers(), true, true); | ||||
|         if(arena.hasPlayer()) { | ||||
|             plugin.getManager().leaveArena(arena.getCurrentPlayer(), true); | ||||
|         } | ||||
|          | ||||
|         removeArenaBlockDisplayIDs(arena); | ||||
|         removeArenaBlocks(arena); | ||||
| 
 | ||||
|         arena.removeBlockDisplays(); | ||||
| 
 | ||||
|         arenas.remove(arena.getName()); | ||||
|         save(); | ||||
|     } | ||||
| 
 | ||||
|     private void removeArenaBlocks(MinecleanerArena arena) { | ||||
|         for(Location block : arena.getBlocks()) { | ||||
|             arenaBlocks.remove(block); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private void removeArenaBlockDisplayIDs(MinecleanerArena arena) { | ||||
|         for(UUID id : arena.getBlockDisplays()) { | ||||
|             if(id != null) { | ||||
|                 arenaBlockDisplays.remove(id); | ||||
|             } | ||||
|         } | ||||
|         for(Location block : arena.getBlocks()) {  | ||||
|             arenaBlocks.remove(block); | ||||
|         } | ||||
|         arena.removeBlockDisplays(); | ||||
| 
 | ||||
|         arenas.remove(arena.getName()); | ||||
|         save(); | ||||
|     } | ||||
| }  | ||||
|  |  | |||
|  | @ -1,35 +1,8 @@ | |||
| package de.lunarakai.minecleaner; | ||||
| 
 | ||||
| /** | ||||
|  *  Possible Status of a MinecleanerArena | ||||
|  *  <li>{@link #INACTIVE}</li> | ||||
|  *  <li>{@link #CONFIRM_PLAYING}</li> | ||||
|  *  <li>{@link #PLAYING}</li> | ||||
|  *  <li>{@link #COMPLETED}</li> | ||||
|  * | ||||
|  * @see MinecleanerArena | ||||
|  * | ||||
|  */ | ||||
| public enum ArenaStatus { | ||||
|     /** | ||||
|      * default state | ||||
|      */ | ||||
|     INACTIVE, | ||||
| 
 | ||||
|     /** | ||||
|      * Active when the player (or group leader) has interacted with an {@link #INACTIVE} arena and | ||||
|      * sees the confirmPlayingInventory to decide if they start a Game or not | ||||
|      * @see MinecleanerManager#getConfirmPlayingInventory() | ||||
|      */ | ||||
|     CONFIRM_PLAYING, | ||||
| 
 | ||||
|     /** | ||||
|      * Active when a Player (or Group) has confirmed to start a Minecleaner Game (and while playing) | ||||
|      */ | ||||
|     PLAYING, | ||||
| 
 | ||||
|     /** | ||||
|      * Active when a Player (or Group) has either won or lost a Mineclenaer Game and the Arena the scheduled for a reset -> {@link #INACTIVE} | ||||
|      */ | ||||
|     COMPLETED | ||||
| } | ||||
|  |  | |||
|  | @ -10,10 +10,11 @@ import java.util.ArrayList; | |||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
| import java.util.UUID; | ||||
| 
 | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.TextComponent; | ||||
| import net.md_5.bungee.api.ChatColor; | ||||
| import org.bukkit.Bukkit; | ||||
| import net.md_5.bungee.api.ChatMessageType; | ||||
| import net.md_5.bungee.api.chat.BaseComponent; | ||||
| import org.bukkit.Location; | ||||
| import org.bukkit.Material; | ||||
| import org.bukkit.World; | ||||
|  | @ -43,7 +44,7 @@ public class MinecleanerArena { | |||
|     private TextDisplay textDisplay; | ||||
|     private boolean hasMadeFirstClick = false; | ||||
|     private int flagsPlaced = 0; | ||||
|     private Player[] currentPlayers; | ||||
|     private Player currentPlayer; | ||||
|     private long currentGameStartTime; | ||||
|     private long ingameTime; | ||||
|     private Game currentMinecleanerGame; | ||||
|  | @ -235,13 +236,13 @@ public class MinecleanerArena { | |||
|         new BukkitRunnable() { | ||||
|             @Override | ||||
|                 public void run() { | ||||
|                 if(arenaStatus == ArenaStatus.PLAYING && currentPlayers != null) { | ||||
|                 if(arenaStatus == ArenaStatus.PLAYING && currentPlayer != null) { | ||||
|                     if(!currentMinecleanerGame.gameover) { | ||||
|                         ingameTime++; | ||||
|                     } | ||||
|                     if(plugin.isStatisticsEnabled()) { | ||||
|                         if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayers[0]) != 0 | ||||
|                                 || plugin.getManager().getSettingsValue("timer", currentPlayers[0]) != 0) { | ||||
|                         if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0 | ||||
|                                 || plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { | ||||
|                             updateIngameInfoTexts(); | ||||
|                         } | ||||
|                     } | ||||
|  | @ -254,24 +255,21 @@ public class MinecleanerArena { | |||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     public void addJoiningPlayers(Player[] players) { | ||||
|         Preconditions.checkNotNull(players); | ||||
|     public void addJoiningPlayer(Player player) { | ||||
|         Preconditions.checkNotNull(player); | ||||
|         Preconditions.checkState(arenaStatus == ArenaStatus.INACTIVE); | ||||
|         this.arenaStatus = ArenaStatus.CONFIRM_PLAYING; | ||||
|         this.currentPlayers = players; | ||||
|         this.currentPlayer = player; | ||||
|     } | ||||
| 
 | ||||
|     public void removePlayers() { | ||||
|     public void removePlayer() { | ||||
|         int sizeWidth = BoardSize.boardSizesWidth[widthIndex]; | ||||
|         int sizeHeight = BoardSize.boardSizesHeight[widthIndex]; | ||||
| 
 | ||||
|         this.arenaStatus = ArenaStatus.INACTIVE; | ||||
|         this.currentPlayers = null; | ||||
|         this.currentPlayer = null; | ||||
|         this.currentMinecleanerGame = null; | ||||
| 
 | ||||
|         // load chunk of block -1 and x+1 | ||||
| //        loadBlockChunk(); | ||||
| 
 | ||||
|         for (int x = 0; x < sizeWidth; x++) { | ||||
|             for (int y = 0; y < sizeHeight; y++) { | ||||
|                 setDiplayBlock(x, y, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); | ||||
|  | @ -281,63 +279,6 @@ public class MinecleanerArena { | |||
|         removeTextDisplay(); | ||||
|     } | ||||
| 
 | ||||
| //    private void loadBlockChunk() { | ||||
| // | ||||
| //        BlockFace orientation = getOrientation(); | ||||
| //        Location loc1 = this.getLocation(); | ||||
| //        Location loc2 = this.getLocation(); | ||||
| //        double x; | ||||
| //        double z; | ||||
| // | ||||
| //        switch (orientation) { | ||||
| //            case NORTH: | ||||
| //                // Block -1: | ||||
| //                //  x: +1 | ||||
| //                x = loc1.x() + 3.0; | ||||
| //                loc1 = new Location(loc1.getWorld(), x, loc1.y(), loc1.z()); | ||||
| //                // Block width+1: | ||||
| //                //  x: -1; | ||||
| //                x = loc2.x() - (double) getArenaWidth()/4 - 1; | ||||
| //                loc2 = new Location(loc2.getWorld(), x, loc2.y(), loc2.z()); | ||||
| //                break; | ||||
| //            case EAST: | ||||
| //                // Block -1: | ||||
| //                //  z: +1 | ||||
| //                z = loc1.z() + 3.0; | ||||
| //                loc1 = new Location(loc2.getWorld(), loc2.x(), loc2.y(), z); | ||||
| //                // Block width+1: | ||||
| //                //  z: -1; | ||||
| //                z = loc2.z() - (double) getArenaWidth()/4 - 1; | ||||
| //                loc2 = new Location(loc2.getWorld(), loc2.x(), loc2.y(), z); | ||||
| //                break; | ||||
| //            case SOUTH: | ||||
| //                // Block -1: | ||||
| //                //  x: -1 | ||||
| //                x = loc1.x() - 3.0; | ||||
| //                loc1 = new Location(loc1.getWorld(), x, loc1.y(), loc1.z()); | ||||
| //                // Block width+1: | ||||
| //                //  x: +1; | ||||
| //                x = loc2.x() + (double) getArenaWidth()/4 + 1; | ||||
| //                loc2 = new Location(loc2.getWorld(), x, loc2.y(), loc2.z()); | ||||
| //                break; | ||||
| //            case WEST: | ||||
| //                // Block -1: | ||||
| //                //  z: -1 | ||||
| //                z = loc1.z() - 3.0 ; | ||||
| //                loc1 = new Location(loc2.getWorld(), loc2.x(), loc2.y(), z); | ||||
| //                // Block width+1: | ||||
| //                //  z: +1; | ||||
| //                z = loc2.z() + (double) getArenaWidth()/4 - 1; | ||||
| //                loc2 = new Location(loc2.getWorld(), loc2.x(), loc2.y(), z); | ||||
| //                break; | ||||
| //        } | ||||
| // | ||||
| //        plugin.getLogger().log(Level.WARNING, "Loc1: " + loc1); | ||||
| //        plugin.getLogger().log(Level.WARNING, "Loc2: " + loc2); | ||||
| //        loc1.getWorld().getChunkAt(loc1).load(); | ||||
| //        loc2.getWorld().getChunkAt(loc2).load(); | ||||
| //    } | ||||
| 
 | ||||
|     public void showStartHeads() { | ||||
|         int width = BoardSize.boardSizesWidth[widthIndex]; | ||||
|         int height = BoardSize.boardSizesHeight[widthIndex]; | ||||
|  | @ -382,8 +323,8 @@ public class MinecleanerArena { | |||
|     } | ||||
| 
 | ||||
|     private void showTextDisplay() { | ||||
|         Player[] players = this.getCurrentPlayers(); | ||||
|         World world = players[0].getWorld(); | ||||
|         Player player = this.getCurrentPlayer(); | ||||
|         World world = player.getWorld(); | ||||
| 
 | ||||
|         double textCenterX = centerLocation.getX(); | ||||
|         double textCenterY = centerLocation.getY() + ((double) BoardSize.boardSizesHeight[widthIndex] / 3 - 2.75 - widthIndex); | ||||
|  | @ -417,7 +358,7 @@ public class MinecleanerArena { | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         Location textDisplayLocation = new Location(players[0].getWorld(), textCenterX, textCenterY, textCenterZ); | ||||
|         Location textDisplayLocation = new Location(player.getWorld(), textCenterX, textCenterY, textCenterZ); | ||||
| 
 | ||||
|         textDisplay = world.spawn(textDisplayLocation.add(-1, 2 + widthIndex, -0.25), TextDisplay.class, textdisplay -> { | ||||
|             Transformation transformation = textdisplay.getTransformation(); | ||||
|  | @ -445,14 +386,12 @@ public class MinecleanerArena { | |||
|     public void updateIngameInfoTexts() { | ||||
|         String timer = ""; | ||||
|         if(plugin.isStatisticsEnabled()) { | ||||
|             if(plugin.getManager().getSettingsValue("timer", currentPlayers[0]) != 0) { | ||||
|             if(plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { | ||||
|                 timer = ChatColor.GOLD + " Zeit: " + MinecleanerStringUtil.timeToString((ingameTime/20)*1000, true)  + " "; | ||||
|             } | ||||
|             if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayers[0]) != 0 && plugin.isStatisticsEnabled()) { | ||||
|             if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0 && plugin.isStatisticsEnabled()) { | ||||
|                 String componentActionBar = ChatColor.GREEN + "Flaggen gesetzt: " + flagsPlaced + ChatColor.RED + "  Minen insgesamt: " + BoardSize.mineCounter[widthIndex]; | ||||
|                 for(int i = 0; i < currentPlayers.length; i++) { | ||||
|                     currentPlayers[i].sendActionBar(Component.text(componentActionBar + " " + timer)); | ||||
|                 } | ||||
|                 currentPlayer.sendActionBar(Component.text(componentActionBar + " " + timer)); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|  | @ -497,15 +436,11 @@ public class MinecleanerArena { | |||
|         if (currentMinecleanerGame != null && !currentMinecleanerGame.gameover) { | ||||
|             Cell cell = currentMinecleanerGame.getCell(x, y); | ||||
|             if (!cell.isRevealed()) { | ||||
|                 Player[] players = this.currentPlayers; | ||||
|                 Player player = this.currentPlayer; | ||||
| 
 | ||||
|                 currentMinecleanerGame.flag(x, y); | ||||
|                 if (currentMinecleanerGame.gameover) { | ||||
|                     Bukkit.getScheduler().runTaskLater(plugin, () -> { | ||||
|                          arenaStatus = ArenaStatus.COMPLETED; | ||||
|                     }, 5L); | ||||
| 
 | ||||
|                     plugin.getManager().handleGameover(players, this, true); | ||||
|                     plugin.getManager().handleGameover(player, this, true); | ||||
|                 } | ||||
|                 if (cell.isFlagged() == true) { | ||||
|                     flagsPlaced = flagsPlaced + 1; | ||||
|  | @ -525,7 +460,7 @@ public class MinecleanerArena { | |||
|         if (currentMinecleanerGame != null && !currentMinecleanerGame.gameover) { | ||||
|             Cell cell = currentMinecleanerGame.getCell(x, y); | ||||
|             if (!cell.isFlagged()) { | ||||
|                 Player[] players = this.currentPlayers; | ||||
|                 Player player = this.currentPlayer; | ||||
| 
 | ||||
|                 if (!hasMadeFirstClick) { | ||||
|                     currentMinecleanerGame.firstClick(x, y); | ||||
|  | @ -536,10 +471,7 @@ public class MinecleanerArena { | |||
|                 setBlockForCellType(x, y, cell); | ||||
| 
 | ||||
|                 if (currentMinecleanerGame.gameover) { | ||||
|                     Bukkit.getScheduler().runTaskLater(plugin, () -> { | ||||
|                         arenaStatus = ArenaStatus.COMPLETED; | ||||
|                     }, 5L); | ||||
|                     plugin.getManager().handleGameover(players, this, !(cell.isRevealed() && cell.isExploded())); | ||||
|                     plugin.getManager().handleGameover(player, this, !(cell.isRevealed() && cell.isExploded())); | ||||
|                 } else { | ||||
|                     updateIngameInfoTexts(); | ||||
|                 } | ||||
|  | @ -694,12 +626,12 @@ public class MinecleanerArena { | |||
|         return name; | ||||
|     } | ||||
| 
 | ||||
|     public boolean hasPlayers() { | ||||
|         return currentPlayers != null; | ||||
|     public boolean hasPlayer() { | ||||
|         return currentPlayer != null; | ||||
|     } | ||||
| 
 | ||||
|     public Player[] getCurrentPlayers() { | ||||
|         return currentPlayers; | ||||
|     public Player getCurrentPlayer() { | ||||
|         return currentPlayer; | ||||
|     } | ||||
| 
 | ||||
|     public Location getLocation() { | ||||
|  | @ -728,16 +660,10 @@ public class MinecleanerArena { | |||
|         return currentGameStartTime; | ||||
|     } | ||||
| 
 | ||||
|     public Game getCurrentMinecleanerGame() { return currentMinecleanerGame; } | ||||
| 
 | ||||
|     public int getWidthIndex() { | ||||
|         return widthIndex; | ||||
|     } | ||||
| 
 | ||||
|     public void setArenaStaus(ArenaStatus status) { | ||||
|         this.arenaStatus = status; | ||||
|     } | ||||
| 
 | ||||
|     private int getRotationYaw() { | ||||
|         return switch (orientation) { | ||||
|             case EAST -> 90; | ||||
|  | @ -746,5 +672,4 @@ public class MinecleanerArena { | |||
|             default -> 0; | ||||
|         }; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -1,155 +0,0 @@ | |||
| package de.lunarakai.minecleaner; | ||||
| 
 | ||||
| import de.lunarakai.minecleaner.utils.ChatUtils; | ||||
| import java.util.HashSet; | ||||
| import java.util.Iterator; | ||||
| import java.util.Set; | ||||
| import java.util.UUID; | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| public class MinecleanerGroupManager { | ||||
| 
 | ||||
|     public class MinecleanerGroup { | ||||
| 
 | ||||
|         public UUID owner; | ||||
|         public HashSet<UUID> players; | ||||
|         public Set<UUID> invitedPlayers; | ||||
| 
 | ||||
|         public MinecleanerGroup(UUID owner){ | ||||
|             this.owner = owner; | ||||
|             this.players = new HashSet<>(); | ||||
|             this.invitedPlayers = new HashSet<>(); | ||||
| 
 | ||||
|             players.add(owner); | ||||
|         } | ||||
| 
 | ||||
|         public UUID getOwner() { | ||||
|             return owner; | ||||
|         } | ||||
| 
 | ||||
|         public Set<UUID> getInvitedPlayers() { | ||||
|             return invitedPlayers; | ||||
|         } | ||||
| 
 | ||||
|         public HashSet<UUID> getPlayers() { | ||||
|             return players; | ||||
|         } | ||||
| 
 | ||||
|         public void addPlayerToGroup(Player player) { | ||||
|             UUID playerUUID = player.getUniqueId(); | ||||
| 
 | ||||
|             if(!isPlayerInvited(playerUUID)) { | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             invitedPlayers.remove(playerUUID); | ||||
|             players.add(playerUUID); | ||||
|         } | ||||
| 
 | ||||
|         public void removePlayerFromGroup(Player player) { | ||||
|             UUID playerUUID = player.getUniqueId(); | ||||
|             if(getOwner() == playerUUID) { | ||||
|                 for(Iterator<UUID> iterator = getGroup(player).getPlayers().iterator(); iterator.hasNext();) { | ||||
|                     if(getOwner() == iterator.next()) { | ||||
|                         continue; | ||||
|                     } | ||||
|                     Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); | ||||
|                     ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "group.creator.removed"); | ||||
|                 } | ||||
|                 deleteGroup(getGroup(Bukkit.getPlayer(owner))); | ||||
|             } | ||||
|             players.remove(playerUUID); | ||||
|             if(players.size() < 2) { | ||||
|                 ChatUtils.sendSimpleInfoMessage(Bukkit.getPlayer(owner), "group.dismantled.alone"); | ||||
|                 deleteGroup(getGroup(Bukkit.getPlayer(owner))); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public boolean isPlayerInvited(UUID playerUUID) { | ||||
|             return invitedPlayers.contains(playerUUID); | ||||
|         } | ||||
| 
 | ||||
|         public boolean isInGroup(UUID playerUUID) { | ||||
|             return players.contains(playerUUID) || owner.equals(playerUUID); | ||||
|         } | ||||
| 
 | ||||
|         public boolean invitePlayerToGroup(Player player) { | ||||
|             UUID playerUUID = player.getUniqueId(); | ||||
|             if(isPlayerInvited(playerUUID) || isInGroup(playerUUID)) | ||||
|                 return false; | ||||
| 
 | ||||
|             invitedPlayers.add(player.getUniqueId()); | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|         public void removePlayerFromInvitedList(Player player) { | ||||
|             UUID playerUUID = player.getUniqueId(); | ||||
|             if(!isPlayerInvited(playerUUID)) { | ||||
|                 return; | ||||
|             } | ||||
|             invitedPlayers.remove(playerUUID); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private final Set<MinecleanerGroup> groups; | ||||
| 
 | ||||
|     public MinecleanerGroupManager() { | ||||
|         this.groups = new HashSet<>(); | ||||
|     } | ||||
| 
 | ||||
|     public void createGroup(Player player) { | ||||
| 
 | ||||
|         if (getGroup(player) != null) { | ||||
|             return; | ||||
|         } | ||||
|         groups.add(new MinecleanerGroup(player.getUniqueId())); | ||||
|     } | ||||
| 
 | ||||
|     public MinecleanerGroup getGroup(Player player){ | ||||
|         UUID playerUUID = player.getUniqueId(); | ||||
|         for (MinecleanerGroup group : groups) { | ||||
|             if (group.isInGroup(playerUUID)) { | ||||
|                 return group; | ||||
|             } | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      *  loops through all MinecleanerGroups to check if the player is invited to any group | ||||
|      * | ||||
|      * @param player    Minecraft Player | ||||
|      * @return          the MinecleanerGroup the Player is invited to or null | ||||
|      */ | ||||
|     public MinecleanerGroup getInvitedGroup(Player player){ | ||||
|         UUID playerUUID = player.getUniqueId(); | ||||
|         for (MinecleanerGroup group : groups) { | ||||
|             if (group.isPlayerInvited(playerUUID)) { | ||||
|                 return group; | ||||
|             } | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     public void deleteGroup(MinecleanerGroup minecleanerGroup) { | ||||
|         groups.remove(minecleanerGroup); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * removes all MinecleanerGroups | ||||
|      */ | ||||
|     public void deleteAllGroups() { | ||||
|         groups.clear(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Returns the size of the MinecleanerGroup the player is in | ||||
|      * | ||||
|      * @param player    the Minecraft Player | ||||
|      * @return          the size of the group the player is in | ||||
|      */ | ||||
|     public int getGroupSize(Player player) { | ||||
|         return getGroup(player).getPlayers().size(); | ||||
|     } | ||||
| } | ||||
|  | @ -1,11 +1,6 @@ | |||
| package de.lunarakai.minecleaner; | ||||
| 
 | ||||
| import de.lunarakai.minecleaner.utils.ChatUtils; | ||||
| import java.util.Arrays; | ||||
| import java.util.Iterator; | ||||
| import java.util.UUID; | ||||
| import java.util.logging.Level; | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.Location; | ||||
| import org.bukkit.block.Block; | ||||
| import org.bukkit.entity.Player; | ||||
|  | @ -25,6 +20,7 @@ import org.bukkit.event.player.PlayerQuitEvent; | |||
| import org.bukkit.inventory.EquipmentSlot; | ||||
| import org.bukkit.util.RayTraceResult; | ||||
| import org.bukkit.util.Vector; | ||||
| import net.md_5.bungee.api.ChatColor; | ||||
| 
 | ||||
| public class MinecleanerListener implements Listener { | ||||
|     private final MinecleanerPlugin plugin; | ||||
|  | @ -42,58 +38,48 @@ public class MinecleanerListener implements Listener { | |||
|             if(arena != null) { | ||||
|                 e.setCancelled(true); | ||||
|                 MinecleanerArena arenaClicked = plugin.getArenaList().getArenaAtBlock(block); | ||||
|                 if(arenaClicked == arena && arena.getArenaStatus() == ArenaStatus.PLAYING) { | ||||
|                     int d0x = arena.getOrientation().getModX(); | ||||
|                     int d0z = arena.getOrientation().getModZ(); | ||||
|                     int d1x = -d0z; | ||||
|                     int d1z = d0x; | ||||
| 
 | ||||
|                 if(arenaClicked != arena) { | ||||
|                     return; | ||||
|                 } | ||||
|                     if (e.getBlockFace() == arena.getOrientation()) { | ||||
| 
 | ||||
|                 boolean hasRightClicked = false; | ||||
|                 if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { | ||||
|                     hasRightClicked = true; | ||||
|                 } | ||||
|                         Player player = e.getPlayer(); | ||||
|                         RayTraceResult r2 = player.rayTraceBlocks(36.0); | ||||
| 
 | ||||
|                 if(arena.getCurrentMinecleanerGame() != null && !arena.getCurrentMinecleanerGame().gameover && (arena.getArenaStatus() == ArenaStatus.PLAYING || arena.getArenaStatus() == ArenaStatus.COMPLETED)) { | ||||
|                     if(arena.getArenaStatus() == ArenaStatus.PLAYING) { | ||||
|                         int d0x = arena.getOrientation().getModX(); | ||||
|                         int d0z = arena.getOrientation().getModZ(); | ||||
|                         int d1x = -d0z; | ||||
|                         int d1z = d0x; | ||||
|                         if(r2 != null) { | ||||
|                             Vector hitPos = r2.getHitPosition(); | ||||
|                             Vector substract = new Vector(0.5, 0.5, 0.5); | ||||
| 
 | ||||
|                         if (e.getBlockFace() == arena.getOrientation()) { | ||||
|                             Location loc = hitPos.subtract(arena.getLocation().toVector()).subtract(substract).toLocation(player.getWorld()); //(0.5, 0.5, 0.5); // substract 0.5, 0.5, 0.5 | ||||
|                             double lx = loc.getX(); | ||||
|                             double ly = loc.getY(); | ||||
|                             double lz = loc.getZ(); | ||||
|                             double dy = ly + 1.5;  | ||||
|                             double dz = -d1x * lx - d1z * lz + 1.5; | ||||
| 
 | ||||
|                             Player player = e.getPlayer(); | ||||
|                             RayTraceResult r2 = player.rayTraceBlocks(36.0); | ||||
|                             double blockx = (dy / 3.0) * 9.0; | ||||
|                             double blockz = (dz / 3.0) * 9.0; | ||||
| 
 | ||||
|                             if(r2 != null) { | ||||
|                                 Vector hitPos = r2.getHitPosition(); | ||||
|                                 Vector substract = new Vector(0.5, 0.5, 0.5); | ||||
|                             int blockxInt = (int) blockx; | ||||
|                             int blockzInt = (int) blockz; | ||||
|                             blockx -= blockxInt; | ||||
|                             blockz -= blockzInt; | ||||
| 
 | ||||
|                                 Location loc = hitPos.subtract(arena.getLocation().toVector()).subtract(substract).toLocation(player.getWorld()); //(0.5, 0.5, 0.5); // substract 0.5, 0.5, 0.5 | ||||
|                                 double lx = loc.getX(); | ||||
|                                 double ly = loc.getY(); | ||||
|                                 double lz = loc.getZ(); | ||||
|                                 double dy = ly + 1.5; | ||||
|                                 double dz = -d1x * lx - d1z * lz + 1.5; | ||||
| 
 | ||||
|                                 double blockx = (dy / 3.0) * 9.0; | ||||
|                                 double blockz = (dz / 3.0) * 9.0; | ||||
| 
 | ||||
|                                 int blockxInt = (int) blockx; | ||||
|                                 int blockzInt = (int) blockz; | ||||
|                                 blockx -= blockxInt; | ||||
|                                 blockz -= blockzInt; | ||||
| 
 | ||||
|                                 if(blockzInt < arena.getArenaWidth() && blockxInt < arena.getArenaHeight()) { | ||||
|                                     plugin.getManager().handleFieldClick(e.getPlayer(), blockzInt, blockxInt, hasRightClicked); | ||||
|                                 } | ||||
|                                 //player.sendMessage("Arena click! " + blockxInt + " " + blockzInt + " Right Clicked: " + hasRightClicked); | ||||
|                             boolean hasRightClicked = false; | ||||
|                             if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { | ||||
|                                 hasRightClicked = true; | ||||
|                             } | ||||
| 
 | ||||
|                             if(blockzInt < arena.getArenaWidth() && blockxInt < arenaClicked.getArenaHeight()) { | ||||
|                                 plugin.getManager().handleFieldClick(e.getPlayer(), blockzInt, blockxInt, hasRightClicked); | ||||
|                             } | ||||
|                             //player.sendMessage("Arena click! " + blockxInt + " " + blockzInt + " Right Clicked: " + hasRightClicked); | ||||
| 
 | ||||
|                         } | ||||
|                     } | ||||
|                 } else if(arena.hasPlayers() && arena.getArenaStatus() == ArenaStatus.COMPLETED && !hasRightClicked && (plugin.getManager().getSettingsValue("allowmanualreset", e.getPlayer()) == 1)) { | ||||
|                     plugin.getManager().getSchedulerGameOver().cancel(); | ||||
|                     plugin.getLogger().log(Level.INFO, "canceled reset for arena " + arena.getName() + " loc: " + arena.getLocation()); | ||||
|                     plugin.getManager().leaveArena(arenaClicked.getCurrentPlayers(), false, true); | ||||
|                 } | ||||
|             } else { | ||||
|                 arena = plugin.getArenaList().getArenaAtBlock(block); | ||||
|  | @ -101,30 +87,9 @@ public class MinecleanerListener implements Listener { | |||
|                     e.setCancelled(true); | ||||
|                     if(e.getHand() == EquipmentSlot.HAND) { | ||||
|                         if(arena.getArenaStatus() == ArenaStatus.INACTIVE) { | ||||
|                             int arraySize = 1; | ||||
|                             if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) { | ||||
|                                 arraySize = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size(); | ||||
|                             } | ||||
| 
 | ||||
|                             if(plugin.getGroupManager().getGroup(e.getPlayer()) != null && plugin.getGroupManager().getGroup(e.getPlayer()).getOwner() != e.getPlayer().getUniqueId()) { | ||||
|                                 ChatUtils.sendSimpleWarningMessage(e.getPlayer(), "group.game.nopermission"); | ||||
|                                 return; | ||||
|                             } | ||||
|                             Player[] players = new Player[arraySize]; | ||||
| 
 | ||||
|                             if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) { | ||||
|                                 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; | ||||
|                                     i++; | ||||
|                                 } | ||||
|                             } else { | ||||
|                                 Arrays.fill(players, e.getPlayer()); | ||||
|                             } | ||||
|                             plugin.getManager().joinArena(players, arena); | ||||
|                             plugin.getManager().joinArena(e.getPlayer(), arena); | ||||
|                         } else { | ||||
|                             ChatUtils.sendSimpleInfoMessage(e.getPlayer(), "Hier spielt schon jemand anderes"); | ||||
|                             e.getPlayer().sendMessage(ChatColor.YELLOW + "Hier spielt schon jemand anderes"); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|  | @ -150,22 +115,49 @@ public class MinecleanerListener implements Listener { | |||
|                         int slot = e.getRawSlot(); | ||||
|                         boolean hasConfirmed = slot == 1 ? true : false; | ||||
|                         if(hasConfirmed) {   | ||||
|                             Player[] players; | ||||
|                             if(plugin.getGroupManager().getGroup(player) != null) { | ||||
|                                 players = new Player[plugin.getGroupManager().getGroupSize(player)]; | ||||
|                                 players[0] = player; | ||||
|                             } else { | ||||
|                                 players = new Player[1]; | ||||
|                                 players[0] = player; | ||||
|                             } | ||||
|                             plugin.getManager().startGame(players); | ||||
| 
 | ||||
|                             plugin.getManager().startGame(player); | ||||
|                             //player.closeInventory(); | ||||
|                         } | ||||
|                         player.closeInventory(); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             if(e.getInventory().equals(plugin.getManager().getSettingsInventory())) { | ||||
|                 e.setCancelled(true); | ||||
|                 int slot = e.getRawSlot(); | ||||
|                 switch (slot) { | ||||
|                     case 12: { | ||||
|                         if(plugin.getManager().getSettingsValue("additionaldisplay", player) == 0) { | ||||
|                             plugin.getManager().updateSettingsValue("additionaldisplay", 1, player); | ||||
|                             player.closeInventory(); | ||||
|                             player.openInventory(plugin.getManager().showSettingsInventory(player)); | ||||
|                         } else { | ||||
|                             plugin.getManager().updateSettingsValue("additionaldisplay", 0, player); | ||||
|                             player.closeInventory(); | ||||
|                             player.openInventory(plugin.getManager().showSettingsInventory(player)); | ||||
|                         } | ||||
|                         break; | ||||
|                     } | ||||
|                     case 14: { | ||||
|                         if(plugin.getManager().getSettingsValue("timer", player) == 0) { | ||||
|                             plugin.getManager().updateSettingsValue("timer", 1, player); | ||||
|                             player.closeInventory(); | ||||
|                             player.openInventory(plugin.getManager().showSettingsInventory(player)); | ||||
|                         } else { | ||||
|                             plugin.getManager().updateSettingsValue("timer", 0, player); | ||||
|                             if(arena != null) { | ||||
|                                 arena.updateIngameInfoTexts(); | ||||
|                             } | ||||
|                             player.closeInventory(); | ||||
|                             player.openInventory(plugin.getManager().showSettingsInventory(player)); | ||||
|                         } | ||||
|                         break; | ||||
|                     } | ||||
|                     default: { | ||||
|                         break; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|      | ||||
|  | @ -175,18 +167,7 @@ public class MinecleanerListener implements Listener { | |||
|             MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); | ||||
|             if(arena != null) { | ||||
|                 if(arena.getArenaStatus() == ArenaStatus.CONFIRM_PLAYING && e.getInventory().equals(plugin.getManager().getConfirmPlayingInventory())) { | ||||
|                     int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroupSize(player) : 1; | ||||
|                     Player[] players = new Player[arraySize]; | ||||
| 
 | ||||
|                     if(plugin.getGroupManager().getGroup(player) != null) { | ||||
|                         for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { | ||||
|                             Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); | ||||
|                             Arrays.fill(players, iteratorPlayer); | ||||
|                         } | ||||
|                     } else { | ||||
|                         Arrays.fill(players, player); | ||||
|                     } | ||||
|                     plugin.getManager().leaveArena(players, false, true); | ||||
|                     plugin.getManager().leaveArena(player, false); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | @ -197,106 +178,21 @@ public class MinecleanerListener implements Listener { | |||
|         final Player player = e.getPlayer(); | ||||
|         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); | ||||
|         if(arena != null) { | ||||
|             if(plugin.getGroupManager().getGroup(player) == null) { | ||||
|                 if((arena.isTooFarAway(player))) { | ||||
|                     ChatUtils.sendSimpleInfoMessage(player, "arena.common.toofaraway"); | ||||
|                     Player[] players = new Player[] { | ||||
|                             player | ||||
|                     }; | ||||
|                     plugin.getManager().leaveArena(players, false, true); | ||||
|                 } | ||||
|             } else { | ||||
|                 Player ownerPlayer = Bukkit.getPlayer(plugin.getGroupManager().getGroup(player).getOwner()); | ||||
|                 if(ownerPlayer.equals(player)) { | ||||
|                     if(arena.isTooFarAway(ownerPlayer)) { | ||||
| 
 | ||||
|                         for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { | ||||
|                             Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); | ||||
|                             if(iteratorPlayer == ownerPlayer) { | ||||
|                                 ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "arena.common.toofaraway"); | ||||
|                                 continue; | ||||
|                             } | ||||
|                             assert iteratorPlayer != null; | ||||
|                             ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "arena.common.groupleadertoofaraway"); | ||||
|                         } | ||||
|                         Player[] players = new Player[] { | ||||
|                                 ownerPlayer | ||||
|                         }; | ||||
|                         plugin.getManager().leaveArena(players, false, true); | ||||
|                     } | ||||
|                 } | ||||
|             if(arena.isTooFarAway(player)) { | ||||
|                 player.sendMessage(ChatColor.YELLOW + "Du hast dich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen."); | ||||
|                 plugin.getManager().leaveArena(player, false); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @EventHandler | ||||
|     public void onPlayerQuit(PlayerQuitEvent e) { | ||||
|         Player player = e.getPlayer(); | ||||
|         MinecleanerGroupManager groupManager = plugin.getGroupManager(); | ||||
|         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); | ||||
| 
 | ||||
|         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(e.getPlayer()); | ||||
|         if(arena != null) { | ||||
|             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); | ||||
|                 } 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; | ||||
|             } | ||||
|             plugin.getManager().leaveArena(e.getPlayer(), false); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     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; | ||||
|             ChatUtils.sendSimpleInfoMessage(iteratorPlayer, player.getName() + " hat den Server verlassen und wurde aus der Gruppe entfernt."); | ||||
|         } | ||||
|         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; | ||||
|             ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "Die " + plugin.getDisplayedPluginName() + "gruppe in der du dich befindest wurde aufgelöst. Die Person, welche die Gruppe erstellt hat, hat den Server verlassen"); | ||||
|         } | ||||
|         groupManager.deleteGroup(group); | ||||
|         return players; | ||||
|     } | ||||
| 
 | ||||
|     @EventHandler | ||||
|     public void onBlockBurn(BlockBurnEvent e) { | ||||
|         if(plugin.getArenaList().getArenaAtBlock(e.getBlock()) != null) { | ||||
|  |  | |||
|  | @ -1,29 +1,23 @@ | |||
| package de.lunarakai.minecleaner; | ||||
| 
 | ||||
| import de.iani.cubesidestats.api.SettingKey; | ||||
| import de.lunarakai.minecleaner.utils.ChatUtils; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| import java.util.HashMap; | ||||
| import java.util.Iterator; | ||||
| import java.util.List; | ||||
| import java.util.Map.Entry; | ||||
| import java.util.Objects; | ||||
| import java.util.Set; | ||||
| import java.util.UUID; | ||||
| import java.util.function.Consumer; | ||||
| import java.util.logging.Level; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.format.NamedTextColor; | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.Material; | ||||
| import org.bukkit.OfflinePlayer; | ||||
| import org.bukkit.Sound; | ||||
| import org.bukkit.World; | ||||
| import org.bukkit.enchantments.Enchantment; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.event.inventory.InventoryType; | ||||
| import org.bukkit.inventory.Inventory; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
| import org.bukkit.scheduler.BukkitTask; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| import com.google.common.base.Preconditions; | ||||
| import de.iani.cubesidestats.api.PlayerStatistics; | ||||
|  | @ -36,13 +30,12 @@ import de.iani.cubesideutils.bukkit.items.ItemStacks; | |||
| import de.iani.playerUUIDCache.CachedPlayer; | ||||
| import de.lunarakai.minecleaner.game.BoardSize; | ||||
| import de.lunarakai.minecleaner.utils.MinecleanerStringUtil; | ||||
| import net.md_5.bungee.api.ChatColor; | ||||
| 
 | ||||
| // Todo: translatable components verwenden | ||||
| public class MinecleanerManager { | ||||
|     private final MinecleanerPlugin plugin; | ||||
|     private final Inventory confirmPlayingInventory; | ||||
|     private final HashMap<Integer, String> sizes; | ||||
|     public BukkitTask schedulerGameOver; | ||||
| 
 | ||||
|     // Statistics | ||||
|     private final StatisticKey statisticsWonGamesTotal; | ||||
|  | @ -56,8 +49,6 @@ public class MinecleanerManager { | |||
|     private Inventory settingsInventory; | ||||
|     private SettingKey minecleanerSettingTimerKey; | ||||
|     private SettingKey minecleanerAdditionalDisplaySettingKey; | ||||
|     private SettingKey minecleanerResetTimerSettingKey; | ||||
|     private SettingKey minecleanerAllowManualResetSettingKey; | ||||
| 
 | ||||
|     public MinecleanerManager(MinecleanerPlugin plugin) { | ||||
|         this.plugin = plugin; | ||||
|  | @ -69,8 +60,10 @@ public class MinecleanerManager { | |||
|         this.sizes.put(3, "experte"); | ||||
| 
 | ||||
|         this.confirmPlayingInventory = plugin.getServer().createInventory(null, InventoryType.HOPPER, plugin.getDisplayedPluginName() + " starten?"); | ||||
|         this.confirmPlayingInventory.setItem(1, ItemStacks.rename(new ItemStack(Material.GREEN_CONCRETE), NamedTextColor.GREEN + "Bestätigen")); | ||||
|         this.confirmPlayingInventory.setItem(3, ItemStacks.rename(new ItemStack(Material.GREEN_CONCRETE), NamedTextColor.RED + "Abbrechen")); | ||||
|         this.confirmPlayingInventory.setItem(1, | ||||
|             ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.GREEN_CONCRETE), ChatColor.GREEN + "Bestätigen"))); | ||||
|         this.confirmPlayingInventory.setItem(3, | ||||
|             ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.RED_CONCRETE), ChatColor.RED + "Abbrechen"))); | ||||
| 
 | ||||
|         // Settings | ||||
| 
 | ||||
|  | @ -83,14 +76,6 @@ public class MinecleanerManager { | |||
|             minecleanerAdditionalDisplaySettingKey.setDefault(0); | ||||
|             minecleanerAdditionalDisplaySettingKey.setDisplayName("Zusätzliche Anzeige in der Action Bar"); | ||||
| 
 | ||||
|             minecleanerResetTimerSettingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings.resettime"); | ||||
|             minecleanerResetTimerSettingKey.setDefault(5); | ||||
|             minecleanerResetTimerSettingKey.setDisplayName("Dauer die das Spielfeld für das Zurücksetzen brauchen soll"); | ||||
| 
 | ||||
|             minecleanerAllowManualResetSettingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings.allowmanualreset"); | ||||
|             minecleanerAllowManualResetSettingKey.setDefault(0); | ||||
|             minecleanerAllowManualResetSettingKey.setDisplayName("Erlaube das manuelle Zurücksetzen des Spielfeldes"); | ||||
| 
 | ||||
|             this.settingsInventory = plugin.getServer().createInventory(null, InventoryType.CHEST, | ||||
|                     plugin.getDisplayedPluginName() + " Einstellungen"); | ||||
| 
 | ||||
|  | @ -133,173 +118,71 @@ public class MinecleanerManager { | |||
|             this.statisticsTimeRecord = null; | ||||
|             this.statisticsTotalGamesPlayed = null; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     public void joinArena(Player[] players, MinecleanerArena arena) { | ||||
|         if ((plugin.getGroupManager().getGroup(players[0]) == null && !players[0].hasPermission(MinecleanerPlugin.PERMISSION_PLAY)) || (plugin.getGroupManager().getGroup(players[0]) != null && !Bukkit.getPlayer(plugin.getGroupManager().getGroup(players[0]).getOwner()).hasPermission(MinecleanerPlugin.PERMISSION_PLAY))) { | ||||
|     public void joinArena(Player player, MinecleanerArena arena) { | ||||
|         if (!player.hasPermission(MinecleanerPlugin.PERMISSION_PLAY)) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         Preconditions.checkArgument(plugin.getArenaList().getPlayerArena(players) == null, "player is in an arena"); | ||||
|         Preconditions.checkArgument(plugin.getArenaList().getPlayerArena(player) == null, "player is in an arena"); | ||||
|         Preconditions.checkArgument(arena.getArenaStatus() == ArenaStatus.INACTIVE, "arena is in use"); | ||||
|         arena.addJoiningPlayer(player); | ||||
|         plugin.getArenaList().setArenaForPlayer(player, arena); | ||||
|         player.openInventory(confirmPlayingInventory); | ||||
|     } | ||||
| 
 | ||||
|         arena.addJoiningPlayers(players); | ||||
|         plugin.getArenaList().setArenaForPlayers(players, arena); | ||||
|         for(int i = 0; i < players.length; i++) { | ||||
|             if(plugin.getGroupManager().getGroup(players[i]) == null) { | ||||
|                 players[i].openInventory(confirmPlayingInventory); | ||||
|                 break; | ||||
|             } | ||||
|             if(players[i] == Bukkit.getPlayer(plugin.getGroupManager().getGroup(players[i]).getOwner())) { | ||||
|                 players[i].openInventory(confirmPlayingInventory); | ||||
|             } | ||||
|     public void leaveArena(Player player, boolean message) { | ||||
|         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); | ||||
|         Preconditions.checkArgument(arena != null, "player is in no arena"); | ||||
|         arena.removePlayer(); | ||||
|         plugin.getArenaList().setArenaForPlayer(player, null); | ||||
|         if(message) { | ||||
|             player.sendMessage(ChatColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public void leaveArena(Player[] players, boolean message, boolean reset) { | ||||
|         getGroupLeaderOrPlayer player = getGetGroupLeaderOrPlayer(players); | ||||
|         Player[] players1 = player.group() != null ? new Player[player.group().getPlayers().size()] : new Player[1]; | ||||
|         if(plugin.getGroupManager().getGroup(players[0]) != null) { | ||||
|             int i = 0; | ||||
|             for(Iterator<UUID> iterator = player.group().getPlayers().iterator(); iterator.hasNext();) { | ||||
|                 Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); | ||||
|                 players1[i] = iteratorPlayer; | ||||
|                 i++; | ||||
|             } | ||||
|         } else { | ||||
|             players1 = players; | ||||
|         } | ||||
| 
 | ||||
|         Preconditions.checkArgument(player.arena() != null, "player is in no arena"); | ||||
| 
 | ||||
|         if(reset) { | ||||
|             player.arena().setArenaStaus(ArenaStatus.INACTIVE); | ||||
|             for(int i = 0; i < players1.length; i++) { | ||||
|                 players1[i].closeInventory(); | ||||
|             } | ||||
|             player.arena().removePlayers(); | ||||
|             if(message) { | ||||
|                 for(int i = 0; i < players.length; i++) { | ||||
|                     players1[i].sendMessage(NamedTextColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         plugin.getArenaList().setArenaForPlayers(players1, null); | ||||
|     } | ||||
| 
 | ||||
|     private @NotNull getGroupLeaderOrPlayer getGetGroupLeaderOrPlayer(Player[] players) { | ||||
|         MinecleanerGroupManager.MinecleanerGroup group = null; | ||||
|         MinecleanerArena arena; | ||||
|         if(plugin.getGroupManager().getGroup(players[0]) != null) { | ||||
|             group = plugin.getGroupManager().getGroup(players[0]); | ||||
|             arena = plugin.getArenaList().getPlayerArena(Objects.requireNonNull(Bukkit.getPlayer(group.getOwner()))); | ||||
|         } else { | ||||
|             arena = plugin.getArenaList().getPlayerArena(players); | ||||
|         } | ||||
|         return new getGroupLeaderOrPlayer(group, arena); | ||||
|     } | ||||
| 
 | ||||
|     private record getGroupLeaderOrPlayer(MinecleanerGroupManager.MinecleanerGroup group, MinecleanerArena arena) { | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     public void startGame(Player[] players) { | ||||
|         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(players); | ||||
|     public void startGame(Player player) { | ||||
|         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); | ||||
|         Preconditions.checkArgument(arena != null, "player is in no arena"); | ||||
|         Preconditions.checkState(arena.getArenaStatus() == ArenaStatus.CONFIRM_PLAYING, "not confirming playing status"); | ||||
|         arena.startNewGame(); | ||||
| 
 | ||||
| 
 | ||||
|         if(plugin.getGroupManager().getGroup(players[0]) != null) { | ||||
|             for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(players[0]).getPlayers().iterator(); iterator.hasNext();) { | ||||
|                 Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); | ||||
|                 assert iteratorPlayer != null; | ||||
|                 ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "Du hast eine neue Runde " + plugin.getDisplayedPluginName() + " gestartet."); | ||||
|             } | ||||
|         } else { | ||||
|             ChatUtils.sendSimpleInfoMessage(players[0], "Du hast eine neue Runde " + plugin.getDisplayedPluginName() + " gestartet."); | ||||
|         } | ||||
|         player.sendMessage(ChatColor.YELLOW + "Du hast eine neue Runde " + plugin.getDisplayedPluginName() + " gestartet."); | ||||
|     } | ||||
| 
 | ||||
|     public void handleGameover(Player[] player, MinecleanerArena arena, boolean isSuccessfullyCleared) { | ||||
| 
 | ||||
|         if(plugin.getGroupManager().getGroup(player[0]) != null) { | ||||
|             World world = player[0].getWorld(); | ||||
|             MinecleanerGroupManager.MinecleanerGroup group = plugin.getGroupManager().getGroup(player[0]); | ||||
| 
 | ||||
|             if(!isSuccessfullyCleared) { | ||||
|                 world.playSound(Bukkit.getPlayer(group.getOwner()).getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); | ||||
|                 for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) { | ||||
|                         Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); | ||||
|                     assert iteratorPlayer != null; | ||||
|                     ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "Game Over! Ihr konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!"); | ||||
|                     if(plugin.isStatisticsEnabled()) { | ||||
| 
 | ||||
|                         PlayerStatistics ps = plugin.getCubesideStatistics().getStatistics(iteratorPlayer.getUniqueId()); | ||||
|                         ps.increaseScore(statisticsTotalGamesPlayed.get(arena.getWidthIndex()), 1); | ||||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|                 arena.showMines(); | ||||
|                 scheduleArenaReset(Bukkit.getPlayer(plugin.getGroupManager().getGroup(player[0]).getOwner()), arena); | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             int millis = (int) (System.currentTimeMillis() - arena.getCurrentGameStartTime()); | ||||
| 
 | ||||
| 
 | ||||
|             world.playSound(Bukkit.getPlayer(group.getOwner()).getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f); | ||||
|             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(Bukkit.getPlayer(group.getOwner()), arena); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         World world = player[0].getWorld(); | ||||
|     public void handleGameover(Player player, MinecleanerArena arena, boolean isSuccessfullyCleared) { | ||||
|         World world = player.getWorld(); | ||||
|         PlayerStatistics ps = null; | ||||
|         StatisticKey sg = null; | ||||
|         if(plugin.isStatisticsEnabled()) { | ||||
|             ps = plugin.getCubesideStatistics().getStatistics(player[0].getUniqueId()); | ||||
|             ps = plugin.getCubesideStatistics().getStatistics(player.getUniqueId()); | ||||
|             sg = statisticsTotalGamesPlayed.get(arena.getWidthIndex()); | ||||
|         } | ||||
| 
 | ||||
|         if(!isSuccessfullyCleared) { | ||||
|             world.playSound(player[0].getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); | ||||
|             ChatUtils.sendSimpleInfoMessage(player[0], "Game Over! Du konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!"); | ||||
|             world.playSound(player.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); | ||||
|             player.sendMessage(ChatColor.YELLOW + "Game Over! Du konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!"); | ||||
|             arena.showMines(); | ||||
|              | ||||
|             if(sg != null && plugin.isStatisticsEnabled()) { | ||||
|                 ps.increaseScore(sg, 1); | ||||
|             } | ||||
| 
 | ||||
|             scheduleArenaReset(player[0], arena); | ||||
|             Bukkit.getScheduler().runTaskLater(plugin, () -> { | ||||
|                 if(arena.getCurrentPlayer() == null) { | ||||
|                     arena.removePlayer();  | ||||
|                  } else { | ||||
|                     leaveArena(player, false); | ||||
|                  } | ||||
|             }, 100L); | ||||
|             return; | ||||
|         } | ||||
|         int millis = (int) (System.currentTimeMillis() - arena.getCurrentGameStartTime()); | ||||
|          | ||||
|         world.playSound(player[0].getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f); | ||||
|         world.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f); | ||||
| 
 | ||||
|         if(sg != null && plugin.isStatisticsEnabled()) { | ||||
|             ps.increaseScore(sg, 1); | ||||
|  | @ -316,83 +199,57 @@ public class MinecleanerManager { | |||
|             if(sg != null) { | ||||
|                 ps.minScore(sg, millis, isUpdated -> { | ||||
|                     if(isUpdated != null && isUpdated) { | ||||
|                         player[0].sendMessage(NamedTextColor.GOLD + "Herzlichen Glückwunsch! Du hast eine neue Bestzeit erreicht! " + NamedTextColor.RED + MinecleanerStringUtil.timeToString(millis, false) ); | ||||
|                         player.sendMessage(ChatColor.GOLD + "Herzlichen Glückwunsch! Du hast eine neue Bestzeit erreicht! " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) ); | ||||
|                     } else { | ||||
|                         player[0].sendMessage(NamedTextColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + NamedTextColor.RED + MinecleanerStringUtil.timeToString(millis, false) + NamedTextColor.YELLOW + " erfolgreich lösen!"); | ||||
|                         player.sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!"); | ||||
|                     } | ||||
|                 }); | ||||
|             } | ||||
| 
 | ||||
|             int wIndex = arena.getWidthIndex(); | ||||
|             increaseScore(wIndex, ps, 1); | ||||
|         } else { | ||||
|             player[0].sendMessage(NamedTextColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + NamedTextColor.RED + MinecleanerStringUtil.timeToString(millis, false) + NamedTextColor.YELLOW + " erfolgreich lösen!"); | ||||
|         } | ||||
| 
 | ||||
|         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) { | ||||
|         plugin.getLogger().log(Level.INFO, "scheduled reset for arena '" + arena.getName() + "', loc: " + arena.getLocation() + " ArenaStatus: " + arena.getArenaStatus() + " in " + plugin.getManager().getSettingsValue("resettime", player) * 20 + " ticks. Current Players: " + Arrays.toString(arena.getCurrentPlayers())); | ||||
|         Bukkit.getScheduler().runTaskLater(plugin, () -> { | ||||
|             plugin.getLogger().log(Level.INFO, "ArenaStatus for arena '" + arena.getName() + "', loc: " + arena.getLocation() + " after 5 Ticks (should be completed): " + arena.getArenaStatus()); | ||||
|         }, 5L); | ||||
|         schedulerGameOver = Bukkit.getScheduler().runTaskLater(plugin, () -> { | ||||
|             if(arena.getArenaStatus() == ArenaStatus.COMPLETED) { | ||||
|                 if (arena.getCurrentPlayers() == null) { | ||||
|                     arena.removePlayers(); | ||||
|                 } else { | ||||
|                     int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroupSize(player) : 1; | ||||
|                     Player[] players = new Player[arraySize]; | ||||
|                     int i = 0; | ||||
|                     if(plugin.getGroupManager().getGroup(player) != null) { | ||||
|                         for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { | ||||
|                             Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); | ||||
|                             players[i] = iteratorPlayer; | ||||
|                             i++; | ||||
|                         } | ||||
|                     } else { | ||||
|                         Arrays.fill(players, player); | ||||
|                     } | ||||
|                     leaveArena(players, false, true); | ||||
|             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; | ||||
|                 } | ||||
|             } | ||||
|         }, plugin.getManager().getSettingsValue("resettime", player) * 20L); | ||||
|         } else { | ||||
|             player.sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!"); | ||||
|         } | ||||
| 
 | ||||
|         Bukkit.getScheduler().runTaskLater(plugin, () -> { | ||||
|             if(arena.getCurrentPlayer() == null) { | ||||
|                arena.removePlayer();  | ||||
|             } else { | ||||
|                 leaveArena(player, false); | ||||
|             } | ||||
|         }, 100L); | ||||
|     } | ||||
| 
 | ||||
|     public void clearAllArenas() { | ||||
|         for(MinecleanerArena arena : plugin.getArenaList().getArenas()) { | ||||
|             if(arena.hasPlayers()) { | ||||
|                 leaveArena(arena.getCurrentPlayers(), true, true); | ||||
|             if(arena.hasPlayer()) { | ||||
|                 leaveArena(arena.getCurrentPlayer(), true); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     public void handleFieldClick(@NotNull Player player, int x, int y, boolean hasRightClicked) { | ||||
|         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); | ||||
|         Preconditions.checkArgument(arena != null, "player is in no arena"); | ||||
|  | @ -507,6 +364,31 @@ public class MinecleanerManager { | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public Inventory showSettingsInventory(Player player) { | ||||
|         int current = getSettingsValue("additionaldisplay", player); | ||||
| 
 | ||||
|         if(current == 0) { | ||||
|             settingsInventory.setItem(12, | ||||
|                     ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.NAME_TAG), ChatColor.RED + "Zusätzliche Anzeige in der Action Bar"))); | ||||
|         } else { | ||||
|             settingsInventory.setItem(12, | ||||
|                     ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.NAME_TAG), ChatColor.GREEN + "Zusätzliche Anzeige in der Action Bar"))); | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         current = getSettingsValue("timer", player); | ||||
| 
 | ||||
|         if(current == 0) { | ||||
|             settingsInventory.setItem(14, | ||||
|                     ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CLOCK), ChatColor.RED + "Timer anzeigen"))); | ||||
|         } else { | ||||
|             settingsInventory.setItem(14, | ||||
|                     ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CLOCK), ChatColor.GREEN + "Timer anzeigen"))); | ||||
|         } | ||||
| 
 | ||||
|         return settingsInventory; | ||||
|     } | ||||
| 
 | ||||
|     public int getSettingsValue(String settingsKeyString, Player player) { | ||||
|         PlayerStatistics playerStatistics = plugin.getCubesideStatistics().getStatistics(player.getUniqueId()); | ||||
|         SettingKey settingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings." + settingsKeyString); | ||||
|  | @ -539,8 +421,4 @@ public class MinecleanerManager { | |||
|     public SettingKey getMinecleanerAdditionalDisplaySettingKey() { | ||||
|         return minecleanerAdditionalDisplaySettingKey; | ||||
|     } | ||||
| 
 | ||||
|     public SettingKey getMinecleanerResetTimeSettingKey() {return minecleanerResetTimerSettingKey; } | ||||
| 
 | ||||
|     public BukkitTask getSchedulerGameOver() { return schedulerGameOver; } | ||||
| } | ||||
|  |  | |||
|  | @ -1,30 +1,17 @@ | |||
| package de.lunarakai.minecleaner; | ||||
| 
 | ||||
| 
 | ||||
| import de.lunarakai.minecleaner.commands.CreateCommand; | ||||
| import de.lunarakai.minecleaner.commands.DeleteCommand; | ||||
| import de.lunarakai.minecleaner.commands.DeletePlayerScoreCommand; | ||||
| import de.lunarakai.minecleaner.commands.HelpCommand; | ||||
| import de.lunarakai.minecleaner.commands.InfoCommand; | ||||
| import de.lunarakai.minecleaner.commands.ListCommand; | ||||
| import de.lunarakai.minecleaner.commands.ListPlayersInArenaCommand; | ||||
| import de.lunarakai.minecleaner.commands.SettingsCommand; | ||||
| import de.lunarakai.minecleaner.commands.StatsCommand; | ||||
| import de.lunarakai.minecleaner.commands.groups.AcceptCommand; | ||||
| import de.lunarakai.minecleaner.commands.groups.DenyCommand; | ||||
| import de.lunarakai.minecleaner.commands.groups.DismantleGroupCommand; | ||||
| import de.lunarakai.minecleaner.commands.groups.InviteCommand; | ||||
| import de.lunarakai.minecleaner.commands.groups.ListGroupMembersCommand; | ||||
| import net.kyori.adventure.key.Key; | ||||
| import net.kyori.adventure.translation.GlobalTranslator; | ||||
| import net.kyori.adventure.translation.TranslationRegistry; | ||||
| import net.kyori.adventure.util.UTF8ResourceBundleControl; | ||||
| import org.bukkit.plugin.java.JavaPlugin; | ||||
| import de.iani.cubesidestats.api.CubesideStatisticsAPI; | ||||
| import de.iani.cubesideutils.bukkit.commands.CommandRouter; | ||||
| import de.iani.playerUUIDCache.PlayerUUIDCache; | ||||
| import java.util.Locale; | ||||
| import java.util.ResourceBundle; | ||||
| import de.lunarakai.minecleaner.commands.CreateCommand; | ||||
| import de.lunarakai.minecleaner.commands.DeleteCommand; | ||||
| import de.lunarakai.minecleaner.commands.DeletePlayerScoreCommand; | ||||
| import de.lunarakai.minecleaner.commands.InfoCommand; | ||||
| import de.lunarakai.minecleaner.commands.ListCommand; | ||||
| import de.lunarakai.minecleaner.commands.StatsCommand; | ||||
| 
 | ||||
| import java.util.logging.Level; | ||||
| 
 | ||||
| public final class MinecleanerPlugin extends JavaPlugin { | ||||
|  | @ -32,7 +19,6 @@ public final class MinecleanerPlugin extends JavaPlugin { | |||
|     public static final String PERMISSION_ADMIN = "minecleaner.admin"; | ||||
| 
 | ||||
|     private MinecleanerManager minecleanerManager; | ||||
|     private MinecleanerGroupManager minecleanerGroupManager; | ||||
|     private ArenaList arenaList; | ||||
|     private CubesideStatisticsAPI cubesideStatistics; | ||||
|     private PlayerUUIDCache playerUUIDCache; | ||||
|  | @ -40,31 +26,21 @@ public final class MinecleanerPlugin extends JavaPlugin { | |||
|     @Override | ||||
|     public void onEnable() { | ||||
|         this.saveDefaultConfig(); | ||||
| 
 | ||||
|         TranslationRegistry registry = TranslationRegistry.create(Key.key("minecleaner:lang")); | ||||
| 
 | ||||
|         ResourceBundle bundle_en_US = ResourceBundle.getBundle("lang.en_US", Locale.US, UTF8ResourceBundleControl.get()); | ||||
|         registry.registerAll(Locale.US, bundle_en_US, true); | ||||
|         GlobalTranslator.translator().addSource(registry); | ||||
| 
 | ||||
|         ResourceBundle bundle_de_DE = ResourceBundle.getBundle("lang.de_DE", Locale.GERMAN, UTF8ResourceBundleControl.get()); | ||||
|         registry.registerAll(Locale.GERMAN, bundle_de_DE, true); | ||||
| 
 | ||||
|         GlobalTranslator.translator().addSource(registry); | ||||
| 
 | ||||
|         getServer().getScheduler().runTask(this, this::onLateEnable); | ||||
|     } | ||||
| 
 | ||||
|     public void onLateEnable() { | ||||
|         checkForPlayerUUIDChache(); | ||||
| 
 | ||||
|         checkForCubesideStatistics(); | ||||
|         playerUUIDCache = (PlayerUUIDCache) getServer().getPluginManager().getPlugin("PlayerUUIDCache"); | ||||
|         if(getServer().getPluginManager().getPlugin("CubesideStatistics") != null) { | ||||
|             cubesideStatistics = getServer().getServicesManager().load(CubesideStatisticsAPI.class); | ||||
|         } else { | ||||
|             this.getLogger().log(Level.WARNING, "Cubeside Statistics not found. No Statistics will be available"); | ||||
|         } | ||||
| 
 | ||||
|         arenaList = new ArenaList(this); | ||||
|         arenaList.load(); | ||||
| 
 | ||||
|         minecleanerManager = new MinecleanerManager(this); | ||||
|         minecleanerGroupManager = new MinecleanerGroupManager(); | ||||
|         getServer().getPluginManager().registerEvents(new MinecleanerListener(this), this); | ||||
| 
 | ||||
|         CommandRouter minecleanerCommand = new CommandRouter(getCommand("minecleaner")); | ||||
|  | @ -72,20 +48,7 @@ public final class MinecleanerPlugin extends JavaPlugin { | |||
|         minecleanerCommand.addCommandMapping(new DeleteCommand(this), "delete"); | ||||
|         minecleanerCommand.addCommandMapping(new ListCommand(this), "list"); | ||||
|         minecleanerCommand.addCommandMapping(new InfoCommand(this), "info"); | ||||
|         minecleanerCommand.addCommandMapping(new ListPlayersInArenaCommand(this), "currentplayers"); | ||||
|         minecleanerCommand.addCommandMapping(new HelpCommand(this), "help"); | ||||
| 
 | ||||
|         // Groups | ||||
|         minecleanerCommand.addCommandMapping(new InviteCommand(this), "invite"); | ||||
|         minecleanerCommand.addCommandMapping(new AcceptCommand(this), "accept"); | ||||
|         minecleanerCommand.addCommandMapping(new DenyCommand(this), "deny"); | ||||
|         minecleanerCommand.addCommandMapping(new DismantleGroupCommand(this), "dismantlegroup"); | ||||
|         minecleanerCommand.addCommandMapping(new ListGroupMembersCommand(this), "groupmembers"); | ||||
| 
 | ||||
|         enableCubesideStatisticsCommands(minecleanerCommand); | ||||
|     } | ||||
| 
 | ||||
|     private void enableCubesideStatisticsCommands(CommandRouter minecleanerCommand) { | ||||
|         if(isStatisticsEnabled()) { | ||||
|             minecleanerCommand.addCommandMapping(new SettingsCommand(this), "settings"); | ||||
|             minecleanerCommand.addCommandMapping(new StatsCommand(this), "stats"); | ||||
|  | @ -93,30 +56,11 @@ public final class MinecleanerPlugin extends JavaPlugin { | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private void checkForCubesideStatistics() { | ||||
|         if(getServer().getPluginManager().getPlugin("CubesideStatistics") != null) { | ||||
|             cubesideStatistics = getServer().getServicesManager().load(CubesideStatisticsAPI.class); | ||||
|         } else { | ||||
|             this.getLogger().log(Level.WARNING, "Cubeside Statistics not found. No Statistics will be available"); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private void checkForPlayerUUIDChache() { | ||||
|         if(getServer().getPluginManager().getPlugin("PlayerUUIDCache") != null) { | ||||
|             playerUUIDCache = (PlayerUUIDCache) getServer().getPluginManager().getPlugin("PlayerUUIDCache"); | ||||
|         } else { | ||||
|             this.getLogger().log(Level.WARNING, "PlayerUUIDCache not found."); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onDisable() { | ||||
|         if(minecleanerManager != null) { | ||||
|             minecleanerManager.clearAllArenas(); | ||||
|         } | ||||
|         if(minecleanerGroupManager != null) { | ||||
|             minecleanerGroupManager.deleteAllGroups(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public ArenaList getArenaList() { | ||||
|  | @ -127,8 +71,6 @@ public final class MinecleanerPlugin extends JavaPlugin { | |||
|         return minecleanerManager; | ||||
|     } | ||||
| 
 | ||||
|     public MinecleanerGroupManager getGroupManager() { return minecleanerGroupManager; } | ||||
| 
 | ||||
|     public boolean isStatisticsEnabled() { | ||||
|         return cubesideStatistics != null; | ||||
|     } | ||||
|  |  | |||
|  | @ -1,125 +0,0 @@ | |||
| package de.lunarakai.minecleaner; | ||||
| 
 | ||||
| import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; | ||||
| import de.lunarakai.minecleaner.utils.ItemUtil; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.format.NamedTextColor; | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.Material; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.event.inventory.InventoryClickEvent; | ||||
| import org.bukkit.event.inventory.InventoryType; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
| 
 | ||||
| 
 | ||||
| public class MinecleanerSettingsInventory extends AbstractWindow { | ||||
| 
 | ||||
|     private static final int SETTINGS_ALLOW_MANUEL_RESET = 10; | ||||
|     private static final int SETTINGS_ADDITIONAL_DISPLAY = 12; | ||||
|     private static final int SETTINGS_TIMER = 14; | ||||
|     private static final int SETTINGS_RESETTIME = 16; | ||||
|     private static final int WINDOW_SIZE = 27; | ||||
| 
 | ||||
|     private MinecleanerPlugin plugin; | ||||
| 
 | ||||
|     public MinecleanerSettingsInventory(Player player, MinecleanerPlugin plugin) { | ||||
|         super(player, Bukkit.createInventory(player, InventoryType.CHEST, plugin.getDisplayedPluginName() + " Einstellungen")); | ||||
|         this.plugin = plugin; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     protected void rebuildInventory() { | ||||
|         Player player = getPlayer(); | ||||
| 
 | ||||
|         for (int i = 0; i < WINDOW_SIZE; i++) { | ||||
|             ItemStack item; | ||||
|             switch (i) { | ||||
|                 case SETTINGS_ALLOW_MANUEL_RESET -> { | ||||
|                     if (plugin.getManager().getSettingsValue("allowmanualreset", player) == 0) { | ||||
|                         item = ItemUtil.createGuiItem(Material.SHEARS, Component.translatable("settings.manualreset.deny", NamedTextColor.RED)); | ||||
|                     } else { | ||||
|                         item = ItemUtil.createGuiItem(Material.SHEARS, Component.translatable("settings.manualreset.allow", NamedTextColor.GREEN)); | ||||
|                     } | ||||
|                 } | ||||
|                 case SETTINGS_ADDITIONAL_DISPLAY -> { | ||||
|                     if (plugin.getManager().getSettingsValue("additionaldisplay", player) == 0) { | ||||
|                         item = ItemUtil.createGuiItem(Material.NAME_TAG, Component.translatable("settings.additionaltimer.deny", NamedTextColor.RED)); | ||||
|                     } else { | ||||
|                         item = ItemUtil.createGuiItem(Material.NAME_TAG, Component.translatable("settings.additionaltimer.allow", NamedTextColor.GREEN)); | ||||
|                     } | ||||
|                 } | ||||
|                 case SETTINGS_TIMER -> { | ||||
|                     if (plugin.getManager().getSettingsValue("timer", player) == 0) { | ||||
|                         item = ItemUtil.createGuiItem(Material.CLOCK, Component.translatable("settings.timer.deny", NamedTextColor.RED)); | ||||
|                     } else { | ||||
|                         item = ItemUtil.createGuiItem(Material.CLOCK, Component.translatable("settings.timer.allow", NamedTextColor.GREEN)); | ||||
|                     } | ||||
|                 } | ||||
|                 case SETTINGS_RESETTIME -> { | ||||
|                     int current = plugin.getManager().getSettingsValue("resettime", player); | ||||
|                     item = ItemUtil.createGuiItem(Material.CANDLE, Component.translatable("settings.resettime.text", NamedTextColor.GOLD).append(Component.text(": ")).append(Component.text(current, NamedTextColor.RED)).append(Component.text(" s", NamedTextColor.RED))); | ||||
|                 } | ||||
|                 default -> item = ItemUtil.EMPTY_ICON; | ||||
|             } | ||||
|             this.getInventory().setItem(i, item); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onItemClicked(InventoryClickEvent event) { | ||||
|         if (!mayAffectThisInventory(event)) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         event.setCancelled(true); | ||||
|         if (!getInventory().equals(event.getClickedInventory())) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         Player player = getPlayer(); | ||||
| 
 | ||||
| 
 | ||||
|         int slot = event.getSlot(); | ||||
|         switch (slot) { | ||||
|             case SETTINGS_ALLOW_MANUEL_RESET -> { | ||||
|                 if(plugin.getManager().getSettingsValue("allowmanualreset", player) == 0) { | ||||
|                     plugin.getManager().updateSettingsValue("allowmanualreset", 1, player); | ||||
|                 } else { | ||||
|                     plugin.getManager().updateSettingsValue("allowmanualreset", 0, player); | ||||
|                 } | ||||
|                 rebuildInventory(); | ||||
|             } | ||||
|             case SETTINGS_ADDITIONAL_DISPLAY -> { | ||||
|                 if(plugin.getManager().getSettingsValue("additionaldisplay", player) == 0) { | ||||
|                     plugin.getManager().updateSettingsValue("additionaldisplay", 1, player); | ||||
|                 } else { | ||||
|                     plugin.getManager().updateSettingsValue("additionaldisplay", 0, player); | ||||
|                 } | ||||
|                 rebuildInventory(); | ||||
|             } | ||||
|             case SETTINGS_TIMER -> { | ||||
|                 if(plugin.getManager().getSettingsValue("timer", player) == 0) { | ||||
|                     plugin.getManager().updateSettingsValue("timer", 1, player); | ||||
|                 } else { | ||||
|                     MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); | ||||
|                     plugin.getManager().updateSettingsValue("timer", 0, player); | ||||
|                     if(arena != null) { | ||||
|                         arena.updateIngameInfoTexts(); | ||||
|                     } | ||||
|                 } | ||||
|                 rebuildInventory(); | ||||
|             } | ||||
|             case SETTINGS_RESETTIME -> { | ||||
|                 int current = plugin.getManager().getSettingsValue("resettime", player); | ||||
|                 if(plugin.getManager().getSettingsValue("resettime", player) < 10) { | ||||
|                     plugin.getManager().updateSettingsValue("resettime", current + 1, player); | ||||
|                 } else { | ||||
|                     plugin.getManager().updateSettingsValue("resettime", 1, player); | ||||
|                 } | ||||
|                 rebuildInventory(); | ||||
|             } | ||||
|             default -> { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -5,8 +5,6 @@ import java.util.Collection; | |||
| import java.util.List; | ||||
| import java.util.regex.Pattern; | ||||
| import javax.annotation.Nullable; | ||||
| 
 | ||||
| import net.kyori.adventure.text.format.NamedTextColor; | ||||
| import org.bukkit.Location; | ||||
| import org.bukkit.block.BlockFace; | ||||
| import org.bukkit.command.Command; | ||||
|  | @ -24,8 +22,6 @@ import de.lunarakai.minecleaner.MinecleanerArena; | |||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| import net.md_5.bungee.api.ChatColor; | ||||
| 
 | ||||
| import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; | ||||
| 
 | ||||
| public class CreateCommand extends SubCommand { | ||||
|     private static final Pattern VALID_ARENA_NAME = Pattern.compile("^[a-z0-9_]+$"); | ||||
| 
 | ||||
|  | @ -59,11 +55,11 @@ public class CreateCommand extends SubCommand { | |||
|         } | ||||
|         String name = args.getNext().toLowerCase().trim(); | ||||
|         if(!VALID_ARENA_NAME.matcher(name).matches()) { | ||||
|             sender.sendMessage(createLangComponent("arena.name.invalid", NamedTextColor.DARK_RED)); | ||||
|             sender.sendMessage(ChatColor.DARK_RED + "Ungültiger Arenaname. Erlaubt sind Buchstaben, Zahlen und der Unterstrich"); | ||||
|             return true; | ||||
|         } | ||||
|         if(plugin.getArenaList().getArena(name) != null) { | ||||
|             sender.sendMessage(createLangComponent( "arena.name.exists", NamedTextColor.DARK_RED)); | ||||
|             sender.sendMessage(ChatColor.DARK_RED + "Eine Arena mit diesem Namen existiert bereits"); | ||||
|             return true; | ||||
|         } | ||||
|         boolean noblocks = false; | ||||
|  | @ -77,13 +73,13 @@ public class CreateCommand extends SubCommand { | |||
|                 try { | ||||
|                     widthindex = Integer.parseInt(arg); | ||||
|                 } catch(NumberFormatException e) { | ||||
|                     sender.sendMessage(createLangComponent("arena.widthindex.invalid", NamedTextColor.DARK_RED)); | ||||
|                     sender.sendMessage(createLangComponent("arena.widthindex.validOptions", NamedTextColor.DARK_RED)); | ||||
|                     sender.sendMessage(ChatColor.DARK_RED + "Kein Valider Arena WidthIndex!"); | ||||
|                     sender.sendMessage(ChatColor.DARK_RED + "0 (oder weglassen) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33"); | ||||
|                     return true; | ||||
|                 } | ||||
|                 if(widthindex > 3) { | ||||
|                     sender.sendMessage(createLangComponent( "arena.widthindex.toolarge", NamedTextColor.DARK_RED)); | ||||
|                     sender.sendMessage(createLangComponent("arena.widthindex.validOptions", NamedTextColor.DARK_RED)); | ||||
|                     sender.sendMessage(ChatColor.DARK_RED + "Arena WidthIndex darf nicht größer als 3 sein"); | ||||
|                     sender.sendMessage(ChatColor.DARK_RED + "0 (oder weglassen) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33"); | ||||
|                     return true; | ||||
|                 } | ||||
|             } else { | ||||
|  | @ -98,14 +94,12 @@ public class CreateCommand extends SubCommand { | |||
|         @Nullable | ||||
|         RayTraceResult target = player.rayTraceBlocks(6); | ||||
|         if(target == null || target.getHitBlock() == null) { | ||||
|             //sender.sendMessage(ChatColor.DARK_RED + "Bitte gucke den Block an, der im Zentrum des " + plugin.getDisplayedPluginName() + "-Spielfelds sein soll."); | ||||
|             sender.sendMessage(createLangComponent( "arena.create.lookAtCenter", plugin.getDisplayedPluginName(), NamedTextColor.DARK_RED)); | ||||
|             sender.sendMessage(ChatColor.DARK_RED + "Bitte gucke den Block an, der im Zentrum des " + plugin.getDisplayedPluginName() + "-Spielfelds sein soll."); | ||||
|             return true; | ||||
|         } | ||||
|         BlockFace face = target.getHitBlockFace(); | ||||
|         if(face != BlockFace.NORTH && face != BlockFace.WEST && face != BlockFace.EAST && face != BlockFace.SOUTH) { | ||||
|             //sender.sendMessage(ChatColor.DARK_RED + "Bitte gucke die Seite des Blockes an, wo das " + plugin.getDisplayedPluginName() + "-Spielfeld erstellt werden soll."); | ||||
|             sender.sendMessage(createLangComponent("arena.create.lookAtSide", plugin.getDisplayedPluginName(), NamedTextColor.DARK_RED)); | ||||
|             sender.sendMessage(ChatColor.DARK_RED + "Bitte gucke die Seite des Blockes an, wo das " + plugin.getDisplayedPluginName() + "-Spielfeld erstellt werden soll."); | ||||
|             return true; | ||||
|         } | ||||
|         location = target.getHitBlock().getLocation(); | ||||
|  | @ -113,7 +107,7 @@ public class CreateCommand extends SubCommand { | |||
| 
 | ||||
|         MinecleanerArena newArena = new MinecleanerArena(plugin, name, location, widthindex, orientation); | ||||
|         if(plugin.getArenaList().collidesWithArena(newArena)) { | ||||
|             sender.sendMessage(createLangComponent("arena.create.otherArena", NamedTextColor.DARK_RED)); | ||||
|             sender.sendMessage(ChatColor.DARK_RED + "An dieser Stelle befindet sich bereits eine Arena."); | ||||
|             return true; | ||||
|         } | ||||
|         newArena.generateBlockDisplays(); | ||||
|  | @ -121,7 +115,7 @@ public class CreateCommand extends SubCommand { | |||
|             newArena.generateBackgroundBlocks(); | ||||
|         } | ||||
|         plugin.getArenaList().addArena(newArena); | ||||
|         sender.sendMessage(createLangComponent("arena.create.success", NamedTextColor.GREEN)); | ||||
|         sender.sendMessage(ChatColor.GREEN + "Die Arena wurde erfolgreich angelegt."); | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|  | @ -157,4 +151,5 @@ public class CreateCommand extends SubCommand { | |||
|         } | ||||
|         return List.of(); | ||||
|     } | ||||
|      | ||||
| } | ||||
|  |  | |||
|  | @ -2,7 +2,6 @@ package de.lunarakai.minecleaner.commands; | |||
| 
 | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| import net.kyori.adventure.text.format.NamedTextColor; | ||||
| import org.bukkit.block.Block; | ||||
| import org.bukkit.block.BlockFace; | ||||
| import org.bukkit.command.Command; | ||||
|  | @ -17,8 +16,7 @@ import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; | |||
| import de.iani.cubesideutils.commands.ArgsParser; | ||||
| import de.lunarakai.minecleaner.MinecleanerArena; | ||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| 
 | ||||
| import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; | ||||
| import net.md_5.bungee.api.ChatColor; | ||||
| 
 | ||||
| public class DeleteCommand extends SubCommand { | ||||
|     private final MinecleanerPlugin plugin; | ||||
|  | @ -54,9 +52,9 @@ public class DeleteCommand extends SubCommand { | |||
|         } | ||||
|         if(arena != null) { | ||||
|             plugin.getArenaList().removeArena(arena); | ||||
|             sender.sendMessage(createLangComponent("arena.delete.success", plugin.getDisplayedPluginName(), arena.getName(), NamedTextColor.YELLOW)); | ||||
|             sender.sendMessage(ChatColor.YELLOW + "Die " + plugin.getDisplayedPluginName() + "-Arena " + arena.getName() + " wurde gelöscht."); | ||||
|         } else { | ||||
|             sender.sendMessage(createLangComponent("arena.delete.noarena", plugin.getDisplayedPluginName(), NamedTextColor.YELLOW)); | ||||
|             sender.sendMessage(ChatColor.YELLOW + "Hier befindet sich keine " + plugin.getDisplayedPluginName() + "-Arena."); | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
|  | @ -65,4 +63,5 @@ public class DeleteCommand extends SubCommand { | |||
|     public Collection<String> onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { | ||||
|         return List.of(); | ||||
|     } | ||||
|      | ||||
| } | ||||
|  |  | |||
|  | @ -1,6 +1,5 @@ | |||
| package de.lunarakai.minecleaner.commands; | ||||
| 
 | ||||
| import net.kyori.adventure.text.format.NamedTextColor; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import de.iani.cubesideutils.bukkit.commands.SubCommand; | ||||
|  | @ -14,8 +13,6 @@ import de.iani.playerUUIDCache.CachedPlayer; | |||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| import net.md_5.bungee.api.ChatColor; | ||||
| 
 | ||||
| import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; | ||||
| 
 | ||||
| public class DeletePlayerScoreCommand extends SubCommand{ | ||||
|     private final MinecleanerPlugin plugin; | ||||
| 
 | ||||
|  | @ -51,10 +48,10 @@ public class DeletePlayerScoreCommand extends SubCommand{ | |||
| 
 | ||||
|         CachedPlayer cachedPlayer = plugin.getPlayerUUIDCache().getPlayer(player); | ||||
|         if(cachedPlayer == null) { | ||||
|             sender.sendMessage(createLangComponent("data.delete.playerNotFound", player, NamedTextColor.DARK_RED)); | ||||
|             sender.sendMessage(ChatColor.DARK_RED + "Ein Spieler mit dem Namen '" + player + "' konnte nicht gefunden werden."); | ||||
|         } | ||||
|         plugin.getManager().deleteScores(cachedPlayer.getUUID()); | ||||
|         sender.sendMessage(createLangComponent("data.delete.deleted", plugin.getDisplayedPluginName(), cachedPlayer.getName(), NamedTextColor.DARK_RED)); | ||||
|         sender.sendMessage(ChatColor.DARK_RED + "Alle " + plugin.getDisplayedPluginName() + "-Statistiken von Spieler '" + cachedPlayer.getName() + "' wurden gelöscht."); | ||||
|         return true; | ||||
|     } | ||||
|      | ||||
|  |  | |||
|  | @ -1,88 +0,0 @@ | |||
| package de.lunarakai.minecleaner.commands; | ||||
| 
 | ||||
| import de.iani.cubesideutils.bukkit.commands.SubCommand; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.InternalCommandException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.NoPermissionException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; | ||||
| import de.iani.cubesideutils.commands.ArgsParser; | ||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.format.NamedTextColor; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| public class HelpCommand extends SubCommand { | ||||
|     MinecleanerPlugin plugin; | ||||
| 
 | ||||
|     public HelpCommand(MinecleanerPlugin plugin) { | ||||
|         this.plugin = plugin; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getUsage() { | ||||
|         return "[(empty)|group]"; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean requiresPlayer() { | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getRequiredPermission() { | ||||
|         return MinecleanerPlugin.PERMISSION_PLAY; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean onCommand(CommandSender commandSender, Command command, String s, String commandString, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { | ||||
|         Player player = (Player) commandSender; | ||||
| 
 | ||||
|         String subMenu = ""; | ||||
|         if(args.remaining() == 1) { | ||||
|              subMenu = args.getNext().toLowerCase().trim(); | ||||
|         } | ||||
| 
 | ||||
|         if(subMenu.equals("group")) { | ||||
|             showHelpGroup(player); | ||||
|             return true; | ||||
|         } else { | ||||
|             showGeneralHelp(player); | ||||
|             return true; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private void showGeneralHelp(Player player) { | ||||
|         player.sendMessage(Component.text("--- " + plugin.getDisplayedPluginName() + " Help ---", NamedTextColor.AQUA) | ||||
|                 .append(Component.newline()) | ||||
|                 .append(Component.text("  /... info: ", NamedTextColor.BLUE)) | ||||
|                 .append(Component.text("Allgemeine Auskunft zum Plugin", NamedTextColor.GREEN)) | ||||
|                 .append(Component.newline()) | ||||
|                 .append(Component.text("  /... stats [playername]: ", NamedTextColor.BLUE)) | ||||
|                 .append(Component.text("Zeigt dir entweder deine eigenen Stats (leer lassen) oder die Stats anderer Spieler an", NamedTextColor.GREEN)) | ||||
|                 .append(Component.newline()) | ||||
|                 .append(Component.text("  /... settings: ", NamedTextColor.BLUE)) | ||||
|                 .append(Component.text("Öffnet ein Menü in dem du Veränderungen an deinen eigenen Einstellungen für " + plugin.getDisplayedPluginName() + " vornehmen kannst", NamedTextColor.GREEN)) | ||||
|                 .append(Component.newline()) | ||||
|                 .append(Component.text("  /... help [group]: ", NamedTextColor.BLUE)) | ||||
|                 .append(Component.text("Zeigt dieses Menü (frei lassen) oder die Hilfe für Gruppen an (group)", NamedTextColor.GREEN))); | ||||
|     } | ||||
| 
 | ||||
|     private void showHelpGroup(Player player) { | ||||
|         player.sendMessage(Component.text("--- " + plugin.getDisplayedPluginName() + " Group Help ---", NamedTextColor.AQUA) | ||||
|                 .append(Component.newline()) | ||||
|                 .append(Component.text("  /... invite <playername>: ", NamedTextColor.BLUE)) | ||||
|                 .append(Component.text("Lädt andere Spieler zu deiner " + plugin.getDisplayedPluginName() + " Gruppe ein", NamedTextColor.GREEN)) | ||||
|                 .append(Component.newline()) | ||||
|                 .append(Component.text("  /... accept | deny: ", NamedTextColor.BLUE)) | ||||
|                 .append(Component.text("Nehme eine erhaltene Einladung an (accept), oder lehne sie ab (deny)", NamedTextColor.GREEN)) | ||||
|                 .append(Component.newline()) | ||||
|                 .append(Component.text("  /... dismantlegroup: ", NamedTextColor.BLUE)) | ||||
|                 .append(Component.text("Löst die Gruppe, die du erstellt hast, auf", NamedTextColor.GREEN)) | ||||
|                 .append(Component.newline()) | ||||
|                 .append(Component.text("  /... groupmembers: ", NamedTextColor.BLUE)) | ||||
|                 .append(Component.text("Listet die Mitglieder deiner Gruppe auf", NamedTextColor.GREEN))); | ||||
|     } | ||||
| } | ||||
|  | @ -1,7 +1,5 @@ | |||
| package de.lunarakai.minecleaner.commands; | ||||
| 
 | ||||
| import de.iani.cubesideutils.NamedChatColor; | ||||
| import net.kyori.adventure.text.format.NamedTextColor; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import de.iani.cubesideutils.bukkit.commands.SubCommand; | ||||
|  | @ -14,8 +12,6 @@ import de.iani.cubesideutils.commands.ArgsParser; | |||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| import net.md_5.bungee.api.ChatColor; | ||||
| 
 | ||||
| import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; | ||||
| 
 | ||||
| public class InfoCommand extends SubCommand{ | ||||
|     MinecleanerPlugin plugin; | ||||
| 
 | ||||
|  | @ -42,11 +38,11 @@ public class InfoCommand extends SubCommand{ | |||
|     public boolean onCommand(CommandSender sender, Command arg1, String arg2, String arg3, | ||||
|             ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, | ||||
|             NoPermissionException, IllegalSyntaxException, InternalCommandException { | ||||
|                 sender.sendMessage(NamedChatColor.GREEN + "--- " + ChatColor.AQUA + plugin.getName() + ChatColor.GREEN + " ---"); | ||||
|                 sender.sendMessage(createLangComponent("minecleaner.info.version", ": ", plugin.getPluginMeta().getVersion(), NamedTextColor.AQUA, NamedTextColor.GREEN)); | ||||
|                 sender.sendMessage(createLangComponent("minecleaner.info.developer", ": ", plugin.getPluginMeta().getAuthors().get(0), NamedTextColor.AQUA, NamedTextColor.GREEN)); | ||||
|                 sender.sendMessage(createLangComponent("minecleaner.info.website", ": ", plugin.getPluginMeta().getWebsite(), NamedTextColor.AQUA, NamedTextColor.GREEN)); | ||||
|                 sender.sendMessage(createLangComponent("minecleaner.info.license", ": ", "GPL-3.0", NamedTextColor.AQUA, NamedTextColor.GREEN)); | ||||
|                 sender.sendMessage(ChatColor.GREEN + "--- " + ChatColor.AQUA + plugin.getName() + ChatColor.GREEN + " ---"); | ||||
|                 sender.sendMessage(ChatColor.AQUA + "Version: " + ChatColor.GREEN + plugin.getPluginMeta().getVersion()); | ||||
|                 sender.sendMessage(ChatColor.AQUA + "Entwickelt von: " + ChatColor.GREEN + plugin.getPluginMeta().getAuthors().get(0)); | ||||
|                 sender.sendMessage(ChatColor.AQUA + "Website: " + ChatColor.GREEN + plugin.getPluginMeta().getWebsite()); | ||||
|                 sender.sendMessage(ChatColor.AQUA + "Lizenz: " + ChatColor.GREEN + "GPL-3.0"); | ||||
|                 return true; | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -2,7 +2,6 @@ package de.lunarakai.minecleaner.commands; | |||
| 
 | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| import net.kyori.adventure.text.format.NamedTextColor; | ||||
| import org.bukkit.Location; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
|  | @ -17,8 +16,6 @@ import de.lunarakai.minecleaner.MinecleanerArena; | |||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| import net.md_5.bungee.api.ChatColor; | ||||
| 
 | ||||
| import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; | ||||
| 
 | ||||
| public class ListCommand extends SubCommand{ | ||||
| 
 | ||||
|     private final MinecleanerPlugin plugin; | ||||
|  | @ -44,7 +41,7 @@ public class ListCommand extends SubCommand{ | |||
| 
 | ||||
|     @Override | ||||
|     public boolean onCommand(CommandSender sender, Command arg1, String arg2, String commandString, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { | ||||
|         sender.sendMessage(createLangComponent("arena.list.created", plugin.getDisplayedPluginName(), NamedTextColor.YELLOW)); | ||||
|         sender.sendMessage(ChatColor.YELLOW + "Angelegte "+ plugin.getDisplayedPluginName() + "-Arenen"); | ||||
|         boolean any = false; | ||||
|         for(MinecleanerArena arena : plugin.getArenaList().getArenas()) { | ||||
|             Location location = arena.getLocation(); | ||||
|  | @ -52,7 +49,7 @@ public class ListCommand extends SubCommand{ | |||
|             any = true; | ||||
|         } | ||||
|         if(!any) { | ||||
|             sender.sendMessage("  " + createLangComponent("arena.list.none", NamedTextColor.GRAY)); | ||||
|             sender.sendMessage(ChatColor.GRAY + "  (keine)"); | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
|  |  | |||
|  | @ -1,63 +0,0 @@ | |||
| package de.lunarakai.minecleaner.commands; | ||||
| 
 | ||||
| import de.iani.cubesideutils.bukkit.commands.SubCommand; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.*; | ||||
| import de.iani.cubesideutils.commands.ArgsParser; | ||||
| import de.lunarakai.minecleaner.MinecleanerArena; | ||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| import de.lunarakai.minecleaner.utils.ChatUtils; | ||||
| import net.kyori.adventure.text.format.NamedTextColor; | ||||
| import org.bukkit.block.Block; | ||||
| import org.bukkit.block.BlockFace; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| import java.util.Arrays; | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| 
 | ||||
| public class ListPlayersInArenaCommand extends SubCommand { | ||||
|     private final MinecleanerPlugin plugin; | ||||
| 
 | ||||
|     public ListPlayersInArenaCommand(MinecleanerPlugin plugin) { | ||||
|         this.plugin = plugin; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getUsage() { | ||||
|         return "<name>"; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean requiresPlayer() { | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getRequiredPermission() { | ||||
|         return MinecleanerPlugin.PERMISSION_ADMIN; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser argsParser) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { | ||||
|         Player player = (Player) sender; | ||||
|         MinecleanerArena arena = plugin.getArenaList().getArenaAtBlock(player.getLocation().getBlock().getRelative(BlockFace.DOWN)); | ||||
|         if(arena == null) { | ||||
|             Block target = player.getTargetBlockExact(6); | ||||
|             if(target != null) { | ||||
|                 arena = plugin.getArenaList().getArenaAtBlock(target); | ||||
|             } | ||||
|         } | ||||
|         if(arena != null) { | ||||
|             ChatUtils.sendSimpleSpecialMessage(player, "Players in Arena: " + Arrays.toString(arena.getCurrentPlayers()), NamedTextColor.GRAY); | ||||
|         } else { | ||||
|             ChatUtils.sendSimpleSpecialMessage(player, "arena.common.noarena", NamedTextColor.GRAY); | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public Collection<String> onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { | ||||
|         return List.of(); | ||||
|     } | ||||
| } | ||||
|  | @ -8,7 +8,6 @@ import de.iani.cubesideutils.bukkit.commands.exceptions.NoPermissionException; | |||
| import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; | ||||
| import de.iani.cubesideutils.commands.ArgsParser; | ||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| import de.lunarakai.minecleaner.MinecleanerSettingsInventory; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
|  | @ -40,7 +39,7 @@ public class SettingsCommand extends SubCommand { | |||
|     public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { | ||||
|         Player player = (Player) sender; | ||||
| 
 | ||||
|         new MinecleanerSettingsInventory(player, plugin).open(); | ||||
|         player.openInventory(plugin.getManager().showSettingsInventory(player)); | ||||
|         return true; | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -2,11 +2,10 @@ package de.lunarakai.minecleaner.commands; | |||
| 
 | ||||
| import java.util.Map.Entry; | ||||
| import java.util.function.Consumer; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.format.NamedTextColor; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| import de.iani.cubesideutils.StringUtil; | ||||
| import de.iani.cubesideutils.bukkit.commands.SubCommand; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException; | ||||
|  | @ -17,8 +16,7 @@ import de.iani.cubesideutils.commands.ArgsParser; | |||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| import de.lunarakai.minecleaner.PlayerStatisticsData; | ||||
| import de.lunarakai.minecleaner.utils.MinecleanerStringUtil; | ||||
| 
 | ||||
| import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; | ||||
| import net.md_5.bungee.api.ChatColor; | ||||
| 
 | ||||
| public class StatsCommand extends SubCommand { | ||||
|     private final MinecleanerPlugin plugin; | ||||
|  | @ -50,30 +48,16 @@ public class StatsCommand extends SubCommand { | |||
|             @Override | ||||
|             public void accept(PlayerStatisticsData data) { | ||||
|                 if(data == null) { | ||||
|                     sender.sendMessage(createLangComponent("data.player.noData", playerName, NamedTextColor.GREEN)); | ||||
|                     sender.sendMessage(ChatColor.GREEN + "Für Spieler '" + playerName + "' existieren keine Daten."); | ||||
|                     return; | ||||
|                 } | ||||
|                 if(playerName == null) { | ||||
|                     sender.sendMessage(createLangComponent("data.player.self", plugin.getDisplayedPluginName(), NamedTextColor.AQUA).append(Component.text(":"))); | ||||
|                     sender.sendMessage(ChatColor.AQUA + "Deine " + plugin.getDisplayedPluginName() + " Statistik:"); | ||||
|                 } else { | ||||
|                     sender.sendMessage(createLangComponent("data.player.other", plugin.getDisplayedPluginName(), data.getPlayerName(), NamedTextColor.AQUA).append(Component.text(":"))); | ||||
|                     sender.sendMessage(ChatColor.AQUA + plugin.getDisplayedPluginName() + "-Statistik von " + data.getPlayerName() + ":"); | ||||
|                 } | ||||
| 
 | ||||
|                 sender.sendMessage(createLangComponent("data.player.pointsscored", NamedTextColor.BLUE) | ||||
|                         .append(Component.text(": ", NamedTextColor.BLUE)) | ||||
|                         .append(Component.text(String.valueOf(data.getPointsAcquiredTotal()), NamedTextColor.GREEN)) | ||||
|                         .append(Component.text(" (", NamedTextColor.GREEN)) | ||||
|                         .append(createLangComponent("data.player.thismonth", NamedTextColor.GREEN)) | ||||
|                         .append(Component.text(": " + String.valueOf(data.getPointsAquiredMonth()) + ")", NamedTextColor.GREEN))); | ||||
| 
 | ||||
| 
 | ||||
|                 sender.sendMessage(createLangComponent("data.player.roundswon", NamedTextColor.BLUE) | ||||
|                         .append(Component.text(": ", NamedTextColor.BLUE)) | ||||
|                         .append(Component.text(String.valueOf(data.getWonGamesPlayed()), NamedTextColor.GREEN)) | ||||
|                         .append(Component.text(" (", NamedTextColor.GREEN)) | ||||
|                         .append(createLangComponent("data.player.thismonth", NamedTextColor.GREEN)) | ||||
|                         .append(Component.text(": " + String.valueOf(data.getWonGamesPlayedThisMonth()) + ")", NamedTextColor.GREEN))); | ||||
| 
 | ||||
|                 sender.sendMessage(ChatColor.BLUE + "  Punkte erspielt: " + ChatColor.GREEN + data.getPointsAcquiredTotal() + " (Dieser Monat: " + data.getPointsAquiredMonth() + ")"); | ||||
|                 sender.sendMessage(ChatColor.BLUE + "  Runden gewonnen: " + ChatColor.GREEN + data.getWonGamesPlayed() + " (Dieser Monat: " + data.getWonGamesPlayedThisMonth() + ")"); | ||||
|                 for(Entry<Integer, String> e : plugin.getManager().getSizes().entrySet()) { | ||||
|                     int totalWonSize = data.getGamesPlayedSize(e.getKey()); | ||||
|                     int totalWonMonth = data.getGamesPlayedSizeThisMonth(e.getKey()); | ||||
|  | @ -81,35 +65,14 @@ public class StatsCommand extends SubCommand { | |||
|                     int totalSizeMonth = data.getTotalGamesPlayedSizeThisMonth(e.getKey()); | ||||
| 
 | ||||
|                     if(totalSize > 0) { | ||||
|                         String sizeName = e.getValue(); | ||||
|                         if(sizeName.equals("groß")) { | ||||
|                             sizeName = "gross"; | ||||
|                         } | ||||
|                         sender.sendMessage(createLangComponent("arena.width." + sizeName, NamedTextColor.AQUA).append(Component.text(":", NamedTextColor.AQUA))); | ||||
| 
 | ||||
|                         sender.sendMessage(Component.text("    ") | ||||
|                                                 .append(createLangComponent("data.player.roundswon", NamedTextColor.BLUE)) | ||||
|                                                 .append(Component.text(" ")) | ||||
|                                                 .append(Component.text(String.valueOf(totalWonSize), NamedTextColor.GREEN)) | ||||
|                                                 .append(Component.text(" ")) | ||||
|                                                 .append(createLangComponent("data.player.outof", NamedTextColor.GREEN)) | ||||
|                                                 .append(Component.text(" " + totalSize + " (" + MinecleanerStringUtil.percentageString(totalWonSize, totalSize) + ")", NamedTextColor.GREEN))); | ||||
| 
 | ||||
|                         sender.sendMessage(Component.text("    ") | ||||
|                                 .append(createLangComponent("data.player.thismonth", NamedTextColor.BLUE)) | ||||
|                                 .append(Component.text(" ")) | ||||
|                                 .append(Component.text(String.valueOf(totalWonMonth), NamedTextColor.GREEN)) | ||||
|                                 .append(Component.text(" ")) | ||||
|                                 .append(createLangComponent("data.player.outof", NamedTextColor.GREEN)) | ||||
|                                 .append(Component.text(" " + totalSizeMonth + " (" + MinecleanerStringUtil.percentageString(totalWonMonth, totalSizeMonth) + ")", NamedTextColor.GREEN))); | ||||
| 
 | ||||
|                         String sizeName = StringUtil.capitalizeFirstLetter(e.getValue(), false); | ||||
|                         sender.sendMessage(ChatColor.AQUA + "  " + sizeName + ":"); | ||||
|                         sender.sendMessage(ChatColor.BLUE + "    Runden gewonnen: " + ChatColor.GREEN + totalWonSize + " von " + totalSize  + " (" + MinecleanerStringUtil.percentageString(totalWonSize, totalSize)+ ") "); | ||||
|                         sender.sendMessage(ChatColor.BLUE + "    Dieser Monat: " + ChatColor.GREEN + totalWonMonth + " von " + totalSizeMonth + " (" + MinecleanerStringUtil.percentageString(totalWonMonth, totalSizeMonth)+ ")"); | ||||
|                         Integer time = data.getBestTime(e.getKey()); | ||||
|                         Integer timeThisMonth = data.getBestTimeThisMonth(e.getKey()); | ||||
|                         sender.sendMessage(Component.text("    ") | ||||
|                                 .append(createLangComponent("data.player.besttime",": ", (time == null ? "-" : MinecleanerStringUtil.timeToString(time, false)), NamedTextColor.BLUE, NamedTextColor.GREEN))); | ||||
| 
 | ||||
|                         sender.sendMessage(Component.text("    ") | ||||
|                                 .append(createLangComponent("data.player.thismonth", ": ", (timeThisMonth == null ? "-" : MinecleanerStringUtil.timeToString(timeThisMonth, false)), NamedTextColor.BLUE, NamedTextColor.GREEN))); | ||||
|                         sender.sendMessage(ChatColor.BLUE + "    Bestzeit: " + ChatColor.GREEN + (time == null ? "-" : MinecleanerStringUtil.timeToString(time, false))); | ||||
|                         sender.sendMessage(ChatColor.BLUE + "    Dieser Monat: " + ChatColor.GREEN + (timeThisMonth == null ? "-" : MinecleanerStringUtil.timeToString(timeThisMonth, false))); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  | @ -118,7 +81,7 @@ public class StatsCommand extends SubCommand { | |||
|             if(sender instanceof Player) { | ||||
|                 plugin.getManager().getStatisticsForPlayer((Player) sender, callback); | ||||
|             } else { | ||||
|                 sender.sendMessage(createLangComponent("data.console.nodata", NamedTextColor.GREEN)); | ||||
|                 sender.sendMessage(ChatColor.GREEN + "Für die Konsole existieren keine Daten."); | ||||
|             } | ||||
|         } else { | ||||
|             plugin.getManager().getStatisticsForPlayerIfExists(playerName, callback); | ||||
|  |  | |||
|  | @ -1,60 +0,0 @@ | |||
| package de.lunarakai.minecleaner.commands.groups; | ||||
| 
 | ||||
| import de.iani.cubesideutils.bukkit.commands.SubCommand; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.InternalCommandException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.NoPermissionException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; | ||||
| import de.iani.cubesideutils.commands.ArgsParser; | ||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| import de.lunarakai.minecleaner.utils.ChatUtils; | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| public class AcceptCommand extends SubCommand { | ||||
|     private final MinecleanerPlugin plugin; | ||||
| 
 | ||||
|     public AcceptCommand(MinecleanerPlugin plugin) { | ||||
|         this.plugin = plugin; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getUsage() { | ||||
|         return ""; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean requiresPlayer() { | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getRequiredPermission() { | ||||
|         return MinecleanerPlugin.PERMISSION_PLAY; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean onCommand(CommandSender commandSender, Command command, String s, String s1, ArgsParser argsParser) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { | ||||
|         Player player = (Player) commandSender; | ||||
| 
 | ||||
|         if(plugin.getGroupManager().getInvitedGroup(player) != null && plugin.getGroupManager().getGroup(player) == null) { | ||||
|             Player groupOwner = Bukkit.getPlayer(plugin.getGroupManager().getInvitedGroup(player).getOwner()); | ||||
|             if(plugin.getArenaList().getPlayerArena(groupOwner) != null) { | ||||
|                 ChatUtils.sendSimpleWarningMessage(player, "group.invite.creatorinround"); | ||||
|                 return true; | ||||
|             } | ||||
|             plugin.getGroupManager().getInvitedGroup(player).addPlayerToGroup(player); | ||||
| 
 | ||||
|             assert groupOwner != null; | ||||
|             ChatUtils.sendSimpleSuccessMessage(groupOwner, player.getName() + " hat deine Einladung angenommen."); | ||||
|             ChatUtils.sendSimpleSuccessMessage(player, "group.invite.accepted"); | ||||
|             return true; | ||||
|         } else { | ||||
|             ChatUtils.sendSimpleInfoMessage(player, "group.invite.notinvited"); | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
| } | ||||
|  | @ -1,63 +0,0 @@ | |||
| package de.lunarakai.minecleaner.commands.groups; | ||||
| 
 | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.InternalCommandException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.NoPermissionException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; | ||||
| import de.iani.cubesideutils.bukkit.commands.SubCommand; | ||||
| import de.iani.cubesideutils.commands.ArgsParser; | ||||
| import de.lunarakai.minecleaner.MinecleanerGroupManager; | ||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| import de.lunarakai.minecleaner.utils.ChatUtils; | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| public class DenyCommand extends SubCommand { | ||||
| 
 | ||||
|     private final MinecleanerPlugin plugin; | ||||
| 
 | ||||
|     public DenyCommand(MinecleanerPlugin plugin) { | ||||
|         this.plugin = plugin; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getUsage() { | ||||
|         return ""; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean requiresPlayer() { | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getRequiredPermission() { | ||||
|         return MinecleanerPlugin.PERMISSION_PLAY; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean onCommand(CommandSender commandSender, Command command, String s, String s1, ArgsParser argsParser) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { | ||||
|         Player player = (Player) commandSender; | ||||
| 
 | ||||
|         if(plugin.getGroupManager().getInvitedGroup(player) != null && plugin.getGroupManager().getGroup(player) == null) { | ||||
|             Player groupOwner = Bukkit.getPlayer(plugin.getGroupManager().getInvitedGroup(player).getOwner()); | ||||
|             MinecleanerGroupManager.MinecleanerGroup invitedGroup = plugin.getGroupManager().getInvitedGroup(player); | ||||
|             invitedGroup.removePlayerFromInvitedList(player); | ||||
|             if(plugin.getGroupManager().getGroup(Bukkit.getPlayer(invitedGroup.getOwner())).invitedPlayers.isEmpty()) { | ||||
|                 plugin.getGroupManager().deleteGroup(invitedGroup); | ||||
|             } | ||||
| 
 | ||||
|             assert groupOwner != null; | ||||
|             ChatUtils.sendSimpleWarningMessage(groupOwner, player.getName() + " hat deine Einladung abgelehnt."); | ||||
|             ChatUtils.sendSimpleInfoMessage(player, "group.invite.denied"); | ||||
|             return true; | ||||
|         } else { | ||||
|             ChatUtils.sendSimpleWarningMessage(player, "group.invite.notinvited"); | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
| } | ||||
|  | @ -1,64 +0,0 @@ | |||
| package de.lunarakai.minecleaner.commands.groups; | ||||
| 
 | ||||
| import de.iani.cubesideutils.bukkit.commands.SubCommand; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.InternalCommandException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.NoPermissionException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; | ||||
| import de.iani.cubesideutils.commands.ArgsParser; | ||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| import de.lunarakai.minecleaner.utils.ChatUtils; | ||||
| import java.util.Iterator; | ||||
| import java.util.UUID; | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| public class DismantleGroupCommand extends SubCommand { | ||||
|     private final MinecleanerPlugin plugin; | ||||
| 
 | ||||
|     public DismantleGroupCommand(MinecleanerPlugin plugin) { | ||||
|         this.plugin = plugin; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getUsage() { | ||||
|         return ""; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean requiresPlayer() { | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getRequiredPermission() { | ||||
|         return MinecleanerPlugin.PERMISSION_PLAY; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean onCommand(CommandSender commandSender, Command command, String s, String s1, ArgsParser argsParser) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { | ||||
|         Player player = (Player) commandSender; | ||||
|         if(plugin.getGroupManager().getGroup(player) == null) { | ||||
|             ChatUtils.sendSimpleWarningMessage(player, "group.common.notingroup"); | ||||
|             return true; | ||||
|         } | ||||
|         Player groupOwnerPlayer = Bukkit.getPlayer(plugin.getGroupManager().getGroup(player).getOwner()); | ||||
| 
 | ||||
|         if(player != groupOwnerPlayer) { | ||||
|             ChatUtils.sendSimpleWarningMessage(player, "group.dismantle.nopermission"); | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|         for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { | ||||
|             Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); | ||||
|             ChatUtils.sendSimpleWarningMessage(iteratorPlayer, "group.dismantle.yourgroup"); | ||||
|         } | ||||
|         plugin.getGroupManager().deleteGroup(plugin.getGroupManager().getGroup(player)); | ||||
| 
 | ||||
|         return true; | ||||
|     } | ||||
| } | ||||
|  | @ -1,104 +0,0 @@ | |||
| package de.lunarakai.minecleaner.commands.groups; | ||||
| 
 | ||||
| import de.iani.cubesideutils.bukkit.commands.SubCommand; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.InternalCommandException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.NoPermissionException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; | ||||
| import de.iani.cubesideutils.commands.ArgsParser; | ||||
| import de.lunarakai.minecleaner.MinecleanerGroupManager; | ||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| import de.lunarakai.minecleaner.utils.ChatUtils; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.event.ClickEvent; | ||||
| import net.kyori.adventure.text.format.NamedTextColor; | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| public class InviteCommand extends SubCommand { | ||||
|     /* | ||||
|         TODO: | ||||
|             - Invite other Players to play in Duo Mode | ||||
|             - Add Functionality to support multiple Players in the same game | ||||
|             - use settings of player that invited the other player | ||||
|      */ | ||||
| 
 | ||||
|     private final MinecleanerPlugin plugin; | ||||
| 
 | ||||
|     public InviteCommand(MinecleanerPlugin plugin) { | ||||
|         this.plugin = plugin; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getUsage() { | ||||
|         return "<Player>"; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean requiresPlayer() { | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getRequiredPermission() { | ||||
|         return MinecleanerPlugin.PERMISSION_PLAY; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean onCommand(CommandSender sender, Command command, String s, String commandString, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { | ||||
|         Player player = (Player) sender; | ||||
| 
 | ||||
|         if(plugin.getArenaList().getPlayerArena(player) != null) { | ||||
|             ChatUtils.sendSimpleWarningMessage(player, "group.invite.notwhileinround"); | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|         if(args.remaining() < 1 || args.remaining() >= 2) { | ||||
|             ChatUtils.sendSimpleWarningMessage(player, commandString + getUsage()); | ||||
|             return true; | ||||
|         } | ||||
|         String playerName = args.getNext().trim(); | ||||
|         Player invitedPlayer = plugin.getServer().getPlayer(playerName); | ||||
| 
 | ||||
|         if(invitedPlayer == null) { | ||||
|             ChatUtils.sendSimpleWarningMessage(player, "group.invite.offline"); | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|         if(invitedPlayer == player) { | ||||
|             ChatUtils.sendSimpleWarningMessage(player, "group.invite.notyourself"); | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|         if(plugin.getArenaList().getPlayerArena(invitedPlayer) != null) { | ||||
|             ChatUtils.sendSimpleWarningMessage(player, "group.invite.invitedinround"); | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|         MinecleanerGroupManager groupManager = plugin.getGroupManager(); | ||||
|         if(groupManager.getInvitedGroup(player) != null) { | ||||
|             ChatUtils.sendSimpleInfoMessage(player, "group.invite.alreadyinvited"); | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|         if(groupManager.getGroup(player) != null && !Bukkit.getPlayer(groupManager.getGroup(player).getOwner()).equals(player)) { | ||||
|             ChatUtils.sendSimpleInfoMessage(player, "group.invite.nopermission"); | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|         if(groupManager.getGroup(player) == null) { | ||||
|             groupManager.createGroup(player); | ||||
|         } | ||||
| 
 | ||||
|         assert invitedPlayer != null; | ||||
|         player.sendMessage(Component.text("Du hast " + invitedPlayer.getName() + " in eine " + plugin.getDisplayedPluginName() + "-Gruppe eingeladen", NamedTextColor.GREEN)); | ||||
|         invitedPlayer.sendMessage(Component.text("Du wurdest von " + player.getName() + " in eine " + plugin.getDisplayedPluginName() + "-Gruppe eingeladen.", NamedTextColor.GREEN)); | ||||
|         invitedPlayer.sendMessage(Component.text("[Annehmen] ", NamedTextColor.GREEN).clickEvent(ClickEvent.runCommand("/minesweeper accept")).append(Component.text(" [Ablehnen]", NamedTextColor.RED).clickEvent(ClickEvent.runCommand("/minesweeper deny")))); | ||||
|         groupManager.getGroup(player).invitePlayerToGroup(invitedPlayer); | ||||
| 
 | ||||
|         return true; | ||||
|     } | ||||
| } | ||||
|  | @ -1,63 +0,0 @@ | |||
| package de.lunarakai.minecleaner.commands.groups; | ||||
| 
 | ||||
| import de.iani.cubesideutils.bukkit.commands.SubCommand; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.InternalCommandException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.NoPermissionException; | ||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; | ||||
| import de.iani.cubesideutils.commands.ArgsParser; | ||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| import de.lunarakai.minecleaner.utils.ChatUtils; | ||||
| import java.util.Iterator; | ||||
| import java.util.UUID; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.format.NamedTextColor; | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| public class ListGroupMembersCommand extends SubCommand { | ||||
|     private final MinecleanerPlugin plugin; | ||||
| 
 | ||||
|     public ListGroupMembersCommand(MinecleanerPlugin plugin) { | ||||
|         this.plugin = plugin; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getUsage() { | ||||
|         return ""; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean requiresPlayer() { | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getRequiredPermission() { | ||||
|         return MinecleanerPlugin.PERMISSION_PLAY; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean onCommand(CommandSender commandSender, Command command, String s, String s1, ArgsParser argsParser) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { | ||||
|         Player player = (Player) commandSender; | ||||
| 
 | ||||
|         if(plugin.getGroupManager().getGroup(player) == null) { | ||||
|             ChatUtils.sendSimpleInfoMessage(player, "group.common.notingroup"); | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|         ChatUtils.sendSimpleSpecialMessage(player, "-- Mitglieder deiner " + plugin.getDisplayedPluginName() + "gruppe --", NamedTextColor.AQUA); | ||||
|         for(Iterator<UUID> iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { | ||||
|             Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); | ||||
|             String ownerString = ""; | ||||
|             if(iteratorPlayer == Bukkit.getPlayer(plugin.getGroupManager().getGroup(player).getOwner())) { | ||||
|                 ownerString = " (Ersteller der Gruppe)"; | ||||
|             } | ||||
|             player.sendMessage(Component.text("  - " + iteratorPlayer.getName(), NamedTextColor.GREEN).append(Component.text(ownerString, NamedTextColor.RED))); | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
| } | ||||
|  | @ -185,7 +185,6 @@ public class Game { | |||
| 
 | ||||
|         switch (cell.getType()) { | ||||
|             case Mine: { | ||||
|                 resetFloodedFlaggedCellCounter(); | ||||
|                 explode(cell); | ||||
|                 break; | ||||
|             } | ||||
|  |  | |||
|  | @ -1,42 +0,0 @@ | |||
| package de.lunarakai.minecleaner.utils; | ||||
| 
 | ||||
| import java.util.regex.Pattern; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.format.NamedTextColor; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| public class ChatUtils { | ||||
|     static Pattern langKeyPattern = Pattern.compile("^\\w+\\.\\w+\\.\\w+$"); | ||||
| 
 | ||||
|     public static void sendSimpleSuccessMessage(Player player, String message) { | ||||
|         if(message.matches(langKeyPattern.pattern())) { | ||||
|             player.sendMessage(Component.translatable(message, NamedTextColor.GREEN)); | ||||
|         } else { | ||||
|             player.sendMessage(Component.text(message, NamedTextColor.GREEN)); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public static void sendSimpleInfoMessage(Player player, String message) { | ||||
|         if(message.matches(langKeyPattern.pattern())) { | ||||
|             player.sendMessage(Component.translatable(message, NamedTextColor.GOLD)); | ||||
|         } else { | ||||
|             player.sendMessage(Component.text(message, NamedTextColor.GOLD)); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public static void sendSimpleWarningMessage(Player player, String message) { | ||||
|         if(message.matches(langKeyPattern.pattern())) { | ||||
|             player.sendMessage(Component.translatable(message, NamedTextColor.DARK_RED)); | ||||
|         } else { | ||||
|             player.sendMessage(Component.text(message, NamedTextColor.DARK_RED)); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public static void sendSimpleSpecialMessage(Player player, String message, NamedTextColor color) { | ||||
|         if(message.matches(langKeyPattern.pattern())) { | ||||
|             player.sendMessage(Component.translatable(message, color)); | ||||
|         } else { | ||||
|             player.sendMessage(Component.text(message, color)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -1,33 +0,0 @@ | |||
| package de.lunarakai.minecleaner.utils; | ||||
| 
 | ||||
| import de.iani.cubesideutils.bukkit.items.ItemBuilder; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import org.bukkit.Material; | ||||
| import org.bukkit.enchantments.Enchantment; | ||||
| import org.bukkit.inventory.ItemFlag; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
| 
 | ||||
| public class ItemUtil { | ||||
| 
 | ||||
|     public static final ItemStack EMPTY_ICON = createGuiItem(Material.GRAY_STAINED_GLASS_PANE, Component.text(" "), true, true); | ||||
| 
 | ||||
|     public static ItemStack createGuiItem(Material material, Component name, String... lore) { | ||||
|         return createGuiItem(material, name, false, lore); | ||||
|     } | ||||
| 
 | ||||
|     public static ItemStack createGuiItem(Material material, Component name, boolean glowing, boolean showTooltip, String... lore) { | ||||
|         ItemBuilder builder = ItemBuilder.fromMaterial(material).displayName(name).lore(lore); | ||||
|         if (glowing) { | ||||
|             builder.enchantment(Enchantment.UNBREAKING, 1, true).flag(ItemFlag.HIDE_ENCHANTS); | ||||
|         } | ||||
|         if (!showTooltip) { | ||||
|             builder.flag(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); | ||||
|         } | ||||
|         return builder.build(); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     public static ItemStack createGuiItem(Material material, Component name, boolean glowing, String... lore) { | ||||
|         return createGuiItem(material, name, glowing, true, lore); | ||||
|     } | ||||
| } | ||||
|  | @ -1,52 +0,0 @@ | |||
| package de.lunarakai.minecleaner.utils; | ||||
| 
 | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.TextComponent; | ||||
| import net.kyori.adventure.text.event.ClickEvent; | ||||
| import net.kyori.adventure.text.format.NamedTextColor; | ||||
| 
 | ||||
| public class MinecleanerComponentUtils { | ||||
| 
 | ||||
|     public static TextComponent createLangComponent(String langKey, NamedTextColor namedColor) { | ||||
|         return Component.text() | ||||
|                 .color(namedColor) | ||||
|                 .append(Component.translatable(langKey)) | ||||
|                 .build(); | ||||
|     } | ||||
| 
 | ||||
|     public static TextComponent createLangComponent(String langKey, String arg0, NamedTextColor namedColor) { | ||||
|         return Component.text() | ||||
|                 .color(namedColor) | ||||
|                 .append(Component.translatable(langKey, Component.text(arg0))) | ||||
|                 .build(); | ||||
|     } | ||||
| 
 | ||||
|     public static TextComponent createLangComponent(String langKey, String arg0, String arg1, NamedTextColor namedColor) { | ||||
|         return Component.text() | ||||
|                 .color(namedColor) | ||||
|                 .append(Component.translatable(langKey, Component.text(arg0), Component.text(arg1))) | ||||
|                 .build(); | ||||
|     } | ||||
| 
 | ||||
|     public static TextComponent createLangComponent(String langKey, String filler, String arg1, NamedTextColor namedColor, NamedTextColor namedColorArg1) { | ||||
|         if(MinecleanerStringUtil.isValidURL(arg1)) { | ||||
|             TextComponent urlMessage = Component.text(arg1); | ||||
|             urlMessage = urlMessage.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, arg1)); | ||||
|             urlMessage = urlMessage.color(namedColorArg1); | ||||
| 
 | ||||
|             return Component.text() | ||||
|                     .color(namedColor) | ||||
|                     .append(Component.translatable(langKey)) | ||||
|                     .append(Component.text(filler)) | ||||
|                     .append(urlMessage) | ||||
|                     .build(); | ||||
|         } else { | ||||
|             return Component.text() | ||||
|                     .color(namedColor) | ||||
|                     .append(Component.translatable(langKey)) | ||||
|                     .append(Component.text(filler)) | ||||
|                     .append(Component.text(arg1, namedColorArg1)) | ||||
|                     .build(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -1,8 +1,14 @@ | |||
| package de.lunarakai.minecleaner.utils; | ||||
| 
 | ||||
| import de.iani.cubesideutils.bukkit.items.CustomHeads; | ||||
| import java.util.Arrays; | ||||
| import java.util.UUID; | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.Material; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
| import org.bukkit.inventory.meta.ItemMeta; | ||||
| import org.bukkit.inventory.meta.SkullMeta; | ||||
| import com.destroystokyo.paper.profile.PlayerProfile; | ||||
| import com.destroystokyo.paper.profile.ProfileProperty; | ||||
| 
 | ||||
| public enum MinecleanerHeads { | ||||
|     MINESWEEPER_TILE_0("38206373-5653-4431-85aa-6276f3f9a046", "Minesweeper Tile 0", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzRjMjg0YTRlOTc0MDA1ZWE4ZDFkNGQwNjc0ZWMwODk0ZWZkOGY2ZGQwMjQ4NjM5YTZjZmE5NGY4NTM4OCJ9fX0="), | ||||
|  | @ -32,11 +38,40 @@ public enum MinecleanerHeads { | |||
|      | ||||
|     private ItemStack head; | ||||
|   | ||||
|     MinecleanerHeads(String ownerUUIDString, String ownerName, String texturesProperty) { | ||||
|         head = CustomHeads.createHead(UUID.fromString(ownerUUIDString), ownerName, texturesProperty); | ||||
|     private MinecleanerHeads(String ownerUUIDString, String ownerName, String texturesProperty) { | ||||
|         head = createHead(UUID.fromString(ownerUUIDString), ownerName, texturesProperty); | ||||
|     } | ||||
|   | ||||
|     public ItemStack getHead() { | ||||
|         return new ItemStack(head); | ||||
|     } | ||||
|   | ||||
|     public ItemStack getHead(String displayName) { | ||||
|         return getHead(displayName, (String[]) null); | ||||
|     } | ||||
|   | ||||
|     public ItemStack getHead(String displayName, String... lore) { | ||||
|         ItemStack stack = getHead(); | ||||
|         ItemMeta meta = stack.getItemMeta(); | ||||
|         meta.setDisplayName(displayName); | ||||
|         if (lore != null && lore.length > 0) { | ||||
|             meta.setLore(Arrays.asList(lore)); | ||||
|         } | ||||
|         stack.setItemMeta(meta); | ||||
|         return stack; | ||||
|     } | ||||
|   | ||||
|     public static ItemStack createHead(UUID ownerUUID, String ownerName, String texturesProperty) { | ||||
|         if (ownerName == null) { | ||||
|             ownerName = ownerUUID.toString().substring(0, 16); | ||||
|         } | ||||
|         ItemStack stack = new ItemStack(Material.PLAYER_HEAD); | ||||
|         SkullMeta meta = (SkullMeta) stack.getItemMeta(); | ||||
|         PlayerProfile profile = Bukkit.createProfile(ownerUUID, ownerName); | ||||
|         profile.setProperty(new ProfileProperty("textures", texturesProperty)); | ||||
|         meta.setPlayerProfile(profile); | ||||
|         stack.setItemMeta(meta); | ||||
|         return stack; | ||||
|     } | ||||
|      | ||||
| } | ||||
|  |  | |||
|  | @ -1,8 +1,5 @@ | |||
| package de.lunarakai.minecleaner.utils; | ||||
| 
 | ||||
| import java.net.URL; | ||||
| import net.kyori.adventure.text.Component; | ||||
| 
 | ||||
| public class MinecleanerStringUtil { | ||||
|     private MinecleanerStringUtil() { | ||||
|     }     | ||||
|  | @ -15,7 +12,7 @@ public class MinecleanerStringUtil { | |||
|         min = min % 60; | ||||
|         StringBuilder timeString = new StringBuilder(); | ||||
|         if (hours > 0) { | ||||
|             String hoursString = " " + Component.translatable("minecleaner.common.hours"); | ||||
|             String hoursString = " Stunden"; | ||||
|             if(shorten) { | ||||
|                 hoursString = " h"; | ||||
|             } | ||||
|  | @ -25,7 +22,7 @@ public class MinecleanerStringUtil { | |||
|             if (!timeString.isEmpty()) { | ||||
|                 timeString.append(", "); | ||||
|             } | ||||
|             String minString = " " + Component.translatable("minecleaner.common.minutes"); | ||||
|             String minString = " Minuten"; | ||||
|             if(shorten) { | ||||
|                 minString = " min"; | ||||
|             } | ||||
|  | @ -33,9 +30,9 @@ public class MinecleanerStringUtil { | |||
|         } | ||||
|         if (sec > 0 || !timeString.isEmpty()) { | ||||
|             if (!timeString.isEmpty()) { | ||||
|                 timeString.append(Component.text(" ")).append(Component.translatable("minecleaner.common.and").append(Component.text(" "))); | ||||
|                 timeString.append(" und "); | ||||
|             } | ||||
|             String secondsString = " " + Component.translatable("minecleaner.common.seconds"); | ||||
|             String secondsString = " Sekunden"; | ||||
|             if(shorten) { | ||||
|                 secondsString = " s"; | ||||
|             } | ||||
|  | @ -53,14 +50,4 @@ public class MinecleanerStringUtil { | |||
|         String percentageString = String.format("%.1f", percent); | ||||
|         return percentageString + "%"; | ||||
|     }   | ||||
| 
 | ||||
|     public static boolean isValidURL(String urlString) { | ||||
|         try { | ||||
|             URL url = new URL(urlString); | ||||
|             url.toURI(); | ||||
|             return true; | ||||
|         } catch (Exception e) { | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -1,11 +0,0 @@ | |||
| package de.lunarakai.minecleaner.utils; | ||||
| 
 | ||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| public class MinecleanerUtils { | ||||
| 
 | ||||
|     public static boolean isPlayerInGroup(MinecleanerPlugin plugin, Player player) { | ||||
|         return plugin.getGroupManager().getGroup(player) != null; | ||||
|     } | ||||
| } | ||||
|  | @ -1,77 +0,0 @@ | |||
| minecleaner.info.version=Version | ||||
| minecleaner.info.developer=Entwickelt von | ||||
| minecleaner.info.website=Website | ||||
| minecleaner.info.license=Lizenz | ||||
| 
 | ||||
| minecleaner.common.hours=Stunden | ||||
| minecleaner.common.minutes=Minuten | ||||
| minecleaner.common.seconds=Sekunden | ||||
| minecleaner.common.and=und | ||||
| 
 | ||||
| settings.manualreset.allow=Manuelles Resetten aktiviert | ||||
| settings.manualreset.deny=Manuelles Resetten deaktiviert | ||||
| settings.additionaltimer.allow=Zusätzliche Anzeige in der Action Bar aktiviert | ||||
| settings.additionaltimer.deny=Zusätzliche Anzeige in der Action Bar deaktiviert | ||||
| settings.timer.allow=Timer wird angezeigt | ||||
| settings.timer.deny=Timer wird nicht angezeigt | ||||
| settings.resettime.text=Resetzeit | ||||
| 
 | ||||
| 
 | ||||
| arena.name.invalid=Ungültiger Arenaname. Erlaubt sind Buchstaben, Zahlen und der Unterstrich | ||||
| arena.name.exists=Eine Arena mit diesem Namen existiert bereits | ||||
| arena.width.klein=Klein | ||||
| arena.width.mittel=Mittel | ||||
| arena.width.gross=Gross | ||||
| arena.width.experte=Experte | ||||
| arena.widthindex.invalid=Kein Valider Arena WidthIndex! | ||||
| arena.widthindex.validOptions=0 (oder weglassen) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33 | ||||
| arena.widthindex.toolarge=Arena WidthIndex darf nicht grösser als 3 sein | ||||
| arena.create.lookAtCenter=Bitte gucke den Block an, der im Zentrum des {0}-Spielfelds sein soll. | ||||
| arena.create.lookAtSide=Bitte gucke die Seite des Blockes an, wo das {0}-Spielfeld erstellt werden soll. | ||||
| arena.create.otherArena=An dieser Stelle befindet sich bereits eine Arena. | ||||
| arena.create.success=Die Arena wurde erfolgreich angelegt. | ||||
| arena.delete.success=Die {0}-Arena {1} wurde gelöscht. | ||||
| arena.delete.noarena=Hier befindet sich keine {0}-Arena. | ||||
| 
 | ||||
| arena.common.noarena=Hier befindet sich keine Arena. | ||||
| arena.common.toofaraway=Du hast dich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen. | ||||
| arena.common.groupleadertoofaraway=Der Ersteller der Gruppe hat sich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen. | ||||
| 
 | ||||
| arena.list.created=Angelegte {0}-Arenen | ||||
| arena.list.none=(keine) | ||||
| 
 | ||||
| data.player.noData=Für Spieler "{0}" existieren keine Daten. | ||||
| data.player.self=Deine {0} Statistik | ||||
| data.player.other={0}-Statistik von {1} | ||||
| data.player.roundswon=Runden gewonnen | ||||
| data.player.pointsscored=Punkte erspielt | ||||
| data.player.outof=von | ||||
| data.player.besttime=Bestzeit | ||||
| data.player.thismonth=Dieser Monat | ||||
| 
 | ||||
| data.delete.playerNotFound=Ein Spieler mit dem Namen "{0}" konnte nicht gefunden werden. | ||||
| data.delete.deleted=Alle {0}-Statistiken von Spieler "{1}" wurden gelöscht. | ||||
| 
 | ||||
| data.console.nodata=Für die Konsole existieren keine Daten. | ||||
| 
 | ||||
| group.common.notingroup=Du bist in keiner Gruppe. | ||||
| 
 | ||||
| group.invite.accepted=Du hast die Einladung angenommen. | ||||
| group.invite.denied=Du hast die Einladung abgelehnt. | ||||
| group.invite.notinvited=Du wurdest in keine Gruppe eingeladen. | ||||
| group.invite.creatorinround=Du kannst keine Einladung annehmen während die Person, die dich eingeladen hat, in einer Runde ist. | ||||
| group.invite.notwhileinround=Du kannst keine Einladung verschicken während du in einer Runde bist. | ||||
| group.invite.offline=Du kannst keine Person einladen, die entweder offline oder auf einen anderen Server ist. | ||||
| group.invite.notyourself=Du kannst dich nicht selber in eine Gruppe einladen. | ||||
| group.invite.invitedinround=Du kannst Spieler nicht einladen, die bereits in einer Runde sind. | ||||
| group.invite.alreadyinvited=Du wurdest bereits in eine Gruppe eingeladen. Bitte kümmere dich zuerst um die Einladung bevor du eine eigene Gruppe erstellst. | ||||
| group.invite.nopermission=Nur als Ersteller der Gruppe bist du berechtigt Leute einzuladen. | ||||
| group.invite.accept=Annehmen | ||||
| group.invite.deny=Ablehnen | ||||
| 
 | ||||
| group.dismantle.nopermission=Du bist nicht berechtigt deine Gruppe aufzulösen. | ||||
| group.dismantle.yourgroup=Die Gruppe in der du dich befindest wurde aufgelöst. | ||||
| 
 | ||||
| group.game.nopermission=Nur der Ersteller der Gruppe kann eine neue Runde starten! | ||||
| group.creator.removed=Die Gruppe wurde aufgelöst, da die Person, welche die Gruppe erstellt hat, aus der Gruppe entfernt wurde. | ||||
| group.dismantled.alone=Die Gruppe wurde aufgelöst, da du nur noch alleine in der Gruppe bist. | ||||
|  | @ -1,76 +0,0 @@ | |||
| minecleaner.info.version=Version | ||||
| minecleaner.info.developer=Developed by | ||||
| minecleaner.info.website=Website | ||||
| minecleaner.info.license=License | ||||
| 
 | ||||
| minecleaner.common.hours=hours | ||||
| minecleaner.common.minutes=minutes | ||||
| minecleaner.common.seconds=seconds | ||||
| minecleaner.common.and=and | ||||
| 
 | ||||
| settings.manualreset.allow=Manual reset activated | ||||
| settings.manualreset.deny=Manual reset deactivated | ||||
| settings.additionaltimer.allow=Additional display activated in the action bar | ||||
| settings.additionaltimer.deny=Additional display deactivated in the action bar | ||||
| settings.timer.allow=Timer is displayed | ||||
| settings.timer.deny=Timer is not displayed | ||||
| settings.resettime.text=reset time | ||||
| 
 | ||||
| arena.name.invalid=Invalid arena name. Allowed are letters, numbers and the underscore | ||||
| arena.name.exists=An arena with this name already exists | ||||
| arena.width.klein=Small | ||||
| arena.width.mittel=Medium | ||||
| arena.width.gross=Large | ||||
| arena.width.experte=Expert | ||||
| arena.widthindex.invalid=Not a valid Arena WidthIndex | ||||
| arena.widthindex.validOptions=0 (or leave empty) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33 | ||||
| arena.widthindex.toolarge=Arena WidthIndex must not be greater than 3 | ||||
| arena.create.lookAtCenter=Please look at the block that should be in the center of the {0} field. | ||||
| arena.create.lookAtSide=Please look at the side of the block where the {0} field is to be created. | ||||
| arena.create.otherArena=There is already an arena at this location. | ||||
| arena.create.success=The arena has been created successfully. | ||||
| arena.delete.success=The {0}-arena {1} has been deleted. | ||||
| arena.delete.noarena=There is no {0}-arena here. | ||||
| 
 | ||||
| arena.common.noarena=There is no arena here. | ||||
| arena.common.toofaraway=You have moved too far away from the arena. The match has been abandoned. | ||||
| arena.common.groupleadertoofaraway=The creator of the group has moved too far away from the arena. The match has been abandoned. | ||||
| 
 | ||||
| arena.list.created=Created {0} arenas | ||||
| arena.list.none=(none) | ||||
| 
 | ||||
| data.player.noData=No data exists for player "{0}". | ||||
| data.player.self=Your {0} statistics | ||||
| data.player.other={0} statistics from {1} | ||||
| data.player.roundswon=Rounds won | ||||
| data.player.pointsscored=Points scored | ||||
| data.player.outof=out of | ||||
| data.player.besttime=Best time | ||||
| data.player.thismonth=This month | ||||
| 
 | ||||
| data.delete.playerNotFound=A player with the name "{0}" could not be found. | ||||
| data.delete.deleted=All {0} stats of player "{1}" have been deleted. | ||||
| 
 | ||||
| data.console.nodata=No data exists for the console. | ||||
| 
 | ||||
| group.common.notingroup=You are not in a group. | ||||
| 
 | ||||
| group.invite.accepted=You have accepted the invitation. | ||||
| group.invite.denied=You declined the invitation. | ||||
| group.invite.notinvited=You have not been invited to any group. | ||||
| group.invite.creatorinround=You cannot accept an invitation while the person who invited you is in a round. | ||||
| group.invite.notwhileinround=You cannot send an invitation while you are in a round. | ||||
| group.invite.offline=You cannot invite a person who is either offline or on another server. | ||||
| group.invite.notyourself=You cannot invite yourself to a group. | ||||
| group.invite.invitedinround=You cannot invite players who are already in a round. | ||||
| group.invite.alreadyinvited=You have already been invited to a group. Please take care of the invitation first before you create your own group. | ||||
| group.invite.nopermission=Only as the creator of the group are you authorized to invite people. | ||||
| group.invite.accept=Accept | ||||
| group.invite.deny=Deny | ||||
| 
 | ||||
| group.dismantle.nopermission=You are not authorized to dissolve your group. | ||||
| group.dismantle.yourgroup=The group you are in has been disbanded. | ||||
| 
 | ||||
| group.game.nopermission=Only the creator of the group can start a new round! | ||||
| group.creator.removed=The group has been dissolved because the person who created the group has been removed from the group. | ||||
| group.dismantled.alone=The group has been dissolved as you are now only alone in the group. | ||||
|  | @ -4,9 +4,6 @@ author: LunarAkai | |||
| website: https://github.com/LunarAkai/Minecleaner | ||||
| main: de.lunarakai.minecleaner.MinecleanerPlugin | ||||
| api-version: '1.20' | ||||
| depend: | ||||
|   - CubesideUtils | ||||
| softdepend: [CubesideSettings, PlayerUUIDCache] | ||||
| commands: | ||||
|   minecleaner: | ||||
|     description: main command | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue