Compare commits
	
		
			35 commits
		
	
	
		
			
				without-co
			
			...
			
				main
			
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| a89930a73a | |||
| 8c105bba58 | |||
| 017a02a0c0 | |||
| 854fdd1c1d | |||
| 9f65250771 | |||
| 31b18a98c9 | |||
| 63674eb9ef | |||
| a308cc9546 | |||
| d5536db37f | |||
| e17b7fcc1e | |||
| 7e171194ce | |||
| e4e973449b | |||
| 37ebd2a743 | |||
| 558f113f9d | |||
| 12c58e86a2 | |||
| 5df021e3dd | |||
| 50f51126bb | |||
| 70605461ef | |||
| 45ad276699 | |||
| b57e9ff410 | |||
| b7e97212ac | |||
| 583f8a1257 | |||
| 2bc7a3979e | |||
| f09c9772b2 | |||
| 75768ea587 | |||
| b1193d4687 | |||
| 0f349c3ea0 | |||
| d0c27ae733 | |||
| 94d796e09b | |||
| e2c84ec436 | |||
| b773d0e490 | |||
| 36e96a50e8 | |||
| 4e283a77b1 | |||
| d4a6b64ae5 | |||
| 482fc1e22d | 
					 34 changed files with 1840 additions and 323 deletions
				
			
		
							
								
								
									
										6
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -114,3 +114,9 @@ buildNumber.properties | ||||||
| 
 | 
 | ||||||
| # Common working directory | # Common working directory | ||||||
| run/ | run/ | ||||||
|  | 
 | ||||||
|  | # eclipse | ||||||
|  | /.classpath | ||||||
|  | /.project | ||||||
|  | /.settings | ||||||
|  | /target | ||||||
							
								
								
									
										6
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | # 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> |     <groupId>de.lunarakai</groupId> | ||||||
|     <artifactId>Minecleaner</artifactId> |     <artifactId>Minecleaner</artifactId> | ||||||
|     <version>1.1.4</version> |     <version>1.2.0-dev</version> | ||||||
|     <packaging>jar</packaging> |     <packaging>jar</packaging> | ||||||
| 
 | 
 | ||||||
|     <name>Minecleaner</name> |     <name>Minecleaner</name> | ||||||
|  | @ -86,7 +86,7 @@ | ||||||
|         <dependency> |         <dependency> | ||||||
|             <groupId>io.papermc.paper</groupId> |             <groupId>io.papermc.paper</groupId> | ||||||
|             <artifactId>paper-api</artifactId> |             <artifactId>paper-api</artifactId> | ||||||
|             <version>1.20.4-R0.1-SNAPSHOT</version> |             <version>1.21.3-R0.1-SNAPSHOT</version> | ||||||
|             <scope>provided</scope> |             <scope>provided</scope> | ||||||
|         </dependency> |         </dependency> | ||||||
|         <dependency> |         <dependency> | ||||||
|  |  | ||||||
|  | @ -2,10 +2,14 @@ package de.lunarakai.minecleaner; | ||||||
| 
 | 
 | ||||||
| import java.io.File; | import java.io.File; | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
|  | import java.util.Arrays; | ||||||
| import java.util.Collection; | import java.util.Collection; | ||||||
| import java.util.HashMap; | import java.util.HashMap; | ||||||
|  | import java.util.Iterator; | ||||||
| import java.util.UUID; | import java.util.UUID; | ||||||
| import java.util.logging.Level; | import java.util.logging.Level; | ||||||
|  | import de.lunarakai.minecleaner.utils.MinecleanerUtils; | ||||||
|  | import org.bukkit.Bukkit; | ||||||
| import org.bukkit.Location; | import org.bukkit.Location; | ||||||
| import org.bukkit.block.Block; | import org.bukkit.block.Block; | ||||||
| import org.bukkit.configuration.ConfigurationSection; | import org.bukkit.configuration.ConfigurationSection; | ||||||
|  | @ -97,6 +101,13 @@ public class ArenaList { | ||||||
|         save(); |         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) { |     public boolean collidesWithArena(MinecleanerArena newArena) { | ||||||
|         for(Location location : newArena.getBlocks()) { |         for(Location location : newArena.getBlocks()) { | ||||||
|             if(arenaBlocks.get(location) != null) { |             if(arenaBlocks.get(location) != null) { | ||||||
|  | @ -106,16 +117,74 @@ public class ArenaList { | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void setArenaForPlayer(Player player, MinecleanerArena arena) { |     public void setArenaForPlayers(Player[] players, MinecleanerArena arena) { | ||||||
|         if(arena != null) { |         if(arena != null) { | ||||||
|             playersInArena.put(player.getUniqueId(), arena); |             for(int i = 0; i < players.length; i++) { | ||||||
|  |                 playersInArena.put(players[i].getUniqueId(), arena); | ||||||
|  |             } | ||||||
|         } else { |         } else { | ||||||
|             playersInArena.remove(player.getUniqueId()); |             for(int i = 0; i < players.length; i++) { | ||||||
|  |                 playersInArena.remove(players[i].getUniqueId()); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public MinecleanerArena getPlayerArena(Player player) { |     public MinecleanerArena getPlayerArena(Player player) { | ||||||
|         return playersInArena.get(player.getUniqueId()); |         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()); | ||||||
|  | //        } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public MinecleanerArena getArenaAtBlock(Block block) { |     public MinecleanerArena getArenaAtBlock(Block block) { | ||||||
|  | @ -127,21 +196,30 @@ public class ArenaList { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void removeArena(MinecleanerArena arena) { |     public void removeArena(MinecleanerArena arena) { | ||||||
|         if(arena.hasPlayer()) { |         if(arena.hasPlayers()) { | ||||||
|             plugin.getManager().leaveArena(arena.getCurrentPlayer(), true); |             plugin.getManager().leaveArena(arena.getCurrentPlayers(), true, true); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         for(UUID id : arena.getBlockDisplays()) { |         removeArenaBlockDisplayIDs(arena); | ||||||
|             if(id != null) { |         removeArenaBlocks(arena); | ||||||
|                 arenaBlockDisplays.remove(id); | 
 | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         for(Location block : arena.getBlocks()) {  |  | ||||||
|             arenaBlocks.remove(block); |  | ||||||
|         } |  | ||||||
|         arena.removeBlockDisplays(); |         arena.removeBlockDisplays(); | ||||||
| 
 | 
 | ||||||
|         arenas.remove(arena.getName()); |         arenas.remove(arena.getName()); | ||||||
|         save(); |         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); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
| }  | }  | ||||||
|  |  | ||||||
|  | @ -1,8 +1,35 @@ | ||||||
| package de.lunarakai.minecleaner; | 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 { | public enum ArenaStatus { | ||||||
|  |     /** | ||||||
|  |      * default state | ||||||
|  |      */ | ||||||
|     INACTIVE, |     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, |     CONFIRM_PLAYING, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Active when a Player (or Group) has confirmed to start a Minecleaner Game (and while playing) | ||||||
|  |      */ | ||||||
|     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 |     COMPLETED | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -10,17 +10,13 @@ import java.util.ArrayList; | ||||||
| import java.util.Arrays; | import java.util.Arrays; | ||||||
| import java.util.List; | import java.util.List; | ||||||
| import java.util.UUID; | import java.util.UUID; | ||||||
| import java.util.logging.Level; |  | ||||||
| 
 | 
 | ||||||
| import net.kyori.adventure.text.Component; | import net.kyori.adventure.text.Component; | ||||||
| import net.kyori.adventure.text.TextComponent; |  | ||||||
| import net.md_5.bungee.api.ChatColor; | import net.md_5.bungee.api.ChatColor; | ||||||
| import net.md_5.bungee.api.ChatMessageType; | import org.bukkit.Bukkit; | ||||||
| import net.md_5.bungee.api.chat.BaseComponent; |  | ||||||
| import org.bukkit.Location; | import org.bukkit.Location; | ||||||
| import org.bukkit.Material; | import org.bukkit.Material; | ||||||
| import org.bukkit.World; | import org.bukkit.World; | ||||||
| import org.bukkit.block.Block; |  | ||||||
| import org.bukkit.block.BlockFace; | import org.bukkit.block.BlockFace; | ||||||
| import org.bukkit.block.data.BlockData; | import org.bukkit.block.data.BlockData; | ||||||
| import org.bukkit.configuration.ConfigurationSection; | import org.bukkit.configuration.ConfigurationSection; | ||||||
|  | @ -47,7 +43,7 @@ public class MinecleanerArena { | ||||||
|     private TextDisplay textDisplay; |     private TextDisplay textDisplay; | ||||||
|     private boolean hasMadeFirstClick = false; |     private boolean hasMadeFirstClick = false; | ||||||
|     private int flagsPlaced = 0; |     private int flagsPlaced = 0; | ||||||
|     private Player currentPlayer; |     private Player[] currentPlayers; | ||||||
|     private long currentGameStartTime; |     private long currentGameStartTime; | ||||||
|     private long ingameTime; |     private long ingameTime; | ||||||
|     private Game currentMinecleanerGame; |     private Game currentMinecleanerGame; | ||||||
|  | @ -239,13 +235,13 @@ public class MinecleanerArena { | ||||||
|         new BukkitRunnable() { |         new BukkitRunnable() { | ||||||
|             @Override |             @Override | ||||||
|                 public void run() { |                 public void run() { | ||||||
|                 if(arenaStatus == ArenaStatus.PLAYING && currentPlayer != null) { |                 if(arenaStatus == ArenaStatus.PLAYING && currentPlayers != null) { | ||||||
|                     if(!currentMinecleanerGame.gameover) { |                     if(!currentMinecleanerGame.gameover) { | ||||||
|                         ingameTime++; |                         ingameTime++; | ||||||
|                     } |                     } | ||||||
|                     if(plugin.isStatisticsEnabled()) { |                     if(plugin.isStatisticsEnabled()) { | ||||||
|                         if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0 |                         if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayers[0]) != 0 | ||||||
|                                 || plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { |                                 || plugin.getManager().getSettingsValue("timer", currentPlayers[0]) != 0) { | ||||||
|                             updateIngameInfoTexts(); |                             updateIngameInfoTexts(); | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|  | @ -258,19 +254,19 @@ public class MinecleanerArena { | ||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void addJoiningPlayer(Player player) { |     public void addJoiningPlayers(Player[] players) { | ||||||
|         Preconditions.checkNotNull(player); |         Preconditions.checkNotNull(players); | ||||||
|         Preconditions.checkState(arenaStatus == ArenaStatus.INACTIVE); |         Preconditions.checkState(arenaStatus == ArenaStatus.INACTIVE); | ||||||
|         this.arenaStatus = ArenaStatus.CONFIRM_PLAYING; |         this.arenaStatus = ArenaStatus.CONFIRM_PLAYING; | ||||||
|         this.currentPlayer = player; |         this.currentPlayers = players; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void removePlayer() { |     public void removePlayers() { | ||||||
|         int sizeWidth = BoardSize.boardSizesWidth[widthIndex]; |         int sizeWidth = BoardSize.boardSizesWidth[widthIndex]; | ||||||
|         int sizeHeight = BoardSize.boardSizesHeight[widthIndex]; |         int sizeHeight = BoardSize.boardSizesHeight[widthIndex]; | ||||||
| 
 | 
 | ||||||
|         this.arenaStatus = ArenaStatus.INACTIVE; |         this.arenaStatus = ArenaStatus.INACTIVE; | ||||||
|         this.currentPlayer = null; |         this.currentPlayers = null; | ||||||
|         this.currentMinecleanerGame = null; |         this.currentMinecleanerGame = null; | ||||||
| 
 | 
 | ||||||
|         // load chunk of block -1 and x+1 |         // load chunk of block -1 and x+1 | ||||||
|  | @ -386,8 +382,8 @@ public class MinecleanerArena { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private void showTextDisplay() { |     private void showTextDisplay() { | ||||||
|         Player player = this.getCurrentPlayer(); |         Player[] players = this.getCurrentPlayers(); | ||||||
|         World world = player.getWorld(); |         World world = players[0].getWorld(); | ||||||
| 
 | 
 | ||||||
|         double textCenterX = centerLocation.getX(); |         double textCenterX = centerLocation.getX(); | ||||||
|         double textCenterY = centerLocation.getY() + ((double) BoardSize.boardSizesHeight[widthIndex] / 3 - 2.75 - widthIndex); |         double textCenterY = centerLocation.getY() + ((double) BoardSize.boardSizesHeight[widthIndex] / 3 - 2.75 - widthIndex); | ||||||
|  | @ -421,7 +417,7 @@ public class MinecleanerArena { | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         Location textDisplayLocation = new Location(player.getWorld(), textCenterX, textCenterY, textCenterZ); |         Location textDisplayLocation = new Location(players[0].getWorld(), textCenterX, textCenterY, textCenterZ); | ||||||
| 
 | 
 | ||||||
|         textDisplay = world.spawn(textDisplayLocation.add(-1, 2 + widthIndex, -0.25), TextDisplay.class, textdisplay -> { |         textDisplay = world.spawn(textDisplayLocation.add(-1, 2 + widthIndex, -0.25), TextDisplay.class, textdisplay -> { | ||||||
|             Transformation transformation = textdisplay.getTransformation(); |             Transformation transformation = textdisplay.getTransformation(); | ||||||
|  | @ -449,12 +445,14 @@ public class MinecleanerArena { | ||||||
|     public void updateIngameInfoTexts() { |     public void updateIngameInfoTexts() { | ||||||
|         String timer = ""; |         String timer = ""; | ||||||
|         if(plugin.isStatisticsEnabled()) { |         if(plugin.isStatisticsEnabled()) { | ||||||
|             if(plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { |             if(plugin.getManager().getSettingsValue("timer", currentPlayers[0]) != 0) { | ||||||
|                 timer = ChatColor.GOLD + " Zeit: " + MinecleanerStringUtil.timeToString((ingameTime/20)*1000, true)  + " "; |                 timer = ChatColor.GOLD + " Zeit: " + MinecleanerStringUtil.timeToString((ingameTime/20)*1000, true)  + " "; | ||||||
|             } |             } | ||||||
|             if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0 && plugin.isStatisticsEnabled()) { |             if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayers[0]) != 0 && plugin.isStatisticsEnabled()) { | ||||||
|                 String componentActionBar = ChatColor.GREEN + "Flaggen gesetzt: " + flagsPlaced + ChatColor.RED + "  Minen insgesamt: " + BoardSize.mineCounter[widthIndex]; |                 String componentActionBar = ChatColor.GREEN + "Flaggen gesetzt: " + flagsPlaced + ChatColor.RED + "  Minen insgesamt: " + BoardSize.mineCounter[widthIndex]; | ||||||
|                 currentPlayer.sendActionBar(Component.text(componentActionBar + " " + timer)); |                 for(int i = 0; i < currentPlayers.length; i++) { | ||||||
|  |                     currentPlayers[i].sendActionBar(Component.text(componentActionBar + " " + timer)); | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | @ -499,11 +497,15 @@ public class MinecleanerArena { | ||||||
|         if (currentMinecleanerGame != null && !currentMinecleanerGame.gameover) { |         if (currentMinecleanerGame != null && !currentMinecleanerGame.gameover) { | ||||||
|             Cell cell = currentMinecleanerGame.getCell(x, y); |             Cell cell = currentMinecleanerGame.getCell(x, y); | ||||||
|             if (!cell.isRevealed()) { |             if (!cell.isRevealed()) { | ||||||
|                 Player player = this.currentPlayer; |                 Player[] players = this.currentPlayers; | ||||||
| 
 | 
 | ||||||
|                 currentMinecleanerGame.flag(x, y); |                 currentMinecleanerGame.flag(x, y); | ||||||
|                 if (currentMinecleanerGame.gameover) { |                 if (currentMinecleanerGame.gameover) { | ||||||
|                     plugin.getManager().handleGameover(player, this, true); |                     Bukkit.getScheduler().runTaskLater(plugin, () -> { | ||||||
|  |                          arenaStatus = ArenaStatus.COMPLETED; | ||||||
|  |                     }, 5L); | ||||||
|  | 
 | ||||||
|  |                     plugin.getManager().handleGameover(players, this, true); | ||||||
|                 } |                 } | ||||||
|                 if (cell.isFlagged() == true) { |                 if (cell.isFlagged() == true) { | ||||||
|                     flagsPlaced = flagsPlaced + 1; |                     flagsPlaced = flagsPlaced + 1; | ||||||
|  | @ -523,7 +525,7 @@ public class MinecleanerArena { | ||||||
|         if (currentMinecleanerGame != null && !currentMinecleanerGame.gameover) { |         if (currentMinecleanerGame != null && !currentMinecleanerGame.gameover) { | ||||||
|             Cell cell = currentMinecleanerGame.getCell(x, y); |             Cell cell = currentMinecleanerGame.getCell(x, y); | ||||||
|             if (!cell.isFlagged()) { |             if (!cell.isFlagged()) { | ||||||
|                 Player player = this.currentPlayer; |                 Player[] players = this.currentPlayers; | ||||||
| 
 | 
 | ||||||
|                 if (!hasMadeFirstClick) { |                 if (!hasMadeFirstClick) { | ||||||
|                     currentMinecleanerGame.firstClick(x, y); |                     currentMinecleanerGame.firstClick(x, y); | ||||||
|  | @ -534,7 +536,10 @@ public class MinecleanerArena { | ||||||
|                 setBlockForCellType(x, y, cell); |                 setBlockForCellType(x, y, cell); | ||||||
| 
 | 
 | ||||||
|                 if (currentMinecleanerGame.gameover) { |                 if (currentMinecleanerGame.gameover) { | ||||||
|                     plugin.getManager().handleGameover(player, this, !(cell.isRevealed() && cell.isExploded())); |                     Bukkit.getScheduler().runTaskLater(plugin, () -> { | ||||||
|  |                         arenaStatus = ArenaStatus.COMPLETED; | ||||||
|  |                     }, 5L); | ||||||
|  |                     plugin.getManager().handleGameover(players, this, !(cell.isRevealed() && cell.isExploded())); | ||||||
|                 } else { |                 } else { | ||||||
|                     updateIngameInfoTexts(); |                     updateIngameInfoTexts(); | ||||||
|                 } |                 } | ||||||
|  | @ -689,12 +694,12 @@ public class MinecleanerArena { | ||||||
|         return name; |         return name; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public boolean hasPlayer() { |     public boolean hasPlayers() { | ||||||
|         return currentPlayer != null; |         return currentPlayers != null; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public Player getCurrentPlayer() { |     public Player[] getCurrentPlayers() { | ||||||
|         return currentPlayer; |         return currentPlayers; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public Location getLocation() { |     public Location getLocation() { | ||||||
|  | @ -723,10 +728,16 @@ public class MinecleanerArena { | ||||||
|         return currentGameStartTime; |         return currentGameStartTime; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public Game getCurrentMinecleanerGame() { return currentMinecleanerGame; } | ||||||
|  | 
 | ||||||
|     public int getWidthIndex() { |     public int getWidthIndex() { | ||||||
|         return widthIndex; |         return widthIndex; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public void setArenaStaus(ArenaStatus status) { | ||||||
|  |         this.arenaStatus = status; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     private int getRotationYaw() { |     private int getRotationYaw() { | ||||||
|         return switch (orientation) { |         return switch (orientation) { | ||||||
|             case EAST -> 90; |             case EAST -> 90; | ||||||
|  | @ -735,4 +746,5 @@ public class MinecleanerArena { | ||||||
|             default -> 0; |             default -> 0; | ||||||
|         }; |         }; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | @ -0,0 +1,155 @@ | ||||||
|  | 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,6 +1,11 @@ | ||||||
| package de.lunarakai.minecleaner; | package de.lunarakai.minecleaner; | ||||||
| 
 | 
 | ||||||
|  | import de.lunarakai.minecleaner.utils.ChatUtils; | ||||||
|  | import java.util.Arrays; | ||||||
| import java.util.Iterator; | import java.util.Iterator; | ||||||
|  | import java.util.UUID; | ||||||
|  | import java.util.logging.Level; | ||||||
|  | import org.bukkit.Bukkit; | ||||||
| import org.bukkit.Location; | import org.bukkit.Location; | ||||||
| import org.bukkit.block.Block; | import org.bukkit.block.Block; | ||||||
| import org.bukkit.entity.Player; | import org.bukkit.entity.Player; | ||||||
|  | @ -20,7 +25,6 @@ import org.bukkit.event.player.PlayerQuitEvent; | ||||||
| import org.bukkit.inventory.EquipmentSlot; | import org.bukkit.inventory.EquipmentSlot; | ||||||
| import org.bukkit.util.RayTraceResult; | import org.bukkit.util.RayTraceResult; | ||||||
| import org.bukkit.util.Vector; | import org.bukkit.util.Vector; | ||||||
| import net.md_5.bungee.api.ChatColor; |  | ||||||
| 
 | 
 | ||||||
| public class MinecleanerListener implements Listener { | public class MinecleanerListener implements Listener { | ||||||
|     private final MinecleanerPlugin plugin; |     private final MinecleanerPlugin plugin; | ||||||
|  | @ -38,7 +42,18 @@ public class MinecleanerListener implements Listener { | ||||||
|             if(arena != null) { |             if(arena != null) { | ||||||
|                 e.setCancelled(true); |                 e.setCancelled(true); | ||||||
|                 MinecleanerArena arenaClicked = plugin.getArenaList().getArenaAtBlock(block); |                 MinecleanerArena arenaClicked = plugin.getArenaList().getArenaAtBlock(block); | ||||||
|                 if(arenaClicked == arena && arena.getArenaStatus() == ArenaStatus.PLAYING) { | 
 | ||||||
|  |                 if(arenaClicked != arena) { | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 boolean hasRightClicked = false; | ||||||
|  |                 if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { | ||||||
|  |                     hasRightClicked = true; | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 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 d0x = arena.getOrientation().getModX(); | ||||||
|                         int d0z = arena.getOrientation().getModZ(); |                         int d0z = arena.getOrientation().getModZ(); | ||||||
|                         int d1x = -d0z; |                         int d1x = -d0z; | ||||||
|  | @ -68,28 +83,48 @@ public class MinecleanerListener implements Listener { | ||||||
|                                 blockx -= blockxInt; |                                 blockx -= blockxInt; | ||||||
|                                 blockz -= blockzInt; |                                 blockz -= blockzInt; | ||||||
| 
 | 
 | ||||||
|                             boolean hasRightClicked = false; |                                 if(blockzInt < arena.getArenaWidth() && blockxInt < arena.getArenaHeight()) { | ||||||
|                             if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { |  | ||||||
|                                 hasRightClicked = true; |  | ||||||
|                             } |  | ||||||
| 
 |  | ||||||
|                             if(blockzInt < arena.getArenaWidth() && blockxInt < arenaClicked.getArenaHeight()) { |  | ||||||
|                                     plugin.getManager().handleFieldClick(e.getPlayer(), blockzInt, blockxInt, hasRightClicked); |                                     plugin.getManager().handleFieldClick(e.getPlayer(), blockzInt, blockxInt, hasRightClicked); | ||||||
|                                 } |                                 } | ||||||
|                                 //player.sendMessage("Arena click! " + blockxInt + " " + blockzInt + " Right Clicked: " + 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 { |             } else { | ||||||
|                 arena = plugin.getArenaList().getArenaAtBlock(block); |                 arena = plugin.getArenaList().getArenaAtBlock(block); | ||||||
|                 if(arena != null) { |                 if(arena != null) { | ||||||
|                     e.setCancelled(true); |                     e.setCancelled(true); | ||||||
|                     if(e.getHand() == EquipmentSlot.HAND) { |                     if(e.getHand() == EquipmentSlot.HAND) { | ||||||
|                         if(arena.getArenaStatus() == ArenaStatus.INACTIVE) { |                         if(arena.getArenaStatus() == ArenaStatus.INACTIVE) { | ||||||
|                             plugin.getManager().joinArena(e.getPlayer(), arena); |                             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 { |                             } else { | ||||||
|                             e.getPlayer().sendMessage(ChatColor.YELLOW + "Hier spielt schon jemand anderes"); |                                 Arrays.fill(players, e.getPlayer()); | ||||||
|  |                             } | ||||||
|  |                             plugin.getManager().joinArena(players, arena); | ||||||
|  |                         } else { | ||||||
|  |                             ChatUtils.sendSimpleInfoMessage(e.getPlayer(), "Hier spielt schon jemand anderes"); | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|  | @ -115,49 +150,22 @@ public class MinecleanerListener implements Listener { | ||||||
|                         int slot = e.getRawSlot(); |                         int slot = e.getRawSlot(); | ||||||
|                         boolean hasConfirmed = slot == 1 ? true : false; |                         boolean hasConfirmed = slot == 1 ? true : false; | ||||||
|                         if(hasConfirmed) { |                         if(hasConfirmed) { | ||||||
|                             plugin.getManager().startGame(player); |                             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); | ||||||
|  | 
 | ||||||
|                             //player.closeInventory(); |                             //player.closeInventory(); | ||||||
|                         } |                         } | ||||||
|                         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; |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  | @ -167,7 +175,18 @@ public class MinecleanerListener implements Listener { | ||||||
|             MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); |             MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); | ||||||
|             if(arena != null) { |             if(arena != null) { | ||||||
|                 if(arena.getArenaStatus() == ArenaStatus.CONFIRM_PLAYING && e.getInventory().equals(plugin.getManager().getConfirmPlayingInventory())) { |                 if(arena.getArenaStatus() == ArenaStatus.CONFIRM_PLAYING && e.getInventory().equals(plugin.getManager().getConfirmPlayingInventory())) { | ||||||
|                     plugin.getManager().leaveArena(player, false); |                     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); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  | @ -178,19 +197,104 @@ public class MinecleanerListener implements Listener { | ||||||
|         final Player player = e.getPlayer(); |         final Player player = e.getPlayer(); | ||||||
|         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); |         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); | ||||||
|         if(arena != null) { |         if(arena != null) { | ||||||
|             if(arena.isTooFarAway(player)) { |             if(plugin.getGroupManager().getGroup(player) == null) { | ||||||
|                 player.sendMessage(ChatColor.YELLOW + "Du hast dich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen."); |                 if((arena.isTooFarAway(player))) { | ||||||
|                 plugin.getManager().leaveArena(player, false); |                     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); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @EventHandler |     @EventHandler | ||||||
|     public void onPlayerQuit(PlayerQuitEvent e) { |     public void onPlayerQuit(PlayerQuitEvent e) { | ||||||
|         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(e.getPlayer()); |         Player player = e.getPlayer(); | ||||||
|  |         MinecleanerGroupManager groupManager = plugin.getGroupManager(); | ||||||
|  |         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); | ||||||
|  | 
 | ||||||
|         if(arena != null) { |         if(arena != null) { | ||||||
|             plugin.getManager().leaveArena(e.getPlayer(), false); |             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; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     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 |     @EventHandler | ||||||
|  |  | ||||||
|  | @ -1,23 +1,29 @@ | ||||||
| package de.lunarakai.minecleaner; | package de.lunarakai.minecleaner; | ||||||
| 
 | 
 | ||||||
| import de.iani.cubesidestats.api.SettingKey; | import de.iani.cubesidestats.api.SettingKey; | ||||||
|  | import de.lunarakai.minecleaner.utils.ChatUtils; | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
|  | import java.util.Arrays; | ||||||
| import java.util.HashMap; | import java.util.HashMap; | ||||||
|  | import java.util.Iterator; | ||||||
| import java.util.List; | import java.util.List; | ||||||
| import java.util.Map.Entry; | import java.util.Map.Entry; | ||||||
| import java.util.Set; | import java.util.Objects; | ||||||
| import java.util.UUID; | import java.util.UUID; | ||||||
| import java.util.function.Consumer; | 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.Bukkit; | ||||||
| import org.bukkit.Material; | import org.bukkit.Material; | ||||||
| import org.bukkit.OfflinePlayer; | import org.bukkit.OfflinePlayer; | ||||||
| import org.bukkit.Sound; | import org.bukkit.Sound; | ||||||
| import org.bukkit.World; | import org.bukkit.World; | ||||||
| import org.bukkit.enchantments.Enchantment; |  | ||||||
| import org.bukkit.entity.Player; | import org.bukkit.entity.Player; | ||||||
| import org.bukkit.event.inventory.InventoryType; | import org.bukkit.event.inventory.InventoryType; | ||||||
| import org.bukkit.inventory.Inventory; | import org.bukkit.inventory.Inventory; | ||||||
| import org.bukkit.inventory.ItemStack; | import org.bukkit.inventory.ItemStack; | ||||||
|  | import org.bukkit.scheduler.BukkitTask; | ||||||
| import org.jetbrains.annotations.NotNull; | import org.jetbrains.annotations.NotNull; | ||||||
| import com.google.common.base.Preconditions; | import com.google.common.base.Preconditions; | ||||||
| import de.iani.cubesidestats.api.PlayerStatistics; | import de.iani.cubesidestats.api.PlayerStatistics; | ||||||
|  | @ -30,12 +36,13 @@ import de.iani.cubesideutils.bukkit.items.ItemStacks; | ||||||
| import de.iani.playerUUIDCache.CachedPlayer; | import de.iani.playerUUIDCache.CachedPlayer; | ||||||
| import de.lunarakai.minecleaner.game.BoardSize; | import de.lunarakai.minecleaner.game.BoardSize; | ||||||
| import de.lunarakai.minecleaner.utils.MinecleanerStringUtil; | import de.lunarakai.minecleaner.utils.MinecleanerStringUtil; | ||||||
| import net.md_5.bungee.api.ChatColor; |  | ||||||
| 
 | 
 | ||||||
|  | // Todo: translatable components verwenden | ||||||
| public class MinecleanerManager { | public class MinecleanerManager { | ||||||
|     private final MinecleanerPlugin plugin; |     private final MinecleanerPlugin plugin; | ||||||
|     private final Inventory confirmPlayingInventory; |     private final Inventory confirmPlayingInventory; | ||||||
|     private final HashMap<Integer, String> sizes; |     private final HashMap<Integer, String> sizes; | ||||||
|  |     public BukkitTask schedulerGameOver; | ||||||
| 
 | 
 | ||||||
|     // Statistics |     // Statistics | ||||||
|     private final StatisticKey statisticsWonGamesTotal; |     private final StatisticKey statisticsWonGamesTotal; | ||||||
|  | @ -49,6 +56,8 @@ public class MinecleanerManager { | ||||||
|     private Inventory settingsInventory; |     private Inventory settingsInventory; | ||||||
|     private SettingKey minecleanerSettingTimerKey; |     private SettingKey minecleanerSettingTimerKey; | ||||||
|     private SettingKey minecleanerAdditionalDisplaySettingKey; |     private SettingKey minecleanerAdditionalDisplaySettingKey; | ||||||
|  |     private SettingKey minecleanerResetTimerSettingKey; | ||||||
|  |     private SettingKey minecleanerAllowManualResetSettingKey; | ||||||
| 
 | 
 | ||||||
|     public MinecleanerManager(MinecleanerPlugin plugin) { |     public MinecleanerManager(MinecleanerPlugin plugin) { | ||||||
|         this.plugin = plugin; |         this.plugin = plugin; | ||||||
|  | @ -60,10 +69,8 @@ public class MinecleanerManager { | ||||||
|         this.sizes.put(3, "experte"); |         this.sizes.put(3, "experte"); | ||||||
| 
 | 
 | ||||||
|         this.confirmPlayingInventory = plugin.getServer().createInventory(null, InventoryType.HOPPER, plugin.getDisplayedPluginName() + " starten?"); |         this.confirmPlayingInventory = plugin.getServer().createInventory(null, InventoryType.HOPPER, plugin.getDisplayedPluginName() + " starten?"); | ||||||
|         this.confirmPlayingInventory.setItem(1, |         this.confirmPlayingInventory.setItem(1, ItemStacks.rename(new ItemStack(Material.GREEN_CONCRETE), NamedTextColor.GREEN + "Bestätigen")); | ||||||
|             ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.GREEN_CONCRETE), ChatColor.GREEN + "Bestätigen"))); |         this.confirmPlayingInventory.setItem(3, ItemStacks.rename(new ItemStack(Material.GREEN_CONCRETE), NamedTextColor.RED + "Abbrechen")); | ||||||
|         this.confirmPlayingInventory.setItem(3, |  | ||||||
|             ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.RED_CONCRETE), ChatColor.RED + "Abbrechen"))); |  | ||||||
| 
 | 
 | ||||||
|         // Settings |         // Settings | ||||||
| 
 | 
 | ||||||
|  | @ -76,6 +83,14 @@ public class MinecleanerManager { | ||||||
|             minecleanerAdditionalDisplaySettingKey.setDefault(0); |             minecleanerAdditionalDisplaySettingKey.setDefault(0); | ||||||
|             minecleanerAdditionalDisplaySettingKey.setDisplayName("Zusätzliche Anzeige in der Action Bar"); |             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, |             this.settingsInventory = plugin.getServer().createInventory(null, InventoryType.CHEST, | ||||||
|                     plugin.getDisplayedPluginName() + " Einstellungen"); |                     plugin.getDisplayedPluginName() + " Einstellungen"); | ||||||
| 
 | 
 | ||||||
|  | @ -118,71 +133,173 @@ public class MinecleanerManager { | ||||||
|             this.statisticsTimeRecord = null; |             this.statisticsTimeRecord = null; | ||||||
|             this.statisticsTotalGamesPlayed = null; |             this.statisticsTotalGamesPlayed = null; | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     public void joinArena(Player player, MinecleanerArena arena) { |     public void joinArena(Player[] players, MinecleanerArena arena) { | ||||||
|         if (!player.hasPermission(MinecleanerPlugin.PERMISSION_PLAY)) { |         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))) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         Preconditions.checkArgument(plugin.getArenaList().getPlayerArena(player) == null, "player is in an arena"); | 
 | ||||||
|  |         Preconditions.checkArgument(plugin.getArenaList().getPlayerArena(players) == null, "player is in an arena"); | ||||||
|         Preconditions.checkArgument(arena.getArenaStatus() == ArenaStatus.INACTIVE, "arena is in use"); |         Preconditions.checkArgument(arena.getArenaStatus() == ArenaStatus.INACTIVE, "arena is in use"); | ||||||
|         arena.addJoiningPlayer(player); | 
 | ||||||
|         plugin.getArenaList().setArenaForPlayer(player, arena); |         arena.addJoiningPlayers(players); | ||||||
|         player.openInventory(confirmPlayingInventory); |         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) { |     public void leaveArena(Player[] players, boolean message, boolean reset) { | ||||||
|         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); |         getGroupLeaderOrPlayer player = getGetGroupLeaderOrPlayer(players); | ||||||
|         Preconditions.checkArgument(arena != null, "player is in no arena"); |         Player[] players1 = player.group() != null ? new Player[player.group().getPlayers().size()] : new Player[1]; | ||||||
|         arena.removePlayer(); |         if(plugin.getGroupManager().getGroup(players[0]) != null) { | ||||||
|         plugin.getArenaList().setArenaForPlayer(player, 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) { |             if(message) { | ||||||
|             player.sendMessage(ChatColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); |                 for(int i = 0; i < players.length; i++) { | ||||||
|  |                     players1[i].sendMessage(NamedTextColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|     public void startGame(Player player) { |         plugin.getArenaList().setArenaForPlayers(players1, null); | ||||||
|         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); |     } | ||||||
|  | 
 | ||||||
|  |     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); | ||||||
|         Preconditions.checkArgument(arena != null, "player is in no arena"); |         Preconditions.checkArgument(arena != null, "player is in no arena"); | ||||||
|         Preconditions.checkState(arena.getArenaStatus() == ArenaStatus.CONFIRM_PLAYING, "not confirming playing status"); |         Preconditions.checkState(arena.getArenaStatus() == ArenaStatus.CONFIRM_PLAYING, "not confirming playing status"); | ||||||
|         arena.startNewGame(); |         arena.startNewGame(); | ||||||
|         player.sendMessage(ChatColor.YELLOW + "Du hast eine neue Runde " + plugin.getDisplayedPluginName() + " gestartet."); | 
 | ||||||
|  | 
 | ||||||
|  |         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."); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void handleGameover(Player player, MinecleanerArena arena, boolean isSuccessfullyCleared) { |     public void handleGameover(Player[] player, MinecleanerArena arena, boolean isSuccessfullyCleared) { | ||||||
|         World world = player.getWorld(); | 
 | ||||||
|  |         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(); | ||||||
|         PlayerStatistics ps = null; |         PlayerStatistics ps = null; | ||||||
|         StatisticKey sg = null; |         StatisticKey sg = null; | ||||||
|         if(plugin.isStatisticsEnabled()) { |         if(plugin.isStatisticsEnabled()) { | ||||||
|             ps = plugin.getCubesideStatistics().getStatistics(player.getUniqueId()); |             ps = plugin.getCubesideStatistics().getStatistics(player[0].getUniqueId()); | ||||||
|             sg = statisticsTotalGamesPlayed.get(arena.getWidthIndex()); |             sg = statisticsTotalGamesPlayed.get(arena.getWidthIndex()); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if(!isSuccessfullyCleared) { |         if(!isSuccessfullyCleared) { | ||||||
|             world.playSound(player.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); |             world.playSound(player[0].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!"); |             ChatUtils.sendSimpleInfoMessage(player[0], "Game Over! Du konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!"); | ||||||
|             arena.showMines(); |             arena.showMines(); | ||||||
|              |              | ||||||
|             if(sg != null && plugin.isStatisticsEnabled()) { |             if(sg != null && plugin.isStatisticsEnabled()) { | ||||||
|                 ps.increaseScore(sg, 1); |                 ps.increaseScore(sg, 1); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             Bukkit.getScheduler().runTaskLater(plugin, () -> { |             scheduleArenaReset(player[0], arena); | ||||||
|                 if(arena.getCurrentPlayer() == null) { |  | ||||||
|                     arena.removePlayer();  |  | ||||||
|                  } else { |  | ||||||
|                     leaveArena(player, false); |  | ||||||
|                  } |  | ||||||
|             }, 100L); |  | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         int millis = (int) (System.currentTimeMillis() - arena.getCurrentGameStartTime()); |         int millis = (int) (System.currentTimeMillis() - arena.getCurrentGameStartTime()); | ||||||
|          |          | ||||||
|         world.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f); |         world.playSound(player[0].getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f); | ||||||
| 
 | 
 | ||||||
|         if(sg != null && plugin.isStatisticsEnabled()) { |         if(sg != null && plugin.isStatisticsEnabled()) { | ||||||
|             ps.increaseScore(sg, 1); |             ps.increaseScore(sg, 1); | ||||||
|  | @ -199,57 +316,83 @@ public class MinecleanerManager { | ||||||
|             if(sg != null) { |             if(sg != null) { | ||||||
|                 ps.minScore(sg, millis, isUpdated -> { |                 ps.minScore(sg, millis, isUpdated -> { | ||||||
|                     if(isUpdated != null && isUpdated) { |                     if(isUpdated != null && isUpdated) { | ||||||
|                         player.sendMessage(ChatColor.GOLD + "Herzlichen Glückwunsch! Du hast eine neue Bestzeit erreicht! " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) ); |                         player[0].sendMessage(NamedTextColor.GOLD + "Herzlichen Glückwunsch! Du hast eine neue Bestzeit erreicht! " + NamedTextColor.RED + MinecleanerStringUtil.timeToString(millis, false) ); | ||||||
|                     } else { |                     } 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!"); |                         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!"); | ||||||
|                     } |                     } | ||||||
|                 }); |                 }); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             int wIndex = arena.getWidthIndex(); |             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) { |         switch (wIndex) { | ||||||
|             case 0: { |             case 0: { | ||||||
|                     ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.small")); |                 ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.small") /groupSize)); | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|             case 1: { |             case 1: { | ||||||
|                     ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.medium")); |                 ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.medium") /groupSize)); | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|             case 2: { |             case 2: { | ||||||
|                     ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.large")); |                 ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.large") /groupSize)); | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|             case 3: { |             case 3: { | ||||||
|                     ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.expert")); |                 ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.expert") /groupSize)); | ||||||
|  |                 break; | ||||||
|             } |             } | ||||||
|             default: { |             default: { | ||||||
|                 ps.increaseScore(statisticsPointsAcquired, 0); |                 ps.increaseScore(statisticsPointsAcquired, 0); | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         } else { |  | ||||||
|             player.sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!"); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     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, () -> { |         Bukkit.getScheduler().runTaskLater(plugin, () -> { | ||||||
|             if(arena.getCurrentPlayer() == null) { |             plugin.getLogger().log(Level.INFO, "ArenaStatus for arena '" + arena.getName() + "', loc: " + arena.getLocation() + " after 5 Ticks (should be completed): " + arena.getArenaStatus()); | ||||||
|                arena.removePlayer();  |         }, 5L); | ||||||
|  |         schedulerGameOver = Bukkit.getScheduler().runTaskLater(plugin, () -> { | ||||||
|  |             if(arena.getArenaStatus() == ArenaStatus.COMPLETED) { | ||||||
|  |                 if (arena.getCurrentPlayers() == null) { | ||||||
|  |                     arena.removePlayers(); | ||||||
|                 } else { |                 } else { | ||||||
|                 leaveArena(player, false); |                     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++; | ||||||
|                         } |                         } | ||||||
|         }, 100L); |                     } else { | ||||||
|  |                         Arrays.fill(players, player); | ||||||
|  |                     } | ||||||
|  |                     leaveArena(players, false, true); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         }, plugin.getManager().getSettingsValue("resettime", player) * 20L); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void clearAllArenas() { |     public void clearAllArenas() { | ||||||
|         for(MinecleanerArena arena : plugin.getArenaList().getArenas()) { |         for(MinecleanerArena arena : plugin.getArenaList().getArenas()) { | ||||||
|             if(arena.hasPlayer()) { |             if(arena.hasPlayers()) { | ||||||
|                 leaveArena(arena.getCurrentPlayer(), true); |                 leaveArena(arena.getCurrentPlayers(), true, true); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|     public void handleFieldClick(@NotNull Player player, int x, int y, boolean hasRightClicked) { |     public void handleFieldClick(@NotNull Player player, int x, int y, boolean hasRightClicked) { | ||||||
|         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); |         MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); | ||||||
|         Preconditions.checkArgument(arena != null, "player is in no arena"); |         Preconditions.checkArgument(arena != null, "player is in no arena"); | ||||||
|  | @ -364,31 +507,6 @@ 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) { |     public int getSettingsValue(String settingsKeyString, Player player) { | ||||||
|         PlayerStatistics playerStatistics = plugin.getCubesideStatistics().getStatistics(player.getUniqueId()); |         PlayerStatistics playerStatistics = plugin.getCubesideStatistics().getStatistics(player.getUniqueId()); | ||||||
|         SettingKey settingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings." + settingsKeyString); |         SettingKey settingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings." + settingsKeyString); | ||||||
|  | @ -421,4 +539,8 @@ public class MinecleanerManager { | ||||||
|     public SettingKey getMinecleanerAdditionalDisplaySettingKey() { |     public SettingKey getMinecleanerAdditionalDisplaySettingKey() { | ||||||
|         return minecleanerAdditionalDisplaySettingKey; |         return minecleanerAdditionalDisplaySettingKey; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public SettingKey getMinecleanerResetTimeSettingKey() {return minecleanerResetTimerSettingKey; } | ||||||
|  | 
 | ||||||
|  |     public BukkitTask getSchedulerGameOver() { return schedulerGameOver; } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,17 +1,30 @@ | ||||||
| package de.lunarakai.minecleaner; | 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.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 org.bukkit.plugin.java.JavaPlugin; | ||||||
| import de.iani.cubesidestats.api.CubesideStatisticsAPI; | import de.iani.cubesidestats.api.CubesideStatisticsAPI; | ||||||
| import de.iani.cubesideutils.bukkit.commands.CommandRouter; | import de.iani.cubesideutils.bukkit.commands.CommandRouter; | ||||||
| import de.iani.playerUUIDCache.PlayerUUIDCache; | import de.iani.playerUUIDCache.PlayerUUIDCache; | ||||||
| import de.lunarakai.minecleaner.commands.CreateCommand; | import java.util.Locale; | ||||||
| import de.lunarakai.minecleaner.commands.DeleteCommand; | import java.util.ResourceBundle; | ||||||
| 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; | import java.util.logging.Level; | ||||||
| 
 | 
 | ||||||
| public final class MinecleanerPlugin extends JavaPlugin { | public final class MinecleanerPlugin extends JavaPlugin { | ||||||
|  | @ -19,6 +32,7 @@ public final class MinecleanerPlugin extends JavaPlugin { | ||||||
|     public static final String PERMISSION_ADMIN = "minecleaner.admin"; |     public static final String PERMISSION_ADMIN = "minecleaner.admin"; | ||||||
| 
 | 
 | ||||||
|     private MinecleanerManager minecleanerManager; |     private MinecleanerManager minecleanerManager; | ||||||
|  |     private MinecleanerGroupManager minecleanerGroupManager; | ||||||
|     private ArenaList arenaList; |     private ArenaList arenaList; | ||||||
|     private CubesideStatisticsAPI cubesideStatistics; |     private CubesideStatisticsAPI cubesideStatistics; | ||||||
|     private PlayerUUIDCache playerUUIDCache; |     private PlayerUUIDCache playerUUIDCache; | ||||||
|  | @ -26,26 +40,31 @@ public final class MinecleanerPlugin extends JavaPlugin { | ||||||
|     @Override |     @Override | ||||||
|     public void onEnable() { |     public void onEnable() { | ||||||
|         this.saveDefaultConfig(); |         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); |         getServer().getScheduler().runTask(this, this::onLateEnable); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void onLateEnable() { |     public void onLateEnable() { | ||||||
|         if(getServer().getPluginManager().getPlugin("PlayerUUIDCache") != null) { |         checkForPlayerUUIDChache(); | ||||||
|             playerUUIDCache = (PlayerUUIDCache) getServer().getPluginManager().getPlugin("PlayerUUIDCache"); |  | ||||||
|         } else { |  | ||||||
|             this.getLogger().log(Level.WARNING, "PlayerUUIDCache not found."); |  | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         if(getServer().getPluginManager().getPlugin("CubesideStatistics") != null) { |         checkForCubesideStatistics(); | ||||||
|             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 = new ArenaList(this); | ||||||
|         arenaList.load(); |         arenaList.load(); | ||||||
| 
 | 
 | ||||||
|         minecleanerManager = new MinecleanerManager(this); |         minecleanerManager = new MinecleanerManager(this); | ||||||
|  |         minecleanerGroupManager = new MinecleanerGroupManager(); | ||||||
|         getServer().getPluginManager().registerEvents(new MinecleanerListener(this), this); |         getServer().getPluginManager().registerEvents(new MinecleanerListener(this), this); | ||||||
| 
 | 
 | ||||||
|         CommandRouter minecleanerCommand = new CommandRouter(getCommand("minecleaner")); |         CommandRouter minecleanerCommand = new CommandRouter(getCommand("minecleaner")); | ||||||
|  | @ -53,7 +72,20 @@ public final class MinecleanerPlugin extends JavaPlugin { | ||||||
|         minecleanerCommand.addCommandMapping(new DeleteCommand(this), "delete"); |         minecleanerCommand.addCommandMapping(new DeleteCommand(this), "delete"); | ||||||
|         minecleanerCommand.addCommandMapping(new ListCommand(this), "list"); |         minecleanerCommand.addCommandMapping(new ListCommand(this), "list"); | ||||||
|         minecleanerCommand.addCommandMapping(new InfoCommand(this), "info"); |         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()) { |         if(isStatisticsEnabled()) { | ||||||
|             minecleanerCommand.addCommandMapping(new SettingsCommand(this), "settings"); |             minecleanerCommand.addCommandMapping(new SettingsCommand(this), "settings"); | ||||||
|             minecleanerCommand.addCommandMapping(new StatsCommand(this), "stats"); |             minecleanerCommand.addCommandMapping(new StatsCommand(this), "stats"); | ||||||
|  | @ -61,11 +93,30 @@ 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 |     @Override | ||||||
|     public void onDisable() { |     public void onDisable() { | ||||||
|         if(minecleanerManager != null) { |         if(minecleanerManager != null) { | ||||||
|             minecleanerManager.clearAllArenas(); |             minecleanerManager.clearAllArenas(); | ||||||
|         } |         } | ||||||
|  |         if(minecleanerGroupManager != null) { | ||||||
|  |             minecleanerGroupManager.deleteAllGroups(); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public ArenaList getArenaList() { |     public ArenaList getArenaList() { | ||||||
|  | @ -76,6 +127,8 @@ public final class MinecleanerPlugin extends JavaPlugin { | ||||||
|         return minecleanerManager; |         return minecleanerManager; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public MinecleanerGroupManager getGroupManager() { return minecleanerGroupManager; } | ||||||
|  | 
 | ||||||
|     public boolean isStatisticsEnabled() { |     public boolean isStatisticsEnabled() { | ||||||
|         return cubesideStatistics != null; |         return cubesideStatistics != null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,125 @@ | ||||||
|  | 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,6 +5,8 @@ import java.util.Collection; | ||||||
| import java.util.List; | import java.util.List; | ||||||
| import java.util.regex.Pattern; | import java.util.regex.Pattern; | ||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  | 
 | ||||||
|  | import net.kyori.adventure.text.format.NamedTextColor; | ||||||
| import org.bukkit.Location; | import org.bukkit.Location; | ||||||
| import org.bukkit.block.BlockFace; | import org.bukkit.block.BlockFace; | ||||||
| import org.bukkit.command.Command; | import org.bukkit.command.Command; | ||||||
|  | @ -22,6 +24,8 @@ import de.lunarakai.minecleaner.MinecleanerArena; | ||||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||||
| import net.md_5.bungee.api.ChatColor; | import net.md_5.bungee.api.ChatColor; | ||||||
| 
 | 
 | ||||||
|  | import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; | ||||||
|  | 
 | ||||||
| public class CreateCommand extends SubCommand { | public class CreateCommand extends SubCommand { | ||||||
|     private static final Pattern VALID_ARENA_NAME = Pattern.compile("^[a-z0-9_]+$"); |     private static final Pattern VALID_ARENA_NAME = Pattern.compile("^[a-z0-9_]+$"); | ||||||
| 
 | 
 | ||||||
|  | @ -55,11 +59,11 @@ public class CreateCommand extends SubCommand { | ||||||
|         } |         } | ||||||
|         String name = args.getNext().toLowerCase().trim(); |         String name = args.getNext().toLowerCase().trim(); | ||||||
|         if(!VALID_ARENA_NAME.matcher(name).matches()) { |         if(!VALID_ARENA_NAME.matcher(name).matches()) { | ||||||
|             sender.sendMessage(ChatColor.DARK_RED + "Ungültiger Arenaname. Erlaubt sind Buchstaben, Zahlen und der Unterstrich"); |             sender.sendMessage(createLangComponent("arena.name.invalid", NamedTextColor.DARK_RED)); | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
|         if(plugin.getArenaList().getArena(name) != null) { |         if(plugin.getArenaList().getArena(name) != null) { | ||||||
|             sender.sendMessage(ChatColor.DARK_RED + "Eine Arena mit diesem Namen existiert bereits"); |             sender.sendMessage(createLangComponent( "arena.name.exists", NamedTextColor.DARK_RED)); | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
|         boolean noblocks = false; |         boolean noblocks = false; | ||||||
|  | @ -73,13 +77,13 @@ public class CreateCommand extends SubCommand { | ||||||
|                 try { |                 try { | ||||||
|                     widthindex = Integer.parseInt(arg); |                     widthindex = Integer.parseInt(arg); | ||||||
|                 } catch(NumberFormatException e) { |                 } catch(NumberFormatException e) { | ||||||
|                     sender.sendMessage(ChatColor.DARK_RED + "Kein Valider Arena WidthIndex!"); |                     sender.sendMessage(createLangComponent("arena.widthindex.invalid", NamedTextColor.DARK_RED)); | ||||||
|                     sender.sendMessage(ChatColor.DARK_RED + "0 (oder weglassen) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33"); |                     sender.sendMessage(createLangComponent("arena.widthindex.validOptions", NamedTextColor.DARK_RED)); | ||||||
|                     return true; |                     return true; | ||||||
|                 } |                 } | ||||||
|                 if(widthindex > 3) { |                 if(widthindex > 3) { | ||||||
|                     sender.sendMessage(ChatColor.DARK_RED + "Arena WidthIndex darf nicht größer als 3 sein"); |                     sender.sendMessage(createLangComponent( "arena.widthindex.toolarge", NamedTextColor.DARK_RED)); | ||||||
|                     sender.sendMessage(ChatColor.DARK_RED + "0 (oder weglassen) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33"); |                     sender.sendMessage(createLangComponent("arena.widthindex.validOptions", NamedTextColor.DARK_RED)); | ||||||
|                     return true; |                     return true; | ||||||
|                 } |                 } | ||||||
|             } else { |             } else { | ||||||
|  | @ -94,12 +98,14 @@ public class CreateCommand extends SubCommand { | ||||||
|         @Nullable |         @Nullable | ||||||
|         RayTraceResult target = player.rayTraceBlocks(6); |         RayTraceResult target = player.rayTraceBlocks(6); | ||||||
|         if(target == null || target.getHitBlock() == null) { |         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(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)); | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
|         BlockFace face = target.getHitBlockFace(); |         BlockFace face = target.getHitBlockFace(); | ||||||
|         if(face != BlockFace.NORTH && face != BlockFace.WEST && face != BlockFace.EAST && face != BlockFace.SOUTH) { |         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(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)); | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
|         location = target.getHitBlock().getLocation(); |         location = target.getHitBlock().getLocation(); | ||||||
|  | @ -107,7 +113,7 @@ public class CreateCommand extends SubCommand { | ||||||
| 
 | 
 | ||||||
|         MinecleanerArena newArena = new MinecleanerArena(plugin, name, location, widthindex, orientation); |         MinecleanerArena newArena = new MinecleanerArena(plugin, name, location, widthindex, orientation); | ||||||
|         if(plugin.getArenaList().collidesWithArena(newArena)) { |         if(plugin.getArenaList().collidesWithArena(newArena)) { | ||||||
|             sender.sendMessage(ChatColor.DARK_RED + "An dieser Stelle befindet sich bereits eine Arena."); |             sender.sendMessage(createLangComponent("arena.create.otherArena", NamedTextColor.DARK_RED)); | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
|         newArena.generateBlockDisplays(); |         newArena.generateBlockDisplays(); | ||||||
|  | @ -115,7 +121,7 @@ public class CreateCommand extends SubCommand { | ||||||
|             newArena.generateBackgroundBlocks(); |             newArena.generateBackgroundBlocks(); | ||||||
|         } |         } | ||||||
|         plugin.getArenaList().addArena(newArena); |         plugin.getArenaList().addArena(newArena); | ||||||
|         sender.sendMessage(ChatColor.GREEN + "Die Arena wurde erfolgreich angelegt."); |         sender.sendMessage(createLangComponent("arena.create.success", NamedTextColor.GREEN)); | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -151,5 +157,4 @@ public class CreateCommand extends SubCommand { | ||||||
|         } |         } | ||||||
|         return List.of(); |         return List.of(); | ||||||
|     } |     } | ||||||
|      |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -2,6 +2,7 @@ package de.lunarakai.minecleaner.commands; | ||||||
| 
 | 
 | ||||||
| import java.util.Collection; | import java.util.Collection; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  | import net.kyori.adventure.text.format.NamedTextColor; | ||||||
| import org.bukkit.block.Block; | import org.bukkit.block.Block; | ||||||
| import org.bukkit.block.BlockFace; | import org.bukkit.block.BlockFace; | ||||||
| import org.bukkit.command.Command; | import org.bukkit.command.Command; | ||||||
|  | @ -16,7 +17,8 @@ import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; | ||||||
| import de.iani.cubesideutils.commands.ArgsParser; | import de.iani.cubesideutils.commands.ArgsParser; | ||||||
| import de.lunarakai.minecleaner.MinecleanerArena; | import de.lunarakai.minecleaner.MinecleanerArena; | ||||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||||
| import net.md_5.bungee.api.ChatColor; | 
 | ||||||
|  | import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; | ||||||
| 
 | 
 | ||||||
| public class DeleteCommand extends SubCommand { | public class DeleteCommand extends SubCommand { | ||||||
|     private final MinecleanerPlugin plugin; |     private final MinecleanerPlugin plugin; | ||||||
|  | @ -52,9 +54,9 @@ public class DeleteCommand extends SubCommand { | ||||||
|         } |         } | ||||||
|         if(arena != null) { |         if(arena != null) { | ||||||
|             plugin.getArenaList().removeArena(arena); |             plugin.getArenaList().removeArena(arena); | ||||||
|             sender.sendMessage(ChatColor.YELLOW + "Die " + plugin.getDisplayedPluginName() + "-Arena " + arena.getName() + " wurde gelöscht."); |             sender.sendMessage(createLangComponent("arena.delete.success", plugin.getDisplayedPluginName(), arena.getName(), NamedTextColor.YELLOW)); | ||||||
|         } else { |         } else { | ||||||
|             sender.sendMessage(ChatColor.YELLOW + "Hier befindet sich keine " + plugin.getDisplayedPluginName() + "-Arena."); |             sender.sendMessage(createLangComponent("arena.delete.noarena", plugin.getDisplayedPluginName(), NamedTextColor.YELLOW)); | ||||||
|         } |         } | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|  | @ -63,5 +65,4 @@ public class DeleteCommand extends SubCommand { | ||||||
|     public Collection<String> onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { |     public Collection<String> onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { | ||||||
|         return List.of(); |         return List.of(); | ||||||
|     } |     } | ||||||
|      |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| package de.lunarakai.minecleaner.commands; | package de.lunarakai.minecleaner.commands; | ||||||
| 
 | 
 | ||||||
|  | import net.kyori.adventure.text.format.NamedTextColor; | ||||||
| import org.bukkit.command.Command; | import org.bukkit.command.Command; | ||||||
| import org.bukkit.command.CommandSender; | import org.bukkit.command.CommandSender; | ||||||
| import de.iani.cubesideutils.bukkit.commands.SubCommand; | import de.iani.cubesideutils.bukkit.commands.SubCommand; | ||||||
|  | @ -13,6 +14,8 @@ import de.iani.playerUUIDCache.CachedPlayer; | ||||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||||
| import net.md_5.bungee.api.ChatColor; | import net.md_5.bungee.api.ChatColor; | ||||||
| 
 | 
 | ||||||
|  | import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; | ||||||
|  | 
 | ||||||
| public class DeletePlayerScoreCommand extends SubCommand{ | public class DeletePlayerScoreCommand extends SubCommand{ | ||||||
|     private final MinecleanerPlugin plugin; |     private final MinecleanerPlugin plugin; | ||||||
| 
 | 
 | ||||||
|  | @ -48,10 +51,10 @@ public class DeletePlayerScoreCommand extends SubCommand{ | ||||||
| 
 | 
 | ||||||
|         CachedPlayer cachedPlayer = plugin.getPlayerUUIDCache().getPlayer(player); |         CachedPlayer cachedPlayer = plugin.getPlayerUUIDCache().getPlayer(player); | ||||||
|         if(cachedPlayer == null) { |         if(cachedPlayer == null) { | ||||||
|             sender.sendMessage(ChatColor.DARK_RED + "Ein Spieler mit dem Namen '" + player + "' konnte nicht gefunden werden."); |             sender.sendMessage(createLangComponent("data.delete.playerNotFound", player, NamedTextColor.DARK_RED)); | ||||||
|         } |         } | ||||||
|         plugin.getManager().deleteScores(cachedPlayer.getUUID()); |         plugin.getManager().deleteScores(cachedPlayer.getUUID()); | ||||||
|         sender.sendMessage(ChatColor.DARK_RED + "Alle " + plugin.getDisplayedPluginName() + "-Statistiken von Spieler '" + cachedPlayer.getName() + "' wurden gelöscht."); |         sender.sendMessage(createLangComponent("data.delete.deleted", plugin.getDisplayedPluginName(), cachedPlayer.getName(), NamedTextColor.DARK_RED)); | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  |  | ||||||
|  | @ -0,0 +1,88 @@ | ||||||
|  | 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,5 +1,7 @@ | ||||||
| package de.lunarakai.minecleaner.commands; | 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.Command; | ||||||
| import org.bukkit.command.CommandSender; | import org.bukkit.command.CommandSender; | ||||||
| import de.iani.cubesideutils.bukkit.commands.SubCommand; | import de.iani.cubesideutils.bukkit.commands.SubCommand; | ||||||
|  | @ -12,6 +14,8 @@ import de.iani.cubesideutils.commands.ArgsParser; | ||||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||||
| import net.md_5.bungee.api.ChatColor; | import net.md_5.bungee.api.ChatColor; | ||||||
| 
 | 
 | ||||||
|  | import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; | ||||||
|  | 
 | ||||||
| public class InfoCommand extends SubCommand{ | public class InfoCommand extends SubCommand{ | ||||||
|     MinecleanerPlugin plugin; |     MinecleanerPlugin plugin; | ||||||
| 
 | 
 | ||||||
|  | @ -38,11 +42,11 @@ public class InfoCommand extends SubCommand{ | ||||||
|     public boolean onCommand(CommandSender sender, Command arg1, String arg2, String arg3, |     public boolean onCommand(CommandSender sender, Command arg1, String arg2, String arg3, | ||||||
|             ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, |             ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, | ||||||
|             NoPermissionException, IllegalSyntaxException, InternalCommandException { |             NoPermissionException, IllegalSyntaxException, InternalCommandException { | ||||||
|                 sender.sendMessage(ChatColor.GREEN + "--- " + ChatColor.AQUA + plugin.getName() + ChatColor.GREEN + " ---"); |                 sender.sendMessage(NamedChatColor.GREEN + "--- " + ChatColor.AQUA + plugin.getName() + ChatColor.GREEN + " ---"); | ||||||
|                 sender.sendMessage(ChatColor.AQUA + "Version: " + ChatColor.GREEN + plugin.getPluginMeta().getVersion()); |                 sender.sendMessage(createLangComponent("minecleaner.info.version", ": ", plugin.getPluginMeta().getVersion(), NamedTextColor.AQUA, NamedTextColor.GREEN)); | ||||||
|                 sender.sendMessage(ChatColor.AQUA + "Entwickelt von: " + ChatColor.GREEN + plugin.getPluginMeta().getAuthors().get(0)); |                 sender.sendMessage(createLangComponent("minecleaner.info.developer", ": ", plugin.getPluginMeta().getAuthors().get(0), NamedTextColor.AQUA, NamedTextColor.GREEN)); | ||||||
|                 sender.sendMessage(ChatColor.AQUA + "Website: " + ChatColor.GREEN + plugin.getPluginMeta().getWebsite()); |                 sender.sendMessage(createLangComponent("minecleaner.info.website", ": ", plugin.getPluginMeta().getWebsite(), NamedTextColor.AQUA, NamedTextColor.GREEN)); | ||||||
|                 sender.sendMessage(ChatColor.AQUA + "Lizenz: " + ChatColor.GREEN + "GPL-3.0"); |                 sender.sendMessage(createLangComponent("minecleaner.info.license", ": ", "GPL-3.0", NamedTextColor.AQUA, NamedTextColor.GREEN)); | ||||||
|                 return true; |                 return true; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -2,6 +2,7 @@ package de.lunarakai.minecleaner.commands; | ||||||
| 
 | 
 | ||||||
| import java.util.Collection; | import java.util.Collection; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  | import net.kyori.adventure.text.format.NamedTextColor; | ||||||
| import org.bukkit.Location; | import org.bukkit.Location; | ||||||
| import org.bukkit.command.Command; | import org.bukkit.command.Command; | ||||||
| import org.bukkit.command.CommandSender; | import org.bukkit.command.CommandSender; | ||||||
|  | @ -16,6 +17,8 @@ import de.lunarakai.minecleaner.MinecleanerArena; | ||||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||||
| import net.md_5.bungee.api.ChatColor; | import net.md_5.bungee.api.ChatColor; | ||||||
| 
 | 
 | ||||||
|  | import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; | ||||||
|  | 
 | ||||||
| public class ListCommand extends SubCommand{ | public class ListCommand extends SubCommand{ | ||||||
| 
 | 
 | ||||||
|     private final MinecleanerPlugin plugin; |     private final MinecleanerPlugin plugin; | ||||||
|  | @ -41,7 +44,7 @@ public class ListCommand extends SubCommand{ | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public boolean onCommand(CommandSender sender, Command arg1, String arg2, String commandString, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { |     public boolean onCommand(CommandSender sender, Command arg1, String arg2, String commandString, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { | ||||||
|         sender.sendMessage(ChatColor.YELLOW + "Angelegte "+ plugin.getDisplayedPluginName() + "-Arenen"); |         sender.sendMessage(createLangComponent("arena.list.created", plugin.getDisplayedPluginName(), NamedTextColor.YELLOW)); | ||||||
|         boolean any = false; |         boolean any = false; | ||||||
|         for(MinecleanerArena arena : plugin.getArenaList().getArenas()) { |         for(MinecleanerArena arena : plugin.getArenaList().getArenas()) { | ||||||
|             Location location = arena.getLocation(); |             Location location = arena.getLocation(); | ||||||
|  | @ -49,7 +52,7 @@ public class ListCommand extends SubCommand{ | ||||||
|             any = true; |             any = true; | ||||||
|         } |         } | ||||||
|         if(!any) { |         if(!any) { | ||||||
|             sender.sendMessage(ChatColor.GRAY + "  (keine)"); |             sender.sendMessage("  " + createLangComponent("arena.list.none", NamedTextColor.GRAY)); | ||||||
|         } |         } | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,63 @@ | ||||||
|  | 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,6 +8,7 @@ import de.iani.cubesideutils.bukkit.commands.exceptions.NoPermissionException; | ||||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; | import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; | ||||||
| import de.iani.cubesideutils.commands.ArgsParser; | import de.iani.cubesideutils.commands.ArgsParser; | ||||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||||
|  | import de.lunarakai.minecleaner.MinecleanerSettingsInventory; | ||||||
| import org.bukkit.command.Command; | import org.bukkit.command.Command; | ||||||
| import org.bukkit.command.CommandSender; | import org.bukkit.command.CommandSender; | ||||||
| import org.bukkit.entity.Player; | import org.bukkit.entity.Player; | ||||||
|  | @ -39,7 +40,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 { |     public boolean onCommand(CommandSender sender, Command command, String s, String s1, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { | ||||||
|         Player player = (Player) sender; |         Player player = (Player) sender; | ||||||
| 
 | 
 | ||||||
|         player.openInventory(plugin.getManager().showSettingsInventory(player)); |         new MinecleanerSettingsInventory(player, plugin).open(); | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -2,10 +2,11 @@ package de.lunarakai.minecleaner.commands; | ||||||
| 
 | 
 | ||||||
| import java.util.Map.Entry; | import java.util.Map.Entry; | ||||||
| import java.util.function.Consumer; | 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.Command; | ||||||
| import org.bukkit.command.CommandSender; | import org.bukkit.command.CommandSender; | ||||||
| import org.bukkit.entity.Player; | import org.bukkit.entity.Player; | ||||||
| import de.iani.cubesideutils.StringUtil; |  | ||||||
| import de.iani.cubesideutils.bukkit.commands.SubCommand; | import de.iani.cubesideutils.bukkit.commands.SubCommand; | ||||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException; | import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException; | ||||||
| import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException; | import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException; | ||||||
|  | @ -16,7 +17,8 @@ import de.iani.cubesideutils.commands.ArgsParser; | ||||||
| import de.lunarakai.minecleaner.MinecleanerPlugin; | import de.lunarakai.minecleaner.MinecleanerPlugin; | ||||||
| import de.lunarakai.minecleaner.PlayerStatisticsData; | import de.lunarakai.minecleaner.PlayerStatisticsData; | ||||||
| import de.lunarakai.minecleaner.utils.MinecleanerStringUtil; | import de.lunarakai.minecleaner.utils.MinecleanerStringUtil; | ||||||
| import net.md_5.bungee.api.ChatColor; | 
 | ||||||
|  | import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; | ||||||
| 
 | 
 | ||||||
| public class StatsCommand extends SubCommand { | public class StatsCommand extends SubCommand { | ||||||
|     private final MinecleanerPlugin plugin; |     private final MinecleanerPlugin plugin; | ||||||
|  | @ -48,16 +50,30 @@ public class StatsCommand extends SubCommand { | ||||||
|             @Override |             @Override | ||||||
|             public void accept(PlayerStatisticsData data) { |             public void accept(PlayerStatisticsData data) { | ||||||
|                 if(data == null) { |                 if(data == null) { | ||||||
|                     sender.sendMessage(ChatColor.GREEN + "Für Spieler '" + playerName + "' existieren keine Daten."); |                     sender.sendMessage(createLangComponent("data.player.noData", playerName, NamedTextColor.GREEN)); | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
|                 if(playerName == null) { |                 if(playerName == null) { | ||||||
|                     sender.sendMessage(ChatColor.AQUA + "Deine " + plugin.getDisplayedPluginName() + " Statistik:"); |                     sender.sendMessage(createLangComponent("data.player.self", plugin.getDisplayedPluginName(), NamedTextColor.AQUA).append(Component.text(":"))); | ||||||
|                 } else { |                 } else { | ||||||
|                     sender.sendMessage(ChatColor.AQUA + plugin.getDisplayedPluginName() + "-Statistik von " + data.getPlayerName() + ":"); |                     sender.sendMessage(createLangComponent("data.player.other", plugin.getDisplayedPluginName(), data.getPlayerName(), NamedTextColor.AQUA).append(Component.text(":"))); | ||||||
|                 } |                 } | ||||||
|                 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() + ")"); |                 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))); | ||||||
|  | 
 | ||||||
|                 for(Entry<Integer, String> e : plugin.getManager().getSizes().entrySet()) { |                 for(Entry<Integer, String> e : plugin.getManager().getSizes().entrySet()) { | ||||||
|                     int totalWonSize = data.getGamesPlayedSize(e.getKey()); |                     int totalWonSize = data.getGamesPlayedSize(e.getKey()); | ||||||
|                     int totalWonMonth = data.getGamesPlayedSizeThisMonth(e.getKey()); |                     int totalWonMonth = data.getGamesPlayedSizeThisMonth(e.getKey()); | ||||||
|  | @ -65,14 +81,35 @@ public class StatsCommand extends SubCommand { | ||||||
|                     int totalSizeMonth = data.getTotalGamesPlayedSizeThisMonth(e.getKey()); |                     int totalSizeMonth = data.getTotalGamesPlayedSizeThisMonth(e.getKey()); | ||||||
| 
 | 
 | ||||||
|                     if(totalSize > 0) { |                     if(totalSize > 0) { | ||||||
|                         String sizeName = StringUtil.capitalizeFirstLetter(e.getValue(), false); |                         String sizeName = e.getValue(); | ||||||
|                         sender.sendMessage(ChatColor.AQUA + "  " + sizeName + ":"); |                         if(sizeName.equals("groß")) { | ||||||
|                         sender.sendMessage(ChatColor.BLUE + "    Runden gewonnen: " + ChatColor.GREEN + totalWonSize + " von " + totalSize  + " (" + MinecleanerStringUtil.percentageString(totalWonSize, totalSize)+ ") "); |                             sizeName = "gross"; | ||||||
|                         sender.sendMessage(ChatColor.BLUE + "    Dieser Monat: " + ChatColor.GREEN + totalWonMonth + " von " + totalSizeMonth + " (" + MinecleanerStringUtil.percentageString(totalWonMonth, totalSizeMonth)+ ")"); |                         } | ||||||
|  |                         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))); | ||||||
|  | 
 | ||||||
|                         Integer time = data.getBestTime(e.getKey()); |                         Integer time = data.getBestTime(e.getKey()); | ||||||
|                         Integer timeThisMonth = data.getBestTimeThisMonth(e.getKey()); |                         Integer timeThisMonth = data.getBestTimeThisMonth(e.getKey()); | ||||||
|                         sender.sendMessage(ChatColor.BLUE + "    Bestzeit: " + ChatColor.GREEN + (time == null ? "-" : MinecleanerStringUtil.timeToString(time, false))); |                         sender.sendMessage(Component.text("    ") | ||||||
|                         sender.sendMessage(ChatColor.BLUE + "    Dieser Monat: " + ChatColor.GREEN + (timeThisMonth == null ? "-" : MinecleanerStringUtil.timeToString(timeThisMonth, false))); |                                 .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))); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  | @ -81,7 +118,7 @@ public class StatsCommand extends SubCommand { | ||||||
|             if(sender instanceof Player) { |             if(sender instanceof Player) { | ||||||
|                 plugin.getManager().getStatisticsForPlayer((Player) sender, callback); |                 plugin.getManager().getStatisticsForPlayer((Player) sender, callback); | ||||||
|             } else { |             } else { | ||||||
|                 sender.sendMessage(ChatColor.GREEN + "Für die Konsole existieren keine Daten."); |                 sender.sendMessage(createLangComponent("data.console.nodata", NamedTextColor.GREEN)); | ||||||
|             } |             } | ||||||
|         } else { |         } else { | ||||||
|             plugin.getManager().getStatisticsForPlayerIfExists(playerName, callback); |             plugin.getManager().getStatisticsForPlayerIfExists(playerName, callback); | ||||||
|  |  | ||||||
|  | @ -0,0 +1,60 @@ | ||||||
|  | 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; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,63 @@ | ||||||
|  | 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; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,64 @@ | ||||||
|  | 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; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,104 @@ | ||||||
|  | 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; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,63 @@ | ||||||
|  | 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,6 +185,7 @@ public class Game { | ||||||
| 
 | 
 | ||||||
|         switch (cell.getType()) { |         switch (cell.getType()) { | ||||||
|             case Mine: { |             case Mine: { | ||||||
|  |                 resetFloodedFlaggedCellCounter(); | ||||||
|                 explode(cell); |                 explode(cell); | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|  |  | ||||||
							
								
								
									
										42
									
								
								src/main/java/de/lunarakai/minecleaner/utils/ChatUtils.java
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								src/main/java/de/lunarakai/minecleaner/utils/ChatUtils.java
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | ||||||
|  | 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)); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										33
									
								
								src/main/java/de/lunarakai/minecleaner/utils/ItemUtil.java
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/main/java/de/lunarakai/minecleaner/utils/ItemUtil.java
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | ||||||
|  | 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); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,52 @@ | ||||||
|  | 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,14 +1,8 @@ | ||||||
| package de.lunarakai.minecleaner.utils; | package de.lunarakai.minecleaner.utils; | ||||||
| 
 | 
 | ||||||
| import java.util.Arrays; | import de.iani.cubesideutils.bukkit.items.CustomHeads; | ||||||
| import java.util.UUID; | import java.util.UUID; | ||||||
| import org.bukkit.Bukkit; |  | ||||||
| import org.bukkit.Material; |  | ||||||
| import org.bukkit.inventory.ItemStack; | 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 { | public enum MinecleanerHeads { | ||||||
|     MINESWEEPER_TILE_0("38206373-5653-4431-85aa-6276f3f9a046", "Minesweeper Tile 0", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzRjMjg0YTRlOTc0MDA1ZWE4ZDFkNGQwNjc0ZWMwODk0ZWZkOGY2ZGQwMjQ4NjM5YTZjZmE5NGY4NTM4OCJ9fX0="), |     MINESWEEPER_TILE_0("38206373-5653-4431-85aa-6276f3f9a046", "Minesweeper Tile 0", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzRjMjg0YTRlOTc0MDA1ZWE4ZDFkNGQwNjc0ZWMwODk0ZWZkOGY2ZGQwMjQ4NjM5YTZjZmE5NGY4NTM4OCJ9fX0="), | ||||||
|  | @ -38,40 +32,11 @@ public enum MinecleanerHeads { | ||||||
|      |      | ||||||
|     private ItemStack head; |     private ItemStack head; | ||||||
|   |   | ||||||
|     private MinecleanerHeads(String ownerUUIDString, String ownerName, String texturesProperty) { |     MinecleanerHeads(String ownerUUIDString, String ownerName, String texturesProperty) { | ||||||
|         head = createHead(UUID.fromString(ownerUUIDString), ownerName, texturesProperty); |         head = CustomHeads.createHead(UUID.fromString(ownerUUIDString), ownerName, texturesProperty); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public ItemStack getHead() { |     public ItemStack getHead() { | ||||||
|         return new ItemStack(head); |         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,5 +1,8 @@ | ||||||
| package de.lunarakai.minecleaner.utils; | package de.lunarakai.minecleaner.utils; | ||||||
| 
 | 
 | ||||||
|  | import java.net.URL; | ||||||
|  | import net.kyori.adventure.text.Component; | ||||||
|  | 
 | ||||||
| public class MinecleanerStringUtil { | public class MinecleanerStringUtil { | ||||||
|     private MinecleanerStringUtil() { |     private MinecleanerStringUtil() { | ||||||
|     }     |     }     | ||||||
|  | @ -12,7 +15,7 @@ public class MinecleanerStringUtil { | ||||||
|         min = min % 60; |         min = min % 60; | ||||||
|         StringBuilder timeString = new StringBuilder(); |         StringBuilder timeString = new StringBuilder(); | ||||||
|         if (hours > 0) { |         if (hours > 0) { | ||||||
|             String hoursString = " Stunden"; |             String hoursString = " " + Component.translatable("minecleaner.common.hours"); | ||||||
|             if(shorten) { |             if(shorten) { | ||||||
|                 hoursString = " h"; |                 hoursString = " h"; | ||||||
|             } |             } | ||||||
|  | @ -22,7 +25,7 @@ public class MinecleanerStringUtil { | ||||||
|             if (!timeString.isEmpty()) { |             if (!timeString.isEmpty()) { | ||||||
|                 timeString.append(", "); |                 timeString.append(", "); | ||||||
|             } |             } | ||||||
|             String minString = " Minuten"; |             String minString = " " + Component.translatable("minecleaner.common.minutes"); | ||||||
|             if(shorten) { |             if(shorten) { | ||||||
|                 minString = " min"; |                 minString = " min"; | ||||||
|             } |             } | ||||||
|  | @ -30,9 +33,9 @@ public class MinecleanerStringUtil { | ||||||
|         } |         } | ||||||
|         if (sec > 0 || !timeString.isEmpty()) { |         if (sec > 0 || !timeString.isEmpty()) { | ||||||
|             if (!timeString.isEmpty()) { |             if (!timeString.isEmpty()) { | ||||||
|                 timeString.append(" und "); |                 timeString.append(Component.text(" ")).append(Component.translatable("minecleaner.common.and").append(Component.text(" "))); | ||||||
|             } |             } | ||||||
|             String secondsString = " Sekunden"; |             String secondsString = " " + Component.translatable("minecleaner.common.seconds"); | ||||||
|             if(shorten) { |             if(shorten) { | ||||||
|                 secondsString = " s"; |                 secondsString = " s"; | ||||||
|             } |             } | ||||||
|  | @ -50,4 +53,14 @@ public class MinecleanerStringUtil { | ||||||
|         String percentageString = String.format("%.1f", percent); |         String percentageString = String.format("%.1f", percent); | ||||||
|         return percentageString + "%"; |         return percentageString + "%"; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public static boolean isValidURL(String urlString) { | ||||||
|  |         try { | ||||||
|  |             URL url = new URL(urlString); | ||||||
|  |             url.toURI(); | ||||||
|  |             return true; | ||||||
|  |         } catch (Exception e) { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | 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; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										77
									
								
								src/main/resources/lang/de_DE.properties
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								src/main/resources/lang/de_DE.properties
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,77 @@ | ||||||
|  | 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. | ||||||
							
								
								
									
										76
									
								
								src/main/resources/lang/en_US.properties
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								src/main/resources/lang/en_US.properties
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,76 @@ | ||||||
|  | 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. | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue