From 14e6d0b5e8a43549344ec94077e9c94960a0dfb5 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Wed, 27 Mar 2024 18:46:12 +0100 Subject: [PATCH 01/53] info command, too far away distance changed for widthindex 3 --- .../minecleaner/MinecleanerArena.java | 2 +- .../minecleaner/MinecleanerPlugin.java | 2 + .../minecleaner/commands/InfoCommand.java | 48 +++++++++++++++++++ src/main/resources/plugin.yml | 2 + 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/lunarakai/minecleaner/commands/InfoCommand.java diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index d5f8140..53c7cf1 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -565,7 +565,7 @@ public class MinecleanerArena { case 2: return dist > 128.0; case 3: - return dist > 256.0; + return dist > 156.0; } return dist > 64.0; } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java index 664ffd7..e11acbd 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java @@ -7,6 +7,7 @@ import de.iani.playerUUIDCache.PlayerUUIDCache; import de.lunarakai.minecleaner.commands.CreateCommand; import de.lunarakai.minecleaner.commands.DeleteCommand; import de.lunarakai.minecleaner.commands.DeletePlayerScoreCommand; +import de.lunarakai.minecleaner.commands.InfoCommand; import de.lunarakai.minecleaner.commands.ListCommand; import de.lunarakai.minecleaner.commands.StatsCommand; @@ -41,6 +42,7 @@ public final class MinecleanerPlugin extends JavaPlugin { minecleanerCommand.addCommandMapping(new ListCommand(this), "list"); minecleanerCommand.addCommandMapping(new StatsCommand(this), "stats"); minecleanerCommand.addCommandMapping(new DeletePlayerScoreCommand(this), "deleteplayerscores"); + minecleanerCommand.addCommandMapping(new InfoCommand(this), "info"); } @Override diff --git a/src/main/java/de/lunarakai/minecleaner/commands/InfoCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/InfoCommand.java new file mode 100644 index 0000000..26da825 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/commands/InfoCommand.java @@ -0,0 +1,48 @@ +package de.lunarakai.minecleaner.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +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.md_5.bungee.api.ChatColor; + +public class InfoCommand extends SubCommand{ + MinecleanerPlugin plugin; + + public InfoCommand(MinecleanerPlugin plugin) { + this.plugin = plugin; + } + + @Override + public String getUsage() { + return ""; + } + + @Override + public boolean requiresPlayer() { + return false; + } + + @Override + public String getRequiredPermission() { + return MinecleanerPlugin.PERMISSION_PLAY; + } + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String arg3, + ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, + NoPermissionException, IllegalSyntaxException, InternalCommandException { + sender.sendMessage(ChatColor.GREEN + "--- " + ChatColor.AQUA + plugin.getName() + ChatColor.GREEN + " ---"); + sender.sendMessage(ChatColor.AQUA + "Version: " + ChatColor.GREEN + plugin.getPluginMeta().getVersion()); + sender.sendMessage(ChatColor.AQUA + "Entwickelt von: " + ChatColor.GREEN + plugin.getPluginMeta().getAuthors().get(0)); + sender.sendMessage(ChatColor.AQUA + "Website: " + ChatColor.GREEN + plugin.getPluginMeta().getWebsite()); + sender.sendMessage(ChatColor.AQUA + "Lizenz: " + ChatColor.GREEN + "GPL-3.0"); + return true; + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 62ca736..6d24cda 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,7 @@ name: Minecleaner version: '${project.version}' +author: LunarAkai +website: https://github.com/LunarAkai/Minecleaner main: de.lunarakai.minecleaner.MinecleanerPlugin api-version: '1.20' commands: From 496c0c06bd8a02aab9f7c74c72b05e0b9ed96332 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Thu, 28 Mar 2024 01:05:38 +0100 Subject: [PATCH 02/53] close inv on cancel --- pom.xml | 2 +- .../java/de/lunarakai/minecleaner/MinecleanerListener.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 5031bc1..8eeafc5 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.lunarakai Minecleaner - 1.0.0 + 1.0.1 jar Minecleaner diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 1603a4a..dcb5783 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -112,8 +112,9 @@ public class MinecleanerListener implements Listener { boolean hasConfirmed = slot == 1 ? true : false; if(hasConfirmed) { plugin.getManager().startGame(player); - player.closeInventory(); + //player.closeInventory(); } + player.closeInventory(); } } } From 6e62c7d172447602d8f11a04d11fc94ec8bc15e3 Mon Sep 17 00:00:00 2001 From: Leonie Freitag <76256154+LunarAkai@users.noreply.github.com> Date: Thu, 28 Mar 2024 13:53:48 +0100 Subject: [PATCH 03/53] Update LICENSE --- LICENSE | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LICENSE b/LICENSE index 6767c3c..cc8f4d6 100644 --- a/LICENSE +++ b/LICENSE @@ -208,7 +208,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. - NewMinecleaner + Minecleaner Copyright (C) 2024 LunarAkai This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. @@ -221,7 +221,7 @@ Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - NewMinecleaner Copyright (C) 2024 LunarAkai + Minecleaner Copyright (C) 2024 LunarAkai This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. From 02c19075d7246b4fca6410b3fad3fed5ee328646 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Thu, 28 Mar 2024 21:52:03 +0100 Subject: [PATCH 04/53] board with index 3 is now larger, toofaraway now depends on (close to) true center --- pom.xml | 3 +- .../minecleaner/MinecleanerArena.java | 45 ++++++++++++++----- .../lunarakai/minecleaner/game/BoardSize.java | 2 +- 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index 8eeafc5..a91bbbd 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.lunarakai Minecleaner - 1.0.1 + 1.0.2 jar Minecleaner @@ -17,6 +17,7 @@ + ${project.name} org.apache.maven.plugins diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index 53c7cf1..aa906de 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -556,18 +556,39 @@ public class MinecleanerArena { return true; } player.getLocation(tempLoc); - double dist = tempLoc.distanceSquared(centerLocation); - switch (widthIndex) { - case 0: - return dist > 64.0; - case 1: - return dist > 96.0; - case 2: - return dist > 128.0; - case 3: - return dist > 156.0; - } - return dist > 64.0; + + double centerX = centerLocation.getX(); + double centerY = centerLocation.getY() + (BoardSize.boardSizesHeight[widthIndex]/3)/2.0 - 1; + double centerZ = centerLocation.getZ(); + + switch (orientation) { + case NORTH: { + centerX = centerLocation.getX() - ((BoardSize.boardSizesWidth[widthIndex]/3)/2.0) + 1; + break; + } + case EAST: { + centerZ = centerLocation.getZ() - ((BoardSize.boardSizesWidth[widthIndex]/3)/2.0) + 1; + break; + } + + case SOUTH: { + centerX = centerLocation.getX() + ((BoardSize.boardSizesWidth[widthIndex]/3)/2.0) -1; + break; + } + case WEST: { + centerZ = centerLocation.getZ() + ((BoardSize.boardSizesWidth[widthIndex]/3)/2.0) - 1; + break; + } + default: { + break; + } + } + + Location trueCenterLocation = new Location(player.getWorld(), centerX, centerY, centerZ); + double dist = tempLoc.distanceSquared(trueCenterLocation); + player.sendMessage(ChatColor.GOLD + "Dist: " + dist); + + return dist > Math.pow((BoardSize.boardSizesWidth[widthIndex]/4.5) + 6, 2); } public String getName() { diff --git a/src/main/java/de/lunarakai/minecleaner/game/BoardSize.java b/src/main/java/de/lunarakai/minecleaner/game/BoardSize.java index 0fefa3c..07e1cfe 100644 --- a/src/main/java/de/lunarakai/minecleaner/game/BoardSize.java +++ b/src/main/java/de/lunarakai/minecleaner/game/BoardSize.java @@ -5,7 +5,7 @@ public class BoardSize { 9, 12, 18, - 33, + 36, }; public static int[] boardSizesHeight = { From 625af3dfcb4270ccc43a75f6c303b172eca0aec3 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Fri, 29 Mar 2024 14:56:08 +0100 Subject: [PATCH 05/53] flags placed & total mines are shown above the field now + a little bit of cleaning up --- .gitignore | 117 +++++- Minecleaner.iml | 4 +- pom.xml | 2 +- .../minecleaner/MinecleanerArena.java | 387 +++++++++--------- 4 files changed, 307 insertions(+), 203 deletions(-) diff --git a/.gitignore b/.gitignore index b2bf803..39e5df2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,116 @@ # Project exclude paths -/target/ -/.vscode +.vscode/ + +# User-specific stuff +.idea/ + +*.iml +*.ipr +*.iws + +# IntelliJ +out/ + +# Compiled class file +*.class + +# Log file *.log -Minecleaner.iml + +# BlueJ files +*.ctxt + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +target/ + +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next + +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +.flattened-pom.xml + +# Common working directory +run/ diff --git a/Minecleaner.iml b/Minecleaner.iml index fa63d4b..bbeeb3e 100644 --- a/Minecleaner.iml +++ b/Minecleaner.iml @@ -4,8 +4,10 @@ - SPIGOT + PAPER + ADVENTURE + 1 diff --git a/pom.xml b/pom.xml index a91bbbd..9a90bf1 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.lunarakai Minecleaner - 1.0.2 + 1.0.3 jar Minecleaner diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index aa906de..2370d54 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.UUID; +import net.kyori.adventure.text.Component; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; @@ -15,6 +16,7 @@ import org.bukkit.entity.Display.Brightness; import org.bukkit.entity.Entity; import org.bukkit.entity.ItemDisplay; import org.bukkit.entity.Player; +import org.bukkit.entity.TextDisplay; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Transformation; import org.joml.Vector2i; @@ -37,54 +39,25 @@ public class MinecleanerArena { private final BlockFace orientation; private ArenaStatus arenaStatus = ArenaStatus.INACTIVE; private UUID[] blockDisplays; - // private UUID[] textDisplays; + private TextDisplay textDisplay; private boolean hasMadeFirstClick = false; - private int flagsPlaced = 0; - private Player currentPlayer; private long currentGameStartTime; private Game currentMinecleanerGame; - private final Location tempLoc = new Location(null, 0, 0, 0); - public static final MinecleanerHeads[] MINECLEANER_HEADS = { - MinecleanerHeads.MINESWEEPER_TILE_0, - MinecleanerHeads.MINESWEEPER_TILE_1, - MinecleanerHeads.MINESWEEPER_TILE_2, - MinecleanerHeads.MINESWEEPER_TILE_3, - MinecleanerHeads.MINESWEEPER_TILE_4, - MinecleanerHeads.MINESWEEPER_TILE_5, - MinecleanerHeads.MINESWEEPER_TILE_6, - MinecleanerHeads.MINESWEEPER_TILE_7, - MinecleanerHeads.MINESWEEPER_TILE_8, - MinecleanerHeads.MINESWEEPER_TILE_FLAG, - MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, - MinecleanerHeads.TNT, - MinecleanerHeads.EXPLODED, - MinecleanerHeads.MINESWEEPER_LETTER_M, - MinecleanerHeads.MINESWEEPER_LETTER_I, - MinecleanerHeads.MINESWEEPER_LETTER_N, - MinecleanerHeads.MINESWEEPER_LETTER_E, - MinecleanerHeads.MINESWEEPER_LETTER_S, - MinecleanerHeads.MINESWEEPER_LETTER_W, - MinecleanerHeads.MINESWEEPER_LETTER_P, - MinecleanerHeads.MINESWEEPER_LETTER_R, - MinecleanerHeads.MINESWEEPER_LETTER_MINUS, - }; - public MinecleanerArena(MinecleanerPlugin plugin, ConfigurationSection arenaSection) { this.plugin = plugin; this.name = Preconditions.checkNotNull(arenaSection.getString("name")); this.location = Preconditions.checkNotNull(arenaSection.getLocation("location")); this.widthIndex = Preconditions.checkNotNull(arenaSection.getInt("fieldwidth")); this.blockDisplays = new UUID[BoardSize.boardSizesWidth[widthIndex] * BoardSize.boardSizesHeight[widthIndex]]; - // this.textDisplays = new UUID[1]; BlockFace orientation = BlockFace.NORTH; try { orientation = BlockFace.valueOf(arenaSection.getString("orientation")); - } catch(IllegalArgumentException ignored) { + } catch (IllegalArgumentException ignored) { } this.orientation = orientation; @@ -92,21 +65,13 @@ public class MinecleanerArena { this.centerLocation = location.clone().add(0.5, 0, 0.5); List list = arenaSection.getStringList("blockdisplays"); - for(int i = 0; i < list.size(); i++) { + for (int i = 0; i < list.size(); i++) { String blockDisplay = list.get(i); - if(blockDisplay != null) { + if (blockDisplay != null) { blockDisplays[i] = UUID.fromString(blockDisplay); } } - - // List textList = arenaSection.getStringList("textdisplay"); - // for(int i = 0; i < textList.size(); i++) { - // String textString = list.get(i); - // if(textString != null) { - // textDisplays[0] = UUID.fromString(textString); - // } - // } - } + } public MinecleanerArena(MinecleanerPlugin plugin, String name, Location location, int widthIndex, BlockFace orientation) { this.plugin = plugin; @@ -114,7 +79,6 @@ public class MinecleanerArena { this.location = Preconditions.checkNotNull(location, "location"); this.widthIndex = Preconditions.checkNotNull(widthIndex, ("fieldwidth")); this.blockDisplays = new UUID[BoardSize.boardSizesWidth[widthIndex] * BoardSize.boardSizesHeight[widthIndex]]; - //this.textDisplays = new UUID[1]; Preconditions.checkArgument(Math.abs(orientation.getModX()) + Math.abs(orientation.getModZ()) == 1, "no cardinal direction"); this.orientation = orientation; @@ -136,8 +100,8 @@ public class MinecleanerArena { BlockData block0 = Material.NETHER_BRICKS.createBlockData(); BlockData block1 = Material.BRICKS.createBlockData(); - for (int fx = -1 - (BoardSize.boardSizesWidth[widthIndex]/3 - 3); fx < 2; fx++) { - for (int fy = -1; fy < BoardSize.boardSizesHeight[widthIndex]/3 - 1; fy++) { + for (int fx = -1 - (BoardSize.boardSizesWidth[widthIndex] / 3 - 3); fx < 2; fx++) { + for (int fy = -1; fy < BoardSize.boardSizesHeight[widthIndex] / 3 - 1; fy++) { loc.set(location.getX() + d1x * fx, location.getY() + fy, location.getZ() + d1z * fx); boolean f = (fx + fy) % 2 == 0; world.setBlockData(loc, f ? block0 : block1); @@ -146,17 +110,17 @@ public class MinecleanerArena { } /* - * Bei Größen WidthIndex 1 + 2 -> Mitte = ein Block nach Links unten versetzt + * "Mitte" = Block (1,1) */ public void generateBlockDisplays() { int sizeWidth = BoardSize.boardSizesWidth[widthIndex]; int sizeHeight = BoardSize.boardSizesHeight[widthIndex]; World world = location.getWorld(); - for(UUID id : blockDisplays) { - if(id != null) { + for (UUID id : blockDisplays) { + if (id != null) { Entity blockdisplay = world.getEntity(id); - if(blockdisplay instanceof Display) { + if (blockdisplay instanceof Display) { blockdisplay.remove(); } } @@ -169,88 +133,59 @@ public class MinecleanerArena { double southGapFixX = 0.0; double southGapFixZ = 0.0; - if(orientation == BlockFace.EAST) { - rotation0 = 90; + + if (orientation == BlockFace.EAST) { eastWestGapFixX = 0.5; eastWestGapFixZ = -0.55; - } else if(orientation == BlockFace.SOUTH) { - rotation0 = 180; + } else if (orientation == BlockFace.SOUTH) { southGapFixX = 1.02; southGapFixZ = -0.05; - } else if(orientation == BlockFace.WEST) { - rotation0 = 270; + } else if (orientation == BlockFace.WEST) { eastWestGapFixX = 0.55; eastWestGapFixZ = 0.5; } + rotation0 = getRotationYaw(); float rotation = rotation0; - + int d0x = orientation.getModX(); int d0z = orientation.getModZ(); int d1x = -d0z; int d1z = d0x; Location loc = location.clone(); - - for(int fx = 0; fx < sizeHeight; fx++) { + + for (int fx = 0; fx < sizeHeight; fx++) { final int fxf = fx; - for(int fz = 0; fz < sizeWidth; fz++) { + for (int fz = 0; fz < sizeWidth; fz++) { final int fzf = fz; - loc.set(location.getX() - 0.016 + eastWestGapFixX + southGapFixX - (d1x * fz) / 3.0 + d0x * 0.55 + d1x * 1.847, - location.getY() - 0.8225 + fxf / 3.0, - location.getZ() + 0.525 + eastWestGapFixZ + southGapFixZ - (d1z * fz) / 3.0 + d0z * 0.55 + d1z * 1.847); + loc.set(location.getX() - 0.016 + eastWestGapFixX + southGapFixX - (d1x * fz) / 3.0 + d0x * 0.55 + d1x * 1.847, + location.getY() - 0.8225 + fxf / 3.0, + location.getZ() + 0.525 + eastWestGapFixZ + southGapFixZ - (d1z * fz) / 3.0 + d0z * 0.55 + d1z * 1.847); Display blockDisplay = world.spawn(loc, ItemDisplay.class, blockdisplay -> { Transformation transformation = blockdisplay.getTransformation(); Transformation newTransform; Vector3f newTranslationScale = new Vector3f(0.60f, 0.60f, 0.60f); newTransform = new Transformation( - transformation.getTranslation(), - transformation.getLeftRotation(), - newTranslationScale, - transformation.getRightRotation()); + transformation.getTranslation(), + transformation.getLeftRotation(), + newTranslationScale, + transformation.getRightRotation()); blockdisplay.setTransformation(newTransform); blockdisplay.setRotation(rotation, -90); blockdisplay.setBrightness(new Brightness(15, 15)); - + blockdisplay.setItemStack(MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN.getHead()); }); - - if(blockDisplay != null) { + if (blockDisplay != null) { blockDisplays[fxf * sizeWidth + fzf] = blockDisplay.getUniqueId(); } } } - - // Location textLocation = location.clone(); - // TextDisplay textDisplay = world.spawn(textLocation.add(-1, 2 + widthIndex, -0.25), TextDisplay.class, textdisplay -> { - // Transformation transformation = textdisplay.getTransformation(); - // Transformation newTransformation; - // newTransformation = new Transformation( - // transformation.getTranslation(), - // transformation.getLeftRotation(), - // transformation.getTranslation(), - // transformation.getRightRotation()); - - // textdisplay.setTransformation(newTransformation); - // textdisplay.setRotation(rotation, 0); - - // billboardmode = fixed - // textdisplay.setVisibleByDefault(true); - // textdisplay.setDisplayHeight(3); - // textdisplay.setDisplayWidth(9); - // textdisplay.setText("Minecleaner"); - // }); - - // if(textDisplay != null) { - // textDisplays[0] = textDisplay.getUniqueId(); - // } - - // show Displays - showStartHeads(); } @@ -260,15 +195,10 @@ public class MinecleanerArena { arenaSection.set("fieldwidth", this.widthIndex); arenaSection.set("orientation", this.orientation.name()); List blockDisplays = new ArrayList<>(); - for(UUID uuid : this.blockDisplays) { + for (UUID uuid : this.blockDisplays) { blockDisplays.add(uuid == null ? null : uuid.toString()); } arenaSection.set("blockdisplays", blockDisplays); - // List textd = new ArrayList<>(); - // for(UUID uuid : this.textDisplays) { - // textd.add(uuid == null ? null : uuid.toString()); - // } - // arenaSection.set("textdisplay", textd); } private void setDiplayBlock(int x, int y, MinecleanerHeads head, boolean applyUsualRotation) { @@ -277,9 +207,9 @@ public class MinecleanerArena { UUID blockDisplayId = blockDisplays[x + y * sizeWidth]; Entity blockDisplay = blockDisplayId != null ? location.getWorld().getEntity(blockDisplayId) : null; - if(blockDisplay instanceof ItemDisplay) { + if (blockDisplay instanceof ItemDisplay) { ItemDisplay display = (ItemDisplay) blockDisplay; - if(!applyUsualRotation) { + if (!applyUsualRotation) { blockDisplay.setRotation(blockDisplay.getYaw(), 0); } else { blockDisplay.setRotation(blockDisplay.getYaw(), -90); @@ -291,20 +221,12 @@ public class MinecleanerArena { public void startNewGame() { currentMinecleanerGame = new Game(plugin, BoardSize.boardSizesWidth[widthIndex], BoardSize.boardSizesHeight[widthIndex], BoardSize.mineCounter[widthIndex]); currentMinecleanerGame.start(); + showTextDisplay(); removeStartHeads(); flagsPlaced = 0; hasMadeFirstClick = false; arenaStatus = ArenaStatus.PLAYING; currentGameStartTime = System.currentTimeMillis(); - - new BukkitRunnable() { - @Override - public void run() { - if(arenaStatus == ArenaStatus.PLAYING && currentPlayer != null) { - sendActionBarMessage(currentPlayer); - } - } - }.runTaskTimer(plugin, 20L, 20L); } public void addJoiningPlayer(Player player) { @@ -312,7 +234,7 @@ public class MinecleanerArena { Preconditions.checkState(arenaStatus == ArenaStatus.INACTIVE); this.arenaStatus = ArenaStatus.CONFIRM_PLAYING; this.currentPlayer = player; - } + } public void removePlayer() { int sizeWidth = BoardSize.boardSizesWidth[widthIndex]; @@ -321,13 +243,14 @@ public class MinecleanerArena { this.arenaStatus = ArenaStatus.INACTIVE; this.currentPlayer = null; this.currentMinecleanerGame = null; - - for(int x = 0; x < sizeWidth; x++) { - for(int y = 0; y < sizeHeight; y++) { + + for (int x = 0; x < sizeWidth; x++) { + for (int y = 0; y < sizeHeight; y++) { setDiplayBlock(x, y, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); } } showStartHeads(); + removeTextDisplay(); } public void showStartHeads() { @@ -335,20 +258,20 @@ public class MinecleanerArena { int height = BoardSize.boardSizesHeight[widthIndex]; // MINE - - setDiplayBlock(width/2-2 + 0, height/2 + 1, MinecleanerHeads.MINESWEEPER_LETTER_M, true); - setDiplayBlock(width/2-2 + 1, height/2 + 1, MinecleanerHeads.MINESWEEPER_LETTER_I, true); - setDiplayBlock(width/2-2 + 2, height/2 + 1, MinecleanerHeads.MINESWEEPER_LETTER_N, true); - setDiplayBlock(width/2-2 + 3, height/2 + 1, MinecleanerHeads.MINESWEEPER_LETTER_E, true); - setDiplayBlock(width/2-2 + 4, height/2 + 1, MinecleanerHeads.MINESWEEPER_LETTER_MINUS, true); + setDiplayBlock(width / 2 - 2 + 0, height / 2 + 1, MinecleanerHeads.MINESWEEPER_LETTER_M, true); + setDiplayBlock(width / 2 - 2 + 1, height / 2 + 1, MinecleanerHeads.MINESWEEPER_LETTER_I, true); + setDiplayBlock(width / 2 - 2 + 2, height / 2 + 1, MinecleanerHeads.MINESWEEPER_LETTER_N, true); + setDiplayBlock(width / 2 - 2 + 3, height / 2 + 1, MinecleanerHeads.MINESWEEPER_LETTER_E, true); + setDiplayBlock(width / 2 - 2 + 4, height / 2 + 1, MinecleanerHeads.MINESWEEPER_LETTER_MINUS, true); // SWEEPER - setDiplayBlock(width/2-3 + 0, height/2 - 1, MinecleanerHeads.MINESWEEPER_LETTER_S, true); - setDiplayBlock(width/2-3 + 1, height/2 - 1, MinecleanerHeads.MINESWEEPER_LETTER_W, true); - setDiplayBlock(width/2-3 + 2, height/2 - 1, MinecleanerHeads.MINESWEEPER_LETTER_E, true); - setDiplayBlock(width/2-3 + 3, height/2 - 1, MinecleanerHeads.MINESWEEPER_LETTER_E, true); - setDiplayBlock(width/2-3 + 4, height/2 - 1, MinecleanerHeads.MINESWEEPER_LETTER_P, true); - setDiplayBlock(width/2-3 + 5, height/2 - 1, MinecleanerHeads.MINESWEEPER_LETTER_E, true); - setDiplayBlock(width/2-3 + 6, height/2 - 1, MinecleanerHeads.MINESWEEPER_LETTER_R, true); + setDiplayBlock(width / 2 - 3 + 0, height / 2 - 1, MinecleanerHeads.MINESWEEPER_LETTER_S, true); + setDiplayBlock(width / 2 - 3 + 1, height / 2 - 1, MinecleanerHeads.MINESWEEPER_LETTER_W, true); + setDiplayBlock(width / 2 - 3 + 2, height / 2 - 1, MinecleanerHeads.MINESWEEPER_LETTER_E, true); + setDiplayBlock(width / 2 - 3 + 3, height / 2 - 1, MinecleanerHeads.MINESWEEPER_LETTER_E, true); + setDiplayBlock(width / 2 - 3 + 4, height / 2 - 1, MinecleanerHeads.MINESWEEPER_LETTER_P, true); + setDiplayBlock(width / 2 - 3 + 5, height / 2 - 1, MinecleanerHeads.MINESWEEPER_LETTER_E, true); + setDiplayBlock(width / 2 - 3 + 6, height / 2 - 1, MinecleanerHeads.MINESWEEPER_LETTER_R, true); } @@ -356,22 +279,93 @@ public class MinecleanerArena { int width = BoardSize.boardSizesWidth[widthIndex]; int height = BoardSize.boardSizesHeight[widthIndex]; - // MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN // MINE - - setDiplayBlock(width/2-2 + 0, height/2 + 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); - setDiplayBlock(width/2-2 + 1, height/2 + 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); - setDiplayBlock(width/2-2 + 2, height/2 + 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); - setDiplayBlock(width/2-2 + 3, height/2 + 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); - setDiplayBlock(width/2-2 + 4, height/2 + 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); + setDiplayBlock(width / 2 - 2 + 0, height / 2 + 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); + setDiplayBlock(width / 2 - 2 + 1, height / 2 + 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); + setDiplayBlock(width / 2 - 2 + 2, height / 2 + 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); + setDiplayBlock(width / 2 - 2 + 3, height / 2 + 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); + setDiplayBlock(width / 2 - 2 + 4, height / 2 + 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); // SWEEPER - setDiplayBlock(width/2-3 + 0, height/2 - 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); - setDiplayBlock(width/2-3 + 1, height/2 - 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); - setDiplayBlock(width/2-3 + 2, height/2 - 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); - setDiplayBlock(width/2-3 + 3, height/2 - 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); - setDiplayBlock(width/2-3 + 4, height/2 - 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); - setDiplayBlock(width/2-3 + 5, height/2 - 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); - setDiplayBlock(width/2-3 + 6, height/2 - 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); + setDiplayBlock(width / 2 - 3 + 0, height / 2 - 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); + setDiplayBlock(width / 2 - 3 + 1, height / 2 - 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); + setDiplayBlock(width / 2 - 3 + 2, height / 2 - 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); + setDiplayBlock(width / 2 - 3 + 3, height / 2 - 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); + setDiplayBlock(width / 2 - 3 + 4, height / 2 - 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); + setDiplayBlock(width / 2 - 3 + 5, height / 2 - 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); + setDiplayBlock(width / 2 - 3 + 6, height / 2 - 1, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); + } + + private void showTextDisplay() { + Player player = this.getCurrentPlayer(); + World world = player.getWorld(); + + double textCenterX = centerLocation.getX(); + double textCenterY = centerLocation.getY() + ((double) BoardSize.boardSizesHeight[widthIndex] / 3 - 2.75 - widthIndex); + double textCenterZ = centerLocation.getZ(); + + int rotation = getRotationYaw() - 180; + + switch (orientation) { + case NORTH: { + textCenterX = centerLocation.getX() - (((double) BoardSize.boardSizesWidth[widthIndex] / 3) / 2.0) + 2.51; + textCenterZ = textCenterZ - 0.30; + break; + } + case EAST: { + textCenterX = textCenterX + 1.55; + textCenterZ = centerLocation.getZ() - (((double) BoardSize.boardSizesWidth[widthIndex] / 3) / 2.0) + 1.775; + break; + } + case SOUTH: { + textCenterX = centerLocation.getX() + (((double) BoardSize.boardSizesWidth[widthIndex] / 3) / 2.0) - 0.5275; + textCenterZ = textCenterZ + 0.80; + break; + } + case WEST: { + textCenterX = textCenterX + 0.45; + textCenterZ = centerLocation.getZ() + (((double) BoardSize.boardSizesWidth[widthIndex] / 3) / 2.0) - 1.275; + break; + } + default: { + break; + } + } + + Location textDisplayLocation = new Location(player.getWorld(), textCenterX, textCenterY, textCenterZ); + + textDisplay = world.spawn(textDisplayLocation.add(-1, 2 + widthIndex, -0.25), TextDisplay.class, textdisplay -> { + Transformation transformation = textdisplay.getTransformation(); + Vector3f newTranslationScale = new Vector3f(1.0f, 1.0f, 1.0f); + Transformation newTransformation; + newTransformation = new Transformation( + transformation.getTranslation(), + transformation.getLeftRotation(), + newTranslationScale, + transformation.getRightRotation()); + + textdisplay.setTransformation(newTransformation); + textdisplay.setRotation(rotation, 0); + + textdisplay.setBillboard(Display.Billboard.FIXED); + textdisplay.setBrightness(new Brightness(15, 15)); + textdisplay.setVisibleByDefault(true); + textdisplay.setDisplayHeight(3); + textdisplay.setDisplayWidth((float) BoardSize.boardSizesWidth[widthIndex] / 3); + textdisplay.text(Component.text(ChatColor.GOLD + "Minesweeper")); + }); + } + + private void updateTextDisplay() { + if (textDisplay != null) { + textDisplay.text(Component.text(ChatColor.GREEN + "-- Flaggen gesetzt: " + flagsPlaced + " --" + "\n" + ChatColor.RED + "-- Minen insgesamt: " + BoardSize.mineCounter[widthIndex] + " --")); + } + } + + public void removeTextDisplay() { + if (textDisplay != null) { + textDisplay.remove(); + } } public void removeBlockDisplays() { @@ -379,67 +373,64 @@ public class MinecleanerArena { int sizeHeight = BoardSize.boardSizesHeight[widthIndex]; World world = location.getWorld(); - for(int fx = 0; fx < sizeWidth; fx++) { - for(int fy = 0; fy < sizeHeight; fy++) { + for (int fx = 0; fx < sizeWidth; fx++) { + for (int fy = 0; fy < sizeHeight; fy++) { UUID blockDisplayUuid = blockDisplays[fx + fy * sizeWidth]; Entity blockDisplayEntity = blockDisplayUuid != null ? world.getEntity(blockDisplayUuid) : null; - if(blockDisplayEntity instanceof Display blockdisplay) { - blockDisplayEntity.remove(); + if (blockDisplayEntity instanceof Display blockdisplay) { + blockDisplayEntity.remove(); } } } } public void flagCell(int x, int y) { - if(currentMinecleanerGame != null && !currentMinecleanerGame.gameover) { + if (currentMinecleanerGame != null && !currentMinecleanerGame.gameover) { Cell cell = currentMinecleanerGame.getCell(x, y); - if(!cell.isRevealed()) { + if (!cell.isRevealed()) { Player player = this.currentPlayer; - + currentMinecleanerGame.flag(x, y); - if(currentMinecleanerGame.gameover) { + if (currentMinecleanerGame.gameover) { plugin.getManager().handleGameover(player, this, true); } - - if(cell.isFlagged() == true) { + if (cell.isFlagged() == true) { flagsPlaced = flagsPlaced + 1; - sendActionBarMessage(player); + updateTextDisplay(); setDiplayBlock(x, y, MinecleanerHeads.MINESWEEPER_TILE_FLAG, true); - } - - if(cell.isFlagged() == false) { + } + if (cell.isFlagged() == false) { flagsPlaced = flagsPlaced - 1; - sendActionBarMessage(player); + updateTextDisplay(); setDiplayBlock(x, y, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); } } - } } public void revealCell(int x, int y) { - if(currentMinecleanerGame != null && !currentMinecleanerGame.gameover) { + if (currentMinecleanerGame != null && !currentMinecleanerGame.gameover) { Cell cell = currentMinecleanerGame.getCell(x, y); - if(!cell.isFlagged()) { + if (!cell.isFlagged()) { Player player = this.currentPlayer; - if(!hasMadeFirstClick) { + if (!hasMadeFirstClick) { currentMinecleanerGame.firstClick(x, y); hasMadeFirstClick = true; } - + currentMinecleanerGame.reveal(x, y); setBlockForCellType(x, y, cell); - if(currentMinecleanerGame.gameover) { + if (currentMinecleanerGame.gameover) { plugin.getManager().handleGameover(player, this, !(cell.isRevealed() && cell.isExploded())); } else { - sendActionBarMessage(player); + updateTextDisplay(); } - + ArrayList floodedCells = currentMinecleanerGame.getfloodedCells(); - if(floodedCells != null) { - for(int i = 0; i < floodedCells.size(); i++) { + if (floodedCells != null) { + for (int i = 0; i < floodedCells.size(); i++) { Vector2i pos = floodedCells.get(i).position; setBlockForCellType(pos.x, pos.y, floodedCells.get(i)); } @@ -449,36 +440,29 @@ public class MinecleanerArena { } } - private void sendActionBarMessage(Player player) { - TextComponent textComponent = new TextComponent("Flaggen gesetzt: " + flagsPlaced + " Minen insgesamt: " + BoardSize.mineCounter[widthIndex]); - textComponent.setColor(ChatColor.GOLD); - player.sendMessage(ChatMessageType.ACTION_BAR, textComponent); - } - public void showMines() { ArrayList explodedCells = currentMinecleanerGame.getExplodedCells(); - if(explodedCells != null) { - for(int i = 0; i < explodedCells.size(); i++) { + if (explodedCells != null) { + for (int i = 0; i < explodedCells.size(); i++) { Vector2i pos = explodedCells.get(i).position; setBlockForCellType(pos.x, pos.y, explodedCells.get(i)); } } - } private void setBlockForCellType(int x, int y, Cell cell) { switch (cell.getType()) { case Empty: { - if(!cell.isRevealed() || !cell.isFlagged() || !cell.isExploded()) { + if (!cell.isRevealed() || !cell.isFlagged() || !cell.isExploded()) { setDiplayBlock(x, y, MinecleanerHeads.MINESWEEPER_TILE_0, true); } break; } case Number: { - if(!cell.isRevealed() || !cell.isFlagged() || !cell.isExploded()) { - switch(cell.number) { + if (!cell.isRevealed() || !cell.isFlagged() || !cell.isExploded()) { + switch (cell.number) { case 1: { - setDiplayBlock(x, y, MinecleanerHeads.MINESWEEPER_TILE_1, true); + setDiplayBlock(x, y, MinecleanerHeads.MINESWEEPER_TILE_1, true); break; } case 2: { @@ -517,7 +501,7 @@ public class MinecleanerArena { break; } case Mine: { - if(cell.isExploded()) { + if (cell.isExploded()) { setDiplayBlock(x, y, MinecleanerHeads.EXPLODED, true); } else { setDiplayBlock(x, y, MinecleanerHeads.TNT, true); @@ -540,9 +524,9 @@ public class MinecleanerArena { int d1z = d0x; Location loc = location.clone(); - - for(int fx = -1 - (BoardSize.boardSizesWidth[widthIndex]/3 - 3); fx < 2; fx++) { // boardWith/3 - for(int fy = -1; fy < BoardSize.boardSizesHeight[widthIndex]/3 - 1; fy++) { // fy < boardHeight/3 - 1 + + for (int fx = -1 - (BoardSize.boardSizesWidth[widthIndex] / 3 - 3); fx < 2; fx++) { // boardWith/3 + for (int fy = -1; fy < BoardSize.boardSizesHeight[widthIndex] / 3 - 1; fy++) { // fy < boardHeight/3 - 1 loc.set(location.getX() + d1x * fx, location.getY() + fy, location.getZ() + d1z * fx); blocks.add(loc.clone()); } @@ -551,44 +535,42 @@ public class MinecleanerArena { } public boolean isTooFarAway(Player player) { - if(currentMinecleanerGame != null && currentMinecleanerGame.gameover) return false; - if(player.getWorld() != location.getWorld()) { + if (currentMinecleanerGame != null && currentMinecleanerGame.gameover) return false; + if (player.getWorld() != location.getWorld()) { return true; } player.getLocation(tempLoc); double centerX = centerLocation.getX(); - double centerY = centerLocation.getY() + (BoardSize.boardSizesHeight[widthIndex]/3)/2.0 - 1; + double centerY = centerLocation.getY() + (BoardSize.boardSizesHeight[widthIndex] / 3) / 2.0 - 1; double centerZ = centerLocation.getZ(); switch (orientation) { case NORTH: { - centerX = centerLocation.getX() - ((BoardSize.boardSizesWidth[widthIndex]/3)/2.0) + 1; + centerX = centerLocation.getX() - ((BoardSize.boardSizesWidth[widthIndex] / 3) / 2.0) + 1; break; } case EAST: { - centerZ = centerLocation.getZ() - ((BoardSize.boardSizesWidth[widthIndex]/3)/2.0) + 1; + centerZ = centerLocation.getZ() - ((BoardSize.boardSizesWidth[widthIndex] / 3) / 2.0) + 1; break; } - case SOUTH: { - centerX = centerLocation.getX() + ((BoardSize.boardSizesWidth[widthIndex]/3)/2.0) -1; + centerX = centerLocation.getX() + ((BoardSize.boardSizesWidth[widthIndex] / 3) / 2.0) - 1; break; } case WEST: { - centerZ = centerLocation.getZ() + ((BoardSize.boardSizesWidth[widthIndex]/3)/2.0) - 1; + centerZ = centerLocation.getZ() + ((BoardSize.boardSizesWidth[widthIndex] / 3) / 2.0) - 1; break; - } + } default: { break; } - } + } Location trueCenterLocation = new Location(player.getWorld(), centerX, centerY, centerZ); double dist = tempLoc.distanceSquared(trueCenterLocation); - player.sendMessage(ChatColor.GOLD + "Dist: " + dist); - return dist > Math.pow((BoardSize.boardSizesWidth[widthIndex]/4.5) + 6, 2); + return dist > Math.pow((BoardSize.boardSizesWidth[widthIndex] / 4.5) + 6, 2); } public String getName() { @@ -629,5 +611,14 @@ public class MinecleanerArena { public int getWidthIndex() { return widthIndex; - } -} + } + + private int getRotationYaw() { + return switch (orientation) { + case EAST -> 90; + case SOUTH -> 180; + case WEST -> 270; + default -> 0; + }; + } +} \ No newline at end of file From 1fd325cebb151d1f5d47f776963719ddfd25764e Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Fri, 29 Mar 2024 15:00:39 +0100 Subject: [PATCH 06/53] imports MinecleanerArena --- .../lunarakai/minecleaner/MinecleanerArena.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index 2370d54..f5fafc0 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -1,10 +1,16 @@ package de.lunarakai.minecleaner; +import com.google.common.base.Preconditions; +import de.lunarakai.minecleaner.game.BoardSize; +import de.lunarakai.minecleaner.game.Cell; +import de.lunarakai.minecleaner.game.Game; +import de.lunarakai.minecleaner.utils.MinecleanerHeads; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.UUID; import net.kyori.adventure.text.Component; +import net.md_5.bungee.api.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; @@ -17,18 +23,9 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.ItemDisplay; import org.bukkit.entity.Player; import org.bukkit.entity.TextDisplay; -import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Transformation; import org.joml.Vector2i; import org.joml.Vector3f; -import com.google.common.base.Preconditions; -import de.lunarakai.minecleaner.game.BoardSize; -import de.lunarakai.minecleaner.game.Cell; -import de.lunarakai.minecleaner.game.Game; -import de.lunarakai.minecleaner.utils.MinecleanerHeads; -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.ChatMessageType; -import net.md_5.bungee.api.chat.TextComponent; public class MinecleanerArena { private final MinecleanerPlugin plugin; From 8e3590db00258594c576bbb7beb44d31a54749ca Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 30 Mar 2024 11:41:59 +0100 Subject: [PATCH 07/53] PlayerInteractEvent in MinecleanerListener now shouldn't prevent players from opening chests (i hope) --- pom.xml | 2 +- src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 9a90bf1..06f8021 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.lunarakai Minecleaner - 1.0.3 + 1.0.3b jar Minecleaner diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index dcb5783..7ae2a2f 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -31,11 +31,11 @@ public class MinecleanerListener implements Listener { @EventHandler(priority = EventPriority.LOWEST) public void onPlayerInteract(PlayerInteractEvent e) { - if(e.getHand() != EquipmentSlot.HAND) return; if((e.getAction() == Action.LEFT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_BLOCK)) { Block block = e.getClickedBlock(); MinecleanerArena arena = plugin.getArenaList().getPlayerArena(e.getPlayer()); if(arena != null) { + if(e.getHand() != EquipmentSlot.HAND) return; e.setCancelled(true); MinecleanerArena arenaClicked = plugin.getArenaList().getArenaAtBlock(block); if(arenaClicked == arena && arena.getArenaStatus() == ArenaStatus.PLAYING) { From 50c72615bd17d2d7e4b2c72d05418139e240801e Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 30 Mar 2024 23:28:17 +0100 Subject: [PATCH 08/53] revert PlayerInteractEvent in MinecleanerListener now shouldn't prevent players from opening chests (i hope) --- src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 7ae2a2f..dcb5783 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -31,11 +31,11 @@ public class MinecleanerListener implements Listener { @EventHandler(priority = EventPriority.LOWEST) public void onPlayerInteract(PlayerInteractEvent e) { + if(e.getHand() != EquipmentSlot.HAND) return; if((e.getAction() == Action.LEFT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_BLOCK)) { Block block = e.getClickedBlock(); MinecleanerArena arena = plugin.getArenaList().getPlayerArena(e.getPlayer()); if(arena != null) { - if(e.getHand() != EquipmentSlot.HAND) return; e.setCancelled(true); MinecleanerArena arenaClicked = plugin.getArenaList().getArenaAtBlock(block); if(arenaClicked == arena && arena.getArenaStatus() == ArenaStatus.PLAYING) { From 42696fb61293f9a4026d9918352ea2a223eba878 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sun, 31 Mar 2024 23:33:23 +0200 Subject: [PATCH 09/53] textdisplay is now not persistent --- pom.xml | 2 +- src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 06f8021..fb9092a 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.lunarakai Minecleaner - 1.0.3b + 1.0.3c jar Minecleaner diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index f5fafc0..f420fb6 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -349,6 +349,7 @@ public class MinecleanerArena { textdisplay.setVisibleByDefault(true); textdisplay.setDisplayHeight(3); textdisplay.setDisplayWidth((float) BoardSize.boardSizesWidth[widthIndex] / 3); + textdisplay.setPersistent(false); textdisplay.text(Component.text(ChatColor.GOLD + "Minesweeper")); }); } From 335b4cfab1e3a3de8b80d7cf35a7c3d026da1142 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sun, 31 Mar 2024 23:51:56 +0200 Subject: [PATCH 10/53] nullcheck in setBlockForCellType in MinecleanerArena --- src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index f420fb6..52d42a2 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -449,6 +449,7 @@ public class MinecleanerArena { } private void setBlockForCellType(int x, int y, Cell cell) { + if(cell.getType() == null) return; switch (cell.getType()) { case Empty: { if (!cell.isRevealed() || !cell.isFlagged() || !cell.isExploded()) { From c8978e2625f5a822193ca77cee8f8d9b7f83dcd4 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Fri, 5 Apr 2024 22:20:01 +0200 Subject: [PATCH 11/53] change to (hopefully) prevent index out of bounds exception + return "-" when fromPercentage == 0 --- pom.xml | 2 +- .../java/de/lunarakai/minecleaner/MinecleanerArena.java | 4 +++- .../java/de/lunarakai/minecleaner/MinecleanerListener.java | 6 +++++- .../lunarakai/minecleaner/utils/MinecleanerStringUtil.java | 3 +++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index fb9092a..4856cdf 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.lunarakai Minecleaner - 1.0.3c + 1.0.4 jar Minecleaner diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index 52d42a2..19205a1 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -600,10 +600,12 @@ public class MinecleanerArena { return blockDisplays; } - public int getSize() { + public int getArenaWidth() { return BoardSize.boardSizesWidth[widthIndex]; } + public int getArenaHeight() { return BoardSize.boardSizesHeight[widthIndex]; } + public long getCurrentGameStartTime() { return currentGameStartTime; } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index dcb5783..57ae8fb 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -72,8 +72,12 @@ public class MinecleanerListener implements Listener { if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { hasRightClicked = true; } + + if(blockzInt < arena.getArenaWidth() && blockxInt < arenaClicked.getArenaHeight()) { + plugin.getManager().handleFieldClick(e.getPlayer(), blockzInt, blockxInt, hasRightClicked); + } //player.sendMessage("Arena click! " + blockxInt + " " + blockzInt + " Right Clicked: " + hasRightClicked); - plugin.getManager().handleFieldClick(e.getPlayer(), blockzInt, blockxInt, hasRightClicked); + } } } diff --git a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java index cefcf3d..e0e307a 100644 --- a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java +++ b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java @@ -30,6 +30,9 @@ public class MinecleanerStringUtil { } public static String percentageString(int whatPercentage, int fromPercentage) { + if(fromPercentage == 0) { + return "-"; + } float percent = (float) whatPercentage/fromPercentage; percent = percent * 100; String percentageString = String.format("%.1f", percent); From 82a49208997340b11eedeeae0579e57d3a067091 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 6 Apr 2024 14:50:41 +0200 Subject: [PATCH 12/53] Settings + Displayed Plugin Name is now configurable in config.yml --- pom.xml | 2 +- .../minecleaner/MinecleanerArena.java | 58 +++++++++- .../minecleaner/MinecleanerListener.java | 33 ++++++ .../minecleaner/MinecleanerManager.java | 104 +++++++++++++++--- .../minecleaner/MinecleanerPlugin.java | 10 ++ .../minecleaner/commands/CreateCommand.java | 4 +- .../minecleaner/commands/DeleteCommand.java | 4 +- .../commands/DeletePlayerScoreCommand.java | 2 +- .../minecleaner/commands/ListCommand.java | 2 +- .../minecleaner/commands/SettingsCommand.java | 45 ++++++++ .../minecleaner/commands/StatsCommand.java | 2 +- src/main/resources/config.yml | 2 + 12 files changed, 240 insertions(+), 28 deletions(-) create mode 100644 src/main/java/de/lunarakai/minecleaner/commands/SettingsCommand.java diff --git a/pom.xml b/pom.xml index 4856cdf..ba7fbc0 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.lunarakai Minecleaner - 1.0.4 + 1.1.0 jar Minecleaner diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index 19205a1..355119b 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -5,12 +5,16 @@ import de.lunarakai.minecleaner.game.BoardSize; import de.lunarakai.minecleaner.game.Cell; import de.lunarakai.minecleaner.game.Game; import de.lunarakai.minecleaner.utils.MinecleanerHeads; +import de.lunarakai.minecleaner.utils.MinecleanerStringUtil; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.UUID; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ChatMessageType; +import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; @@ -23,6 +27,7 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.ItemDisplay; import org.bukkit.entity.Player; import org.bukkit.entity.TextDisplay; +import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Transformation; import org.joml.Vector2i; import org.joml.Vector3f; @@ -41,6 +46,7 @@ public class MinecleanerArena { private int flagsPlaced = 0; private Player currentPlayer; private long currentGameStartTime; + private long ingameTime; private Game currentMinecleanerGame; private final Location tempLoc = new Location(null, 0, 0, 0); @@ -219,6 +225,28 @@ public class MinecleanerArena { currentMinecleanerGame = new Game(plugin, BoardSize.boardSizesWidth[widthIndex], BoardSize.boardSizesHeight[widthIndex], BoardSize.mineCounter[widthIndex]); currentMinecleanerGame.start(); showTextDisplay(); + if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0) { + new BukkitRunnable() { + @Override + public void run() { + if(arenaStatus == ArenaStatus.PLAYING && currentPlayer != null) { + updateIngameInfoTexts(); + } + } + }.runTaskTimer(plugin, 20L, 20L); + } + + if(plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { + new BukkitRunnable() { + @Override + public void run() { + if(arenaStatus == ArenaStatus.PLAYING && currentPlayer != null) { + updateIngameInfoTexts(); + } + } + }.runTaskTimer(plugin, 1L, 1L); + } + removeStartHeads(); flagsPlaced = 0; hasMadeFirstClick = false; @@ -350,13 +378,31 @@ public class MinecleanerArena { textdisplay.setDisplayHeight(3); textdisplay.setDisplayWidth((float) BoardSize.boardSizesWidth[widthIndex] / 3); textdisplay.setPersistent(false); - textdisplay.text(Component.text(ChatColor.GOLD + "Minesweeper")); + textdisplay.text(Component.text(ChatColor.GOLD + plugin.getDisplayedPluginName())); }); } - private void updateTextDisplay() { + private void updateIngameInfoTexts() { + String timer = ""; + if(plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { + ingameTime += 1; + timer = ChatColor.GOLD + " Zeit: " + MinecleanerStringUtil.timeToString((ingameTime/20)*1000) + " "; + } + if (textDisplay != null) { - textDisplay.text(Component.text(ChatColor.GREEN + "-- Flaggen gesetzt: " + flagsPlaced + " --" + "\n" + ChatColor.RED + "-- Minen insgesamt: " + BoardSize.mineCounter[widthIndex] + " --")); + String component = ChatColor.GREEN + "-- Flaggen gesetzt: " + flagsPlaced + " --" + "\n" + ChatColor.RED + "-- Minen insgesamt: " + BoardSize.mineCounter[widthIndex] + " --"; + //textDisplay.text(Component.text(ChatColor.GREEN + "-- Flaggen gesetzt: " + flagsPlaced + " --" + "\n" + ChatColor.RED + "-- Minen insgesamt: " + BoardSize.mineCounter[widthIndex] + " --")); + String newLine = ""; + String filler = ""; + if(!timer.equals("")) { + newLine = "\n" + ChatColor.GOLD + "-- "; + filler = " --"; + } + textDisplay.text(Component.text(component + newLine + timer + filler)); + } + if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0) { + String componentActionBar = ChatColor.GREEN + "Flaggen gesetzt: " + flagsPlaced + ChatColor.RED + " Minen insgesamt: " + BoardSize.mineCounter[widthIndex]; + currentPlayer.sendActionBar(Component.text(componentActionBar + " " + timer)); } } @@ -394,12 +440,12 @@ public class MinecleanerArena { } if (cell.isFlagged() == true) { flagsPlaced = flagsPlaced + 1; - updateTextDisplay(); + updateIngameInfoTexts(); setDiplayBlock(x, y, MinecleanerHeads.MINESWEEPER_TILE_FLAG, true); } if (cell.isFlagged() == false) { flagsPlaced = flagsPlaced - 1; - updateTextDisplay(); + updateIngameInfoTexts(); setDiplayBlock(x, y, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); } } @@ -423,7 +469,7 @@ public class MinecleanerArena { if (currentMinecleanerGame.gameover) { plugin.getManager().handleGameover(player, this, !(cell.isRevealed() && cell.isExploded())); } else { - updateTextDisplay(); + updateIngameInfoTexts(); } ArrayList floodedCells = currentMinecleanerGame.getfloodedCells(); diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 57ae8fb..7e9bb24 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -122,6 +122,39 @@ public class MinecleanerListener implements Listener { } } } + 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); + player.closeInventory(); + player.openInventory(plugin.getManager().showSettingsInventory(player)); + } + break; + } + default: { + break; + } + } + } } } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index 6c0c061..2ac61c9 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -1,9 +1,11 @@ package de.lunarakai.minecleaner; +import de.iani.cubesidestats.api.SettingKey; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map.Entry; +import java.util.Set; import java.util.UUID; import java.util.function.Consumer; import org.bukkit.Bukkit; @@ -11,6 +13,7 @@ import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.Sound; import org.bukkit.World; +import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; @@ -41,6 +44,12 @@ public class MinecleanerManager { private final HashMap statisticsTimeRecord; private final HashMap statisticsTotalGamesPlayed; + // Settings + + private Inventory settingsInventory; + private SettingKey minecleanerSettingTimerKey; + private SettingKey minecleanerAdditionalDisplaySettingKey; + public MinecleanerManager(MinecleanerPlugin plugin) { this.plugin = plugin; @@ -50,12 +59,29 @@ public class MinecleanerManager { this.sizes.put(2, "groß"); this.sizes.put(3, "experte"); - this.confirmPlayingInventory = plugin.getServer().createInventory(null, InventoryType.HOPPER, "Minecleaner starten?"); - this.confirmPlayingInventory.setItem(1, + this.confirmPlayingInventory = plugin.getServer().createInventory(null, InventoryType.HOPPER, plugin.getDisplayedPluginName() + " starten?"); + this.confirmPlayingInventory.setItem(1, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.GREEN_CONCRETE), ChatColor.GREEN + "Bestätigen"))); this.confirmPlayingInventory.setItem(3, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.RED_CONCRETE), ChatColor.RED + "Abbrechen"))); + // Settings + + + minecleanerSettingTimerKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings.timer"); + minecleanerSettingTimerKey.setDefault(0); + minecleanerSettingTimerKey.setDisplayName("Timer"); + + minecleanerAdditionalDisplaySettingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings.additionaldisplay"); + minecleanerAdditionalDisplaySettingKey.setDefault(0); + minecleanerAdditionalDisplaySettingKey.setDisplayName("Zusätzliche Anzeige in der Action Bar"); + + this.settingsInventory = plugin.getServer().createInventory(null, InventoryType.CHEST, + plugin.getDisplayedPluginName() + " Einstellungen"); + + + // Statistics + statisticsWonGamesTotal = plugin.getCubesideStatistics().getStatisticKey("minecleaner.wonGamestotal"); statisticsWonGamesTotal.setIsMonthlyStats(true); statisticsWonGamesTotal.setDisplayName("Runden gewonnen"); @@ -86,10 +112,6 @@ public class MinecleanerManager { statisticsTimeRecord.put(e.getKey(), s); } } - - public HashMap getSizes() { - return sizes; - } public void joinArena(Player player, MinecleanerArena arena) { if (!player.hasPermission(MinecleanerPlugin.PERMISSION_PLAY)) { @@ -108,7 +130,7 @@ public class MinecleanerManager { arena.removePlayer(); plugin.getArenaList().setArenaForPlayer(player, null); if(message) { - player.sendMessage(ChatColor.YELLOW + "Das Minecleanerspiel wurde abgebrochen."); + player.sendMessage(ChatColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); } } @@ -117,7 +139,7 @@ public class MinecleanerManager { Preconditions.checkArgument(arena != null, "player is in no arena"); Preconditions.checkState(arena.getArenaStatus() == ArenaStatus.CONFIRM_PLAYING, "not confirming playing status"); arena.startNewGame(); - player.sendMessage(ChatColor.YELLOW + "Du hast eine neue Runde Minecleaner gestartet."); + player.sendMessage(ChatColor.YELLOW + "Du hast eine neue Runde " + plugin.getDisplayedPluginName() + " gestartet."); } public void handleGameover(Player player, MinecleanerArena arena, boolean isSuccessfullyCleared) { @@ -128,7 +150,7 @@ public class MinecleanerManager { if(!isSuccessfullyCleared) { world.playSound(player.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); - player.sendMessage(ChatColor.YELLOW + "Game Over! Du konntest das Minecleaner-Feld nicht erfolgreich lösen!"); + player.sendMessage(ChatColor.YELLOW + "Game Over! Du konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!"); arena.showMines(); if(sg != null) { @@ -164,7 +186,7 @@ public class MinecleanerManager { if(isUpdated != null && isUpdated) { player.sendMessage(ChatColor.GOLD + "Herzlichen Glückwunsch! Du hast eine neue Bestzeit erreicht! " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis) ); } else { - player.sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das Minecleaner-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis) + ChatColor.YELLOW + " erfolgreich lösen!"); + player.sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis) + ChatColor.YELLOW + " erfolgreich lösen!"); } }); } @@ -209,9 +231,6 @@ public class MinecleanerManager { } } - public Inventory getConfirmPlayingInventory() { - return confirmPlayingInventory; - } public void handleFieldClick(@NotNull Player player, int x, int y, boolean hasRightClicked) { MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); @@ -325,6 +344,63 @@ public class MinecleanerManager { for(StatisticKey statsKey : statisticsTotalGamesPlayed.values()) { statsPlayer.deleteScore(statsKey); } - + } + + public Inventory showSettingsInventory(Player player) { + int current = getSettingsValue("additionaldisplay", player); + + if(current == 0) { + settingsInventory.setItem(12, + ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.NAME_TAG), ChatColor.RED + "Zusätzliche Anzeige in der Action Bar"))); + } else { + settingsInventory.setItem(12, + ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.NAME_TAG), ChatColor.GREEN + "Zusätzliche Anzeige in der Action Bar"))); + } + + + current = getSettingsValue("timer", player); + + if(current == 0) { + settingsInventory.setItem(14, + ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CLOCK), ChatColor.RED + "Timer anzeigen"))); + } else { + settingsInventory.setItem(14, + ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CLOCK), ChatColor.GREEN + "Timer anzeigen"))); + } + + return settingsInventory; + } + + public int getSettingsValue(String settingsKeyString, Player player) { + PlayerStatistics playerStatistics = plugin.getCubesideStatistics().getStatistics(player.getUniqueId()); + SettingKey settingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings." + settingsKeyString); + + return playerStatistics.getSettingValueOrDefault(settingKey); + } + + public void updateSettingsValue(String settingsKeyString, int newValue, Player player) { + PlayerStatistics playerStatistics = plugin.getCubesideStatistics().getStatistics(player.getUniqueId()); + SettingKey settingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings." + settingsKeyString); + playerStatistics.setSettingValue(settingKey, newValue); + } + + public HashMap getSizes() { + return sizes; + } + + public Inventory getConfirmPlayingInventory() { + return confirmPlayingInventory; + } + + public Inventory getSettingsInventory() { + return settingsInventory; + } + + public SettingKey getMinecleanerSettingTimerKey() { + return minecleanerSettingTimerKey; + } + + public SettingKey getMinecleanerAdditionalDisplaySettingKey() { + return minecleanerAdditionalDisplaySettingKey; } } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java index e11acbd..672311f 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java @@ -1,5 +1,6 @@ package de.lunarakai.minecleaner; +import de.lunarakai.minecleaner.commands.SettingsCommand; import org.bukkit.plugin.java.JavaPlugin; import de.iani.cubesidestats.api.CubesideStatisticsAPI; import de.iani.cubesideutils.bukkit.commands.CommandRouter; @@ -43,6 +44,7 @@ public final class MinecleanerPlugin extends JavaPlugin { minecleanerCommand.addCommandMapping(new StatsCommand(this), "stats"); minecleanerCommand.addCommandMapping(new DeletePlayerScoreCommand(this), "deleteplayerscores"); minecleanerCommand.addCommandMapping(new InfoCommand(this), "info"); + minecleanerCommand.addCommandMapping(new SettingsCommand(this), "settings"); } @Override @@ -67,4 +69,12 @@ public final class MinecleanerPlugin extends JavaPlugin { public PlayerUUIDCache getPlayerUUIDCache() { return playerUUIDCache; } + + public String getDisplayedPluginName() { + return this.getConfig().getString("generalSettings.displayedPluginName"); + } + + public int getSizeWinpoints(String size) { + return this.getConfig().getInt("winpoints.size." + size); + } } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java index e4ac4a3..38a2022 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java @@ -94,12 +94,12 @@ public class CreateCommand extends SubCommand { @Nullable RayTraceResult target = player.rayTraceBlocks(6); if(target == null || target.getHitBlock() == null) { - sender.sendMessage(ChatColor.DARK_RED + "Bitte gucke den Block an, der im Zentrum des Minecleaner-Spielfelds sein soll."); + sender.sendMessage(ChatColor.DARK_RED + "Bitte gucke den Block an, der im Zentrum des " + plugin.getDisplayedPluginName() + "-Spielfelds sein soll."); return true; } BlockFace face = target.getHitBlockFace(); if(face != BlockFace.NORTH && face != BlockFace.WEST && face != BlockFace.EAST && face != BlockFace.SOUTH) { - sender.sendMessage(ChatColor.DARK_RED + "Bitte gucke die Seite des Blockes an, wo das Minecleaner-Spielfeld erstellt werden soll."); + sender.sendMessage(ChatColor.DARK_RED + "Bitte gucke die Seite des Blockes an, wo das " + plugin.getDisplayedPluginName() + "-Spielfeld erstellt werden soll."); return true; } location = target.getHitBlock().getLocation(); diff --git a/src/main/java/de/lunarakai/minecleaner/commands/DeleteCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/DeleteCommand.java index bb7c577..46f7434 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/DeleteCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/DeleteCommand.java @@ -52,9 +52,9 @@ public class DeleteCommand extends SubCommand { } if(arena != null) { plugin.getArenaList().removeArena(arena); - sender.sendMessage(ChatColor.YELLOW + "Die Minecleaner-Arena " + arena.getName() + " wurde gelöscht."); + sender.sendMessage(ChatColor.YELLOW + "Die " + plugin.getDisplayedPluginName() + "-Arena " + arena.getName() + " wurde gelöscht."); } else { - sender.sendMessage(ChatColor.YELLOW + "Hier befindet sich keine Minecleaner-Arena."); + sender.sendMessage(ChatColor.YELLOW + "Hier befindet sich keine " + plugin.getDisplayedPluginName() + "-Arena."); } return true; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/DeletePlayerScoreCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/DeletePlayerScoreCommand.java index 2965406..df54c61 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/DeletePlayerScoreCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/DeletePlayerScoreCommand.java @@ -51,7 +51,7 @@ public class DeletePlayerScoreCommand extends SubCommand{ sender.sendMessage(ChatColor.DARK_RED + "Ein Spieler mit dem Namen '" + player + "' konnte nicht gefunden werden."); } plugin.getManager().deleteScores(cachedPlayer.getUUID()); - sender.sendMessage(ChatColor.DARK_RED + "Alle Minecleaner-Statistiken von Spieler '" + cachedPlayer.getName() + "' wurden gelöscht."); + sender.sendMessage(ChatColor.DARK_RED + "Alle " + plugin.getDisplayedPluginName() + "-Statistiken von Spieler '" + cachedPlayer.getName() + "' wurden gelöscht."); return true; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java index 7824b7b..51b9b96 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java @@ -41,7 +41,7 @@ public class ListCommand extends SubCommand{ @Override public boolean onCommand(CommandSender sender, Command arg1, String arg2, String commandString, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { - sender.sendMessage(ChatColor.YELLOW + "Angelegte Minecleaner-Arenen"); + sender.sendMessage(ChatColor.YELLOW + "Angelegte "+ plugin.getDisplayedPluginName() + "-Arenen"); boolean any = false; for(MinecleanerArena arena : plugin.getArenaList().getArenas()) { Location location = arena.getLocation(); diff --git a/src/main/java/de/lunarakai/minecleaner/commands/SettingsCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/SettingsCommand.java new file mode 100644 index 0000000..a7051ad --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/commands/SettingsCommand.java @@ -0,0 +1,45 @@ +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 org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SettingsCommand extends SubCommand { + MinecleanerPlugin plugin; + + public SettingsCommand(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 sender, Command command, String s, String s1, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { + Player player = (Player) sender; + + player.openInventory(plugin.getManager().showSettingsInventory(player)); + return true; + } +} diff --git a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java index 4783980..f87c3a8 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java @@ -52,7 +52,7 @@ public class StatsCommand extends SubCommand { return; } if(playerName == null) { - sender.sendMessage(ChatColor.AQUA + "Deine Minecleaner Statistik:"); + sender.sendMessage(ChatColor.AQUA + "Deine " + plugin.getDisplayedPluginName() + " Statistik:"); } else { sender.sendMessage(ChatColor.AQUA + "Minecleaner-Statistik von " + data.getPlayerName() + ":"); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 34cc22c..a6c8023 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,3 +1,5 @@ +generalSettings: + displayedPluginName: Minecleaner winpoints: size: small: 1 From b25e68ca14ad0d995400a79f0252ff4a7dc49e4e Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 6 Apr 2024 14:59:33 +0200 Subject: [PATCH 13/53] Settings + Displayed Plugin Name is now configurable in config.yml --- src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index 355119b..89ce2f7 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -248,6 +248,7 @@ public class MinecleanerArena { } removeStartHeads(); + ingameTime = 0; flagsPlaced = 0; hasMadeFirstClick = false; arenaStatus = ArenaStatus.PLAYING; From 72f53f8aadc812063d5321b343779264349215fd Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 6 Apr 2024 18:30:33 +0200 Subject: [PATCH 14/53] fixed time :3 --- pom.xml | 2 +- .../minecleaner/MinecleanerArena.java | 40 ++++++++----------- .../minecleaner/MinecleanerManager.java | 4 +- .../minecleaner/commands/StatsCommand.java | 4 +- .../utils/MinecleanerStringUtil.java | 20 ++++++++-- 5 files changed, 38 insertions(+), 32 deletions(-) diff --git a/pom.xml b/pom.xml index ba7fbc0..6b04810 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.lunarakai Minecleaner - 1.1.0 + 1.1.1 jar Minecleaner diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index 89ce2f7..f37c358 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -225,27 +225,6 @@ public class MinecleanerArena { currentMinecleanerGame = new Game(plugin, BoardSize.boardSizesWidth[widthIndex], BoardSize.boardSizesHeight[widthIndex], BoardSize.mineCounter[widthIndex]); currentMinecleanerGame.start(); showTextDisplay(); - if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0) { - new BukkitRunnable() { - @Override - public void run() { - if(arenaStatus == ArenaStatus.PLAYING && currentPlayer != null) { - updateIngameInfoTexts(); - } - } - }.runTaskTimer(plugin, 20L, 20L); - } - - if(plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { - new BukkitRunnable() { - @Override - public void run() { - if(arenaStatus == ArenaStatus.PLAYING && currentPlayer != null) { - updateIngameInfoTexts(); - } - } - }.runTaskTimer(plugin, 1L, 1L); - } removeStartHeads(); ingameTime = 0; @@ -253,6 +232,21 @@ public class MinecleanerArena { hasMadeFirstClick = false; arenaStatus = ArenaStatus.PLAYING; currentGameStartTime = System.currentTimeMillis(); + + if((plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0 + || plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) && arenaStatus == ArenaStatus.PLAYING) { + new BukkitRunnable() { + @Override + public void run() { + if(arenaStatus == ArenaStatus.PLAYING && currentPlayer != null) { + ingameTime++; + updateIngameInfoTexts(); + } else { + cancel(); + } + } + }.runTaskTimer(plugin, 1L, 1L); + } } public void addJoiningPlayer(Player player) { @@ -386,8 +380,7 @@ public class MinecleanerArena { private void updateIngameInfoTexts() { String timer = ""; if(plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { - ingameTime += 1; - timer = ChatColor.GOLD + " Zeit: " + MinecleanerStringUtil.timeToString((ingameTime/20)*1000) + " "; + timer = ChatColor.GOLD + " Zeit: " + MinecleanerStringUtil.timeToString((ingameTime/20)*1000, true) + " "; } if (textDisplay != null) { @@ -401,6 +394,7 @@ public class MinecleanerArena { } textDisplay.text(Component.text(component + newLine + timer + filler)); } + if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0) { String componentActionBar = ChatColor.GREEN + "Flaggen gesetzt: " + flagsPlaced + ChatColor.RED + " Minen insgesamt: " + BoardSize.mineCounter[widthIndex]; currentPlayer.sendActionBar(Component.text(componentActionBar + " " + timer)); diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index 2ac61c9..6ba5610 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -184,9 +184,9 @@ public class MinecleanerManager { if(sg != null) { ps.minScore(sg, millis, isUpdated -> { if(isUpdated != null && isUpdated) { - player.sendMessage(ChatColor.GOLD + "Herzlichen Glückwunsch! Du hast eine neue Bestzeit erreicht! " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis) ); + player.sendMessage(ChatColor.GOLD + "Herzlichen Glückwunsch! Du hast eine neue Bestzeit erreicht! " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) ); } else { - player.sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis) + ChatColor.YELLOW + " erfolgreich lösen!"); + player.sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!"); } }); } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java index f87c3a8..ab2e3b4 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java @@ -71,8 +71,8 @@ public class StatsCommand extends SubCommand { sender.sendMessage(ChatColor.BLUE + " Dieser Monat: " + ChatColor.GREEN + totalWonMonth + " von " + totalSizeMonth + " (" + MinecleanerStringUtil.percentageString(totalWonMonth, totalSizeMonth)+ ")"); Integer time = data.getBestTime(e.getKey()); Integer timeThisMonth = data.getBestTimeThisMonth(e.getKey()); - sender.sendMessage(ChatColor.BLUE + " Bestzeit: " + ChatColor.GREEN + (time == null ? "-" : MinecleanerStringUtil.timeToString(time))); - sender.sendMessage(ChatColor.BLUE + " Dieser Monat: " + ChatColor.GREEN + (timeThisMonth == null ? "-" : MinecleanerStringUtil.timeToString(timeThisMonth))); + sender.sendMessage(ChatColor.BLUE + " Bestzeit: " + ChatColor.GREEN + (time == null ? "-" : MinecleanerStringUtil.timeToString(time, false))); + sender.sendMessage(ChatColor.BLUE + " Dieser Monat: " + ChatColor.GREEN + (timeThisMonth == null ? "-" : MinecleanerStringUtil.timeToString(timeThisMonth, false))); } } } diff --git a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java index e0e307a..7693f80 100644 --- a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java +++ b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java @@ -4,7 +4,7 @@ public class MinecleanerStringUtil { private MinecleanerStringUtil() { } - public static String timeToString(long millis) { + public static String timeToString(long millis, boolean shorten) { int sec = (int) (millis / 1000); int min = sec / 60; int hours = min / 60; @@ -12,19 +12,31 @@ public class MinecleanerStringUtil { min = min % 60; StringBuilder timeString = new StringBuilder(); if (hours > 0) { - timeString.append(hours).append(" Stunden"); + String hoursString = " Stunden"; + if(shorten) { + hoursString = " h"; + } + timeString.append(hours).append(hoursString); } if (min > 0 || !timeString.isEmpty()) { if (!timeString.isEmpty()) { timeString.append(", "); } - timeString.append(min).append(" Minuten"); + String minString = " Minuten"; + if(shorten) { + minString = " min"; + } + timeString.append(min).append(minString); } if (sec > 0 || !timeString.isEmpty()) { if (!timeString.isEmpty()) { timeString.append(" und "); } - timeString.append(sec).append(" Sekunden"); + String secondsString = " Sekunden"; + if(shorten) { + secondsString = " s"; + } + timeString.append(sec).append(secondsString); } return timeString.toString(); } From 3cd55fa3fadc4339fd20873458dc6751f11c58fb Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 6 Apr 2024 19:25:18 +0200 Subject: [PATCH 15/53] fixed time again --- pom.xml | 2 +- .../minecleaner/MinecleanerArena.java | 23 +++++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 6b04810..aac0029 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.lunarakai Minecleaner - 1.1.1 + 1.1.2 jar Minecleaner diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index f37c358..e04a715 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -233,20 +233,23 @@ public class MinecleanerArena { arenaStatus = ArenaStatus.PLAYING; currentGameStartTime = System.currentTimeMillis(); - if((plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0 - || plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) && arenaStatus == ArenaStatus.PLAYING) { - new BukkitRunnable() { - @Override + new BukkitRunnable() { + @Override public void run() { - if(arenaStatus == ArenaStatus.PLAYING && currentPlayer != null) { + if(arenaStatus == ArenaStatus.PLAYING && currentPlayer != null) { + if(!currentMinecleanerGame.gameover) { ingameTime++; - updateIngameInfoTexts(); - } else { - cancel(); } + if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0 + || plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { + updateIngameInfoTexts(); + } + } else { + cancel(); } - }.runTaskTimer(plugin, 1L, 1L); - } + } + }.runTaskTimer(plugin, 1L, 1L); + } public void addJoiningPlayer(Player player) { From 9ad56fe06c9530ead9cf964e814d44204cc0f2e2 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 6 Apr 2024 19:36:09 +0200 Subject: [PATCH 16/53] :) --- pom.xml | 2 +- src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java | 2 +- .../java/de/lunarakai/minecleaner/MinecleanerListener.java | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index aac0029..6525cb2 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.lunarakai Minecleaner - 1.1.2 + 1.1.2b jar Minecleaner diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index e04a715..d4dc7cf 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -380,7 +380,7 @@ public class MinecleanerArena { }); } - private void updateIngameInfoTexts() { + public void updateIngameInfoTexts() { String timer = ""; if(plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { timer = ChatColor.GOLD + " Zeit: " + MinecleanerStringUtil.timeToString((ingameTime/20)*1000, true) + " "; diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 7e9bb24..74353a5 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -145,6 +145,9 @@ public class MinecleanerListener implements Listener { 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)); } From b5fdf5bfec664ce01d33be3b45f010a73837c667 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Tue, 9 Apr 2024 08:07:29 +0200 Subject: [PATCH 17/53] displayed plugin name is now shown for stats of other players --- pom.xml | 2 +- .../java/de/lunarakai/minecleaner/commands/StatsCommand.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 6525cb2..ae27f95 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.lunarakai Minecleaner - 1.1.2b + 1.1.3 jar Minecleaner diff --git a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java index ab2e3b4..dfacd9e 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java @@ -54,7 +54,7 @@ public class StatsCommand extends SubCommand { if(playerName == null) { sender.sendMessage(ChatColor.AQUA + "Deine " + plugin.getDisplayedPluginName() + " Statistik:"); } else { - sender.sendMessage(ChatColor.AQUA + "Minecleaner-Statistik von " + data.getPlayerName() + ":"); + sender.sendMessage(ChatColor.AQUA + plugin.getDisplayedPluginName() + "-Statistik von " + data.getPlayerName() + ":"); } 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() + ")"); From 0865e344f91da7eb5d0cd8f9889aa65bd10f87d0 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Tue, 9 Apr 2024 08:17:44 +0200 Subject: [PATCH 18/53] add git commit id to version --- pom.xml | 14 ++++++++++++++ src/main/resources/plugin.yml | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ae27f95..7b9e7bf 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,20 @@ ${project.name} + + io.github.git-commit-id + git-commit-id-maven-plugin + 8.0.2 + + + get-the-git-infos + + revision + + initialize + + + org.apache.maven.plugins maven-compiler-plugin diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 6d24cda..c5d49ad 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Minecleaner -version: '${project.version}' +version: '${project.version}-${git.commit.id.abbrev}' author: LunarAkai website: https://github.com/LunarAkai/Minecleaner main: de.lunarakai.minecleaner.MinecleanerPlugin From bf13f7e2b9e5295a9cf889c43d57cba21cccf9b8 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 13 Apr 2024 15:45:34 +0200 Subject: [PATCH 19/53] plugin should now work without cubesidestatistics (if the server doesnt have the plugin) --- pom.xml | 2 +- .../minecleaner/MinecleanerArena.java | 24 ++- .../minecleaner/MinecleanerManager.java | 168 ++++++++++-------- .../minecleaner/MinecleanerPlugin.java | 20 ++- 4 files changed, 125 insertions(+), 89 deletions(-) diff --git a/pom.xml b/pom.xml index 7b9e7bf..2012184 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.lunarakai Minecleaner - 1.1.3 + 1.1.4 jar Minecleaner diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index d4dc7cf..e836219 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -240,10 +240,13 @@ public class MinecleanerArena { if(!currentMinecleanerGame.gameover) { ingameTime++; } - if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0 - || plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { - updateIngameInfoTexts(); + if(plugin.isStatisticsEnabled()) { + if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0 + || plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { + updateIngameInfoTexts(); + } } + } else { cancel(); } @@ -382,8 +385,14 @@ public class MinecleanerArena { public void updateIngameInfoTexts() { String timer = ""; - if(plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { - timer = ChatColor.GOLD + " Zeit: " + MinecleanerStringUtil.timeToString((ingameTime/20)*1000, true) + " "; + if(plugin.isStatisticsEnabled()) { + if(plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { + timer = ChatColor.GOLD + " Zeit: " + MinecleanerStringUtil.timeToString((ingameTime/20)*1000, true) + " "; + } + if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0 && plugin.isStatisticsEnabled()) { + String componentActionBar = ChatColor.GREEN + "Flaggen gesetzt: " + flagsPlaced + ChatColor.RED + " Minen insgesamt: " + BoardSize.mineCounter[widthIndex]; + currentPlayer.sendActionBar(Component.text(componentActionBar + " " + timer)); + } } if (textDisplay != null) { @@ -398,10 +407,7 @@ public class MinecleanerArena { textDisplay.text(Component.text(component + newLine + timer + filler)); } - if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0) { - String componentActionBar = ChatColor.GREEN + "Flaggen gesetzt: " + flagsPlaced + ChatColor.RED + " Minen insgesamt: " + BoardSize.mineCounter[widthIndex]; - currentPlayer.sendActionBar(Component.text(componentActionBar + " " + timer)); - } + } public void removeTextDisplay() { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index 6ba5610..bc2681a 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -67,52 +67,63 @@ public class MinecleanerManager { // Settings + if(plugin.isStatisticsEnabled()) { + minecleanerSettingTimerKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings.timer"); + minecleanerSettingTimerKey.setDefault(0); + minecleanerSettingTimerKey.setDisplayName("Timer"); - minecleanerSettingTimerKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings.timer"); - minecleanerSettingTimerKey.setDefault(0); - minecleanerSettingTimerKey.setDisplayName("Timer"); + minecleanerAdditionalDisplaySettingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings.additionaldisplay"); + minecleanerAdditionalDisplaySettingKey.setDefault(0); + minecleanerAdditionalDisplaySettingKey.setDisplayName("Zusätzliche Anzeige in der Action Bar"); - minecleanerAdditionalDisplaySettingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings.additionaldisplay"); - minecleanerAdditionalDisplaySettingKey.setDefault(0); - minecleanerAdditionalDisplaySettingKey.setDisplayName("Zusätzliche Anzeige in der Action Bar"); - - this.settingsInventory = plugin.getServer().createInventory(null, InventoryType.CHEST, - plugin.getDisplayedPluginName() + " Einstellungen"); + this.settingsInventory = plugin.getServer().createInventory(null, InventoryType.CHEST, + plugin.getDisplayedPluginName() + " Einstellungen"); - // Statistics + // Statistics - statisticsWonGamesTotal = plugin.getCubesideStatistics().getStatisticKey("minecleaner.wonGamestotal"); - statisticsWonGamesTotal.setIsMonthlyStats(true); - statisticsWonGamesTotal.setDisplayName("Runden gewonnen"); - - statisticsPointsAcquired = plugin.getCubesideStatistics().getStatisticKey("minecleaner.pointstotal"); - statisticsPointsAcquired.setIsMonthlyStats(true); - statisticsPointsAcquired.setDisplayName("Punkte erspielt"); + statisticsWonGamesTotal = plugin.getCubesideStatistics().getStatisticKey("minecleaner.wonGamestotal"); + statisticsWonGamesTotal.setIsMonthlyStats(true); + statisticsWonGamesTotal.setDisplayName("Runden gewonnen"); - statisticsGames = new HashMap<>(); - statisticsTimeRecord = new HashMap<>(); - statisticsTotalGamesPlayed = new HashMap<>(); + statisticsPointsAcquired = plugin.getCubesideStatistics().getStatisticKey("minecleaner.pointstotal"); + statisticsPointsAcquired.setIsMonthlyStats(true); + statisticsPointsAcquired.setDisplayName("Punkte erspielt"); - for(Entry e : this.sizes.entrySet()) { - String sizeDisplay = e.getValue(); - StatisticKey s = plugin.getCubesideStatistics().getStatisticKey("minecleaner.wongames.boardsize." + e.getKey()); - s.setIsMonthlyStats(true); - s.setDisplayName("Runden gewonnen auf Spielfeldgröße " + sizeDisplay); - statisticsGames.put(e.getKey(), s); + statisticsGames = new HashMap<>(); + statisticsTimeRecord = new HashMap<>(); + statisticsTotalGamesPlayed = new HashMap<>(); - s = plugin.getCubesideStatistics().getStatisticKey("minecleaner.gamestotal.boardsize." + e.getKey()); - s.setIsMonthlyStats(true); - s.setDisplayName("Runden gespielt auf Spielfeldgröße " + sizeDisplay ); - statisticsTotalGamesPlayed.put(e.getKey(), s); + for(Entry e : this.sizes.entrySet()) { + String sizeDisplay = e.getValue(); + StatisticKey s = plugin.getCubesideStatistics().getStatisticKey("minecleaner.wongames.boardsize." + e.getKey()); + s.setIsMonthlyStats(true); + s.setDisplayName("Runden gewonnen auf Spielfeldgröße " + sizeDisplay); + statisticsGames.put(e.getKey(), s); - s = plugin.getCubesideStatistics().getStatisticKey("minecleaner.timerecord." + e.getKey()); - s.setIsMonthlyStats(true); - s.setDisplayName("Bestzeit bei Größe " + sizeDisplay); - statisticsTimeRecord.put(e.getKey(), s); + s = plugin.getCubesideStatistics().getStatisticKey("minecleaner.gamestotal.boardsize." + e.getKey()); + s.setIsMonthlyStats(true); + s.setDisplayName("Runden gespielt auf Spielfeldgröße " + sizeDisplay ); + statisticsTotalGamesPlayed.put(e.getKey(), s); + + s = plugin.getCubesideStatistics().getStatisticKey("minecleaner.timerecord." + e.getKey()); + s.setIsMonthlyStats(true); + s.setDisplayName("Bestzeit bei Größe " + sizeDisplay); + statisticsTimeRecord.put(e.getKey(), s); + } + } else { + this.statisticsWonGamesTotal = null; + this.statisticsPointsAcquired = null; + this.statisticsGames = null; + this.statisticsTimeRecord = null; + this.statisticsTotalGamesPlayed = null; } + + + } - + + public void joinArena(Player player, MinecleanerArena arena) { if (!player.hasPermission(MinecleanerPlugin.PERMISSION_PLAY)) { return; @@ -144,16 +155,19 @@ public class MinecleanerManager { public void handleGameover(Player player, MinecleanerArena arena, boolean isSuccessfullyCleared) { World world = player.getWorld(); - PlayerStatistics ps = plugin.getCubesideStatistics().getStatistics(player.getUniqueId()); - StatisticKey sg; - sg = statisticsTotalGamesPlayed.get(arena.getWidthIndex()); + PlayerStatistics ps = null; + StatisticKey sg = null; + if(plugin.isStatisticsEnabled()) { + ps = plugin.getCubesideStatistics().getStatistics(player.getUniqueId()); + sg = statisticsTotalGamesPlayed.get(arena.getWidthIndex()); + } if(!isSuccessfullyCleared) { world.playSound(player.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); player.sendMessage(ChatColor.YELLOW + "Game Over! Du konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!"); arena.showMines(); - if(sg != null) { + if(sg != null && plugin.isStatisticsEnabled()) { ps.increaseScore(sg, 1); } @@ -170,48 +184,52 @@ public class MinecleanerManager { world.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f); - if(sg != null) { + if(sg != null && plugin.isStatisticsEnabled()) { ps.increaseScore(sg, 1); } - ps.increaseScore(statisticsWonGamesTotal, 1); + if(plugin.isStatisticsEnabled()) { + ps.increaseScore(statisticsWonGamesTotal, 1); - sg = statisticsGames.get(arena.getWidthIndex()); - if(sg != null) { - ps.increaseScore(sg, 1); - } - sg = statisticsTimeRecord.get(arena.getWidthIndex()); - if(sg != null) { - ps.minScore(sg, millis, isUpdated -> { - if(isUpdated != null && isUpdated) { - player.sendMessage(ChatColor.GOLD + "Herzlichen Glückwunsch! Du hast eine neue Bestzeit erreicht! " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) ); - } 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!"); + sg = statisticsGames.get(arena.getWidthIndex()); + if(sg != null) { + ps.increaseScore(sg, 1); + } + sg = statisticsTimeRecord.get(arena.getWidthIndex()); + if(sg != null) { + ps.minScore(sg, millis, isUpdated -> { + if(isUpdated != null && isUpdated) { + player.sendMessage(ChatColor.GOLD + "Herzlichen Glückwunsch! Du hast eine neue Bestzeit erreicht! " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) ); + } 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!"); + } + }); + } + + int wIndex = arena.getWidthIndex(); + switch (wIndex) { + case 0: { + ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.small")); + break; + } + case 1: { + ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.medium")); + break; + } + case 2: { + ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.large")); + break; + } + case 3: { + ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.expert")); + } + default: { + ps.increaseScore(statisticsPointsAcquired, 0); + break; } - }); - } - - int wIndex = arena.getWidthIndex(); - switch (wIndex) { - case 0: { - ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.small")); - break; - } - case 1: { - ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.medium")); - break; - } - case 2: { - ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.large")); - break; - } - case 3: { - ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.expert")); - } - default: { - ps.increaseScore(statisticsPointsAcquired, 0); - break; } + } else { + player.sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!"); } Bukkit.getScheduler().runTaskLater(plugin, () -> { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java index 672311f..69efe8f 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java @@ -12,6 +12,8 @@ import de.lunarakai.minecleaner.commands.InfoCommand; import de.lunarakai.minecleaner.commands.ListCommand; import de.lunarakai.minecleaner.commands.StatsCommand; +import java.util.logging.Level; + public final class MinecleanerPlugin extends JavaPlugin { public static final String PERMISSION_PLAY = "minecleaner.play"; public static final String PERMISSION_ADMIN = "minecleaner.admin"; @@ -29,7 +31,11 @@ public final class MinecleanerPlugin extends JavaPlugin { public void onLateEnable() { playerUUIDCache = (PlayerUUIDCache) getServer().getPluginManager().getPlugin("PlayerUUIDCache"); - cubesideStatistics = getServer().getServicesManager().load(CubesideStatisticsAPI.class); + if(getServer().getPluginManager().getPlugin("CubesideStatistics") != null) { + cubesideStatistics = getServer().getServicesManager().load(CubesideStatisticsAPI.class); + } else { + this.getLogger().log(Level.WARNING, "Cubeside Statistics not found. No Statistics will be available"); + } arenaList = new ArenaList(this); arenaList.load(); @@ -41,10 +47,13 @@ public final class MinecleanerPlugin extends JavaPlugin { minecleanerCommand.addCommandMapping(new CreateCommand(this), "create"); minecleanerCommand.addCommandMapping(new DeleteCommand(this), "delete"); minecleanerCommand.addCommandMapping(new ListCommand(this), "list"); - minecleanerCommand.addCommandMapping(new StatsCommand(this), "stats"); - minecleanerCommand.addCommandMapping(new DeletePlayerScoreCommand(this), "deleteplayerscores"); minecleanerCommand.addCommandMapping(new InfoCommand(this), "info"); - minecleanerCommand.addCommandMapping(new SettingsCommand(this), "settings"); + + if(isStatisticsEnabled()) { + minecleanerCommand.addCommandMapping(new SettingsCommand(this), "settings"); + minecleanerCommand.addCommandMapping(new StatsCommand(this), "stats"); + minecleanerCommand.addCommandMapping(new DeletePlayerScoreCommand(this), "deleteplayerscores"); + } } @Override @@ -62,6 +71,9 @@ public final class MinecleanerPlugin extends JavaPlugin { return minecleanerManager; } + public boolean isStatisticsEnabled() { + return cubesideStatistics != null; + } public CubesideStatisticsAPI getCubesideStatistics() { return cubesideStatistics; } From 4ab4a1bec4815be5803c7eb05494bad38e817477 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sun, 14 Apr 2024 20:59:46 +0200 Subject: [PATCH 20/53] dependencies & stuff --- .../minecleaner/MinecleanerArena.java | 63 +++++++++++++++++++ .../minecleaner/MinecleanerPlugin.java | 7 ++- src/main/resources/plugin.yml | 3 + 3 files changed, 72 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index e836219..7beda46 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -10,6 +10,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.UUID; +import java.util.logging.Level; + import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; import net.md_5.bungee.api.ChatColor; @@ -18,6 +20,7 @@ import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.ConfigurationSection; @@ -270,6 +273,9 @@ public class MinecleanerArena { this.currentPlayer = null; this.currentMinecleanerGame = null; + // load chunk of block -1 and x+1 +// loadBlockChunk(); + for (int x = 0; x < sizeWidth; x++) { for (int y = 0; y < sizeHeight; y++) { setDiplayBlock(x, y, MinecleanerHeads.MINESWEEPER_TILE_UNKNOWN, true); @@ -279,6 +285,63 @@ public class MinecleanerArena { removeTextDisplay(); } +// private void loadBlockChunk() { +// +// BlockFace orientation = getOrientation(); +// Location loc1 = this.getLocation(); +// Location loc2 = this.getLocation(); +// double x; +// double z; +// +// switch (orientation) { +// case NORTH: +// // Block -1: +// // x: +1 +// x = loc1.x() + 3.0; +// loc1 = new Location(loc1.getWorld(), x, loc1.y(), loc1.z()); +// // Block width+1: +// // x: -1; +// x = loc2.x() - (double) getArenaWidth()/4 - 1; +// loc2 = new Location(loc2.getWorld(), x, loc2.y(), loc2.z()); +// break; +// case EAST: +// // Block -1: +// // z: +1 +// z = loc1.z() + 3.0; +// loc1 = new Location(loc2.getWorld(), loc2.x(), loc2.y(), z); +// // Block width+1: +// // z: -1; +// z = loc2.z() - (double) getArenaWidth()/4 - 1; +// loc2 = new Location(loc2.getWorld(), loc2.x(), loc2.y(), z); +// break; +// case SOUTH: +// // Block -1: +// // x: -1 +// x = loc1.x() - 3.0; +// loc1 = new Location(loc1.getWorld(), x, loc1.y(), loc1.z()); +// // Block width+1: +// // x: +1; +// x = loc2.x() + (double) getArenaWidth()/4 + 1; +// loc2 = new Location(loc2.getWorld(), x, loc2.y(), loc2.z()); +// break; +// case WEST: +// // Block -1: +// // z: -1 +// z = loc1.z() - 3.0 ; +// loc1 = new Location(loc2.getWorld(), loc2.x(), loc2.y(), z); +// // Block width+1: +// // z: +1; +// z = loc2.z() + (double) getArenaWidth()/4 - 1; +// loc2 = new Location(loc2.getWorld(), loc2.x(), loc2.y(), z); +// break; +// } +// +// plugin.getLogger().log(Level.WARNING, "Loc1: " + loc1); +// plugin.getLogger().log(Level.WARNING, "Loc2: " + loc2); +// loc1.getWorld().getChunkAt(loc1).load(); +// loc2.getWorld().getChunkAt(loc2).load(); +// } + public void showStartHeads() { int width = BoardSize.boardSizesWidth[widthIndex]; int height = BoardSize.boardSizesHeight[widthIndex]; diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java index 69efe8f..8cd79de 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java @@ -30,7 +30,12 @@ public final class MinecleanerPlugin extends JavaPlugin { } public void onLateEnable() { - playerUUIDCache = (PlayerUUIDCache) getServer().getPluginManager().getPlugin("PlayerUUIDCache"); + if(getServer().getPluginManager().getPlugin("PlayerUUIDCache") != null) { + playerUUIDCache = (PlayerUUIDCache) getServer().getPluginManager().getPlugin("PlayerUUIDCache"); + } else { + this.getLogger().log(Level.WARNING, "PlayerUUIDCache not found."); + } + if(getServer().getPluginManager().getPlugin("CubesideStatistics") != null) { cubesideStatistics = getServer().getServicesManager().load(CubesideStatisticsAPI.class); } else { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index c5d49ad..1ac16a2 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,6 +4,9 @@ author: LunarAkai website: https://github.com/LunarAkai/Minecleaner main: de.lunarakai.minecleaner.MinecleanerPlugin api-version: '1.20' +depend: + - CubesideUtils +softdepend: [CubesideSettings, PlayerUUIDCache] commands: minecleaner: description: main command From 482fc1e22de6b4e5bf4bd8f13001c41608ac8316 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Thu, 2 May 2024 15:25:27 +0200 Subject: [PATCH 21/53] 1.20.6 + resettime for fields is now customizable --- pom.xml | 4 +- .../minecleaner/MinecleanerListener.java | 64 +++++++++++++++++++ .../minecleaner/MinecleanerManager.java | 53 +++++++++++++-- 3 files changed, 114 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 2012184..1fc0a5c 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.lunarakai Minecleaner - 1.1.4 + 1.1.5 jar Minecleaner @@ -86,7 +86,7 @@ io.papermc.paper paper-api - 1.20.4-R0.1-SNAPSHOT + 1.20.6-R0.1-SNAPSHOT provided diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 74353a5..46a1ff1 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -153,6 +153,70 @@ public class MinecleanerListener implements Listener { } break; } + case 16: { + switch (plugin.getManager().getSettingsValue("resettime", player)) { + case 1: { + plugin.getManager().updateSettingsValue("resettime", 2, player); + player.closeInventory(); + player.openInventory(plugin.getManager().showSettingsInventory(player)); + break; + } + case 2: { + plugin.getManager().updateSettingsValue("resettime", 3, player); + player.closeInventory(); + player.openInventory(plugin.getManager().showSettingsInventory(player)); + break; + } + case 3: { + plugin.getManager().updateSettingsValue("resettime", 4, player); + player.closeInventory(); + player.openInventory(plugin.getManager().showSettingsInventory(player)); + break; + } + case 4: { + plugin.getManager().updateSettingsValue("resettime", 5, player); + player.closeInventory(); + player.openInventory(plugin.getManager().showSettingsInventory(player)); + break; + } + case 5: { + plugin.getManager().updateSettingsValue("resettime", 6, player); + player.closeInventory(); + player.openInventory(plugin.getManager().showSettingsInventory(player)); + break; + } + case 6: { + plugin.getManager().updateSettingsValue("resettime", 7, player); + player.closeInventory(); + player.openInventory(plugin.getManager().showSettingsInventory(player)); + break; + } + case 7: { + plugin.getManager().updateSettingsValue("resettime", 8, player); + player.closeInventory(); + player.openInventory(plugin.getManager().showSettingsInventory(player)); + break; + } + case 8: { + plugin.getManager().updateSettingsValue("resettime", 9, player); + player.closeInventory(); + player.openInventory(plugin.getManager().showSettingsInventory(player)); + break; + } + case 9: { + plugin.getManager().updateSettingsValue("resettime", 10, player); + player.closeInventory(); + player.openInventory(plugin.getManager().showSettingsInventory(player)); + break; + } + case 10: { + plugin.getManager().updateSettingsValue("resettime", 1, player); + player.closeInventory(); + player.openInventory(plugin.getManager().showSettingsInventory(player)); + break; + } + } + } default: { break; } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index bc2681a..f3cb3a5 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -14,6 +14,7 @@ import org.bukkit.OfflinePlayer; import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; @@ -49,6 +50,7 @@ public class MinecleanerManager { private Inventory settingsInventory; private SettingKey minecleanerSettingTimerKey; private SettingKey minecleanerAdditionalDisplaySettingKey; + private SettingKey minecleanerResetTimerSettingKey; public MinecleanerManager(MinecleanerPlugin plugin) { this.plugin = plugin; @@ -76,6 +78,10 @@ public class MinecleanerManager { minecleanerAdditionalDisplaySettingKey.setDefault(0); minecleanerAdditionalDisplaySettingKey.setDisplayName("Zusätzliche Anzeige in der Action Bar"); + minecleanerResetTimerSettingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings.resettime"); + minecleanerResetTimerSettingKey.setDefault(5); + minecleanerResetTimerSettingKey.setDisplayName("Dauer die das Spielfeld für das Zurücksetzen brauchen soll"); + this.settingsInventory = plugin.getServer().createInventory(null, InventoryType.CHEST, plugin.getDisplayedPluginName() + " Einstellungen"); @@ -118,9 +124,6 @@ public class MinecleanerManager { this.statisticsTimeRecord = null; this.statisticsTotalGamesPlayed = null; } - - - } @@ -177,7 +180,7 @@ public class MinecleanerManager { } else { leaveArena(player, false); } - }, 100L); + }, plugin.getManager().getSettingsValue("resettime", player) * 20L); return; } int millis = (int) (System.currentTimeMillis() - arena.getCurrentGameStartTime()); @@ -238,7 +241,7 @@ public class MinecleanerManager { } else { leaveArena(player, false); } - }, 100L); + }, plugin.getManager().getSettingsValue("resettime", player) * 20L); } public void clearAllArenas() { @@ -367,6 +370,9 @@ public class MinecleanerManager { public Inventory showSettingsInventory(Player player) { int current = getSettingsValue("additionaldisplay", player); + settingsInventory.setItem(10, + ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.BARRIER), ChatColor.RED + "Platzhalter"))); + if(current == 0) { settingsInventory.setItem(12, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.NAME_TAG), ChatColor.RED + "Zusätzliche Anzeige in der Action Bar"))); @@ -386,6 +392,41 @@ public class MinecleanerManager { ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CLOCK), ChatColor.GREEN + "Timer anzeigen"))); } + current = getSettingsValue("resettime", player); + + switch (current) { + case 1: + settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "1s"))); + break; + case 2: + settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "2s"))); + break; + case 3: + settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "3s"))); + break; + case 4: + settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "4s"))); + break; + case 5: + settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "5s"))); + break; + case 6: + settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "6s"))); + break; + case 7: + settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "7s"))); + break; + case 8: + settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "8s"))); + break; + case 9: + settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "9s"))); + break; + case 10: + settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "10s"))); + break; + } + return settingsInventory; } @@ -421,4 +462,6 @@ public class MinecleanerManager { public SettingKey getMinecleanerAdditionalDisplaySettingKey() { return minecleanerAdditionalDisplaySettingKey; } + + public SettingKey getMinecleanerResetTimeSettingKey() {return minecleanerResetTimerSettingKey; } } From d4a6b64ae5321b4a124b5b7e4e250a78131b664e Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Thu, 2 May 2024 20:00:19 +0200 Subject: [PATCH 22/53] manual reset on left click --- .../minecleaner/MinecleanerArena.java | 5 ++ .../minecleaner/MinecleanerListener.java | 67 ++++++++++--------- .../minecleaner/MinecleanerManager.java | 21 +++--- 3 files changed, 51 insertions(+), 42 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index 7beda46..6101635 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -503,6 +503,7 @@ public class MinecleanerArena { currentMinecleanerGame.flag(x, y); if (currentMinecleanerGame.gameover) { + arenaStatus = ArenaStatus.COMPLETED; plugin.getManager().handleGameover(player, this, true); } if (cell.isFlagged() == true) { @@ -534,6 +535,7 @@ public class MinecleanerArena { setBlockForCellType(x, y, cell); if (currentMinecleanerGame.gameover) { + arenaStatus = ArenaStatus.COMPLETED; plugin.getManager().handleGameover(player, this, !(cell.isRevealed() && cell.isExploded())); } else { updateIngameInfoTexts(); @@ -723,10 +725,13 @@ public class MinecleanerArena { return currentGameStartTime; } + public Game getCurrentMinecleanerGame() { return currentMinecleanerGame; } + public int getWidthIndex() { return widthIndex; } + private int getRotationYaw() { return switch (orientation) { case EAST -> 90; diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 46a1ff1..8682976 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -38,48 +38,51 @@ public class MinecleanerListener implements Listener { if(arena != null) { e.setCancelled(true); MinecleanerArena arenaClicked = plugin.getArenaList().getArenaAtBlock(block); - if(arenaClicked == arena && arena.getArenaStatus() == ArenaStatus.PLAYING) { - int d0x = arena.getOrientation().getModX(); - int d0z = arena.getOrientation().getModZ(); - int d1x = -d0z; - int d1z = d0x; + boolean hasRightClicked = false; + if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { + hasRightClicked = true; + } + if(!arenaClicked.getCurrentMinecleanerGame().gameover) { + if(arenaClicked == arena && arena.getArenaStatus() == ArenaStatus.PLAYING) { + int d0x = arena.getOrientation().getModX(); + int d0z = arena.getOrientation().getModZ(); + int d1x = -d0z; + int d1z = d0x; - if (e.getBlockFace() == arena.getOrientation()) { + if (e.getBlockFace() == arena.getOrientation()) { - Player player = e.getPlayer(); - RayTraceResult r2 = player.rayTraceBlocks(36.0); + Player player = e.getPlayer(); + RayTraceResult r2 = player.rayTraceBlocks(36.0); - if(r2 != null) { - Vector hitPos = r2.getHitPosition(); - Vector substract = new Vector(0.5, 0.5, 0.5); + if(r2 != null) { + Vector hitPos = r2.getHitPosition(); + Vector substract = new Vector(0.5, 0.5, 0.5); - Location loc = hitPos.subtract(arena.getLocation().toVector()).subtract(substract).toLocation(player.getWorld()); //(0.5, 0.5, 0.5); // substract 0.5, 0.5, 0.5 - double lx = loc.getX(); - double ly = loc.getY(); - double lz = loc.getZ(); - double dy = ly + 1.5; - double dz = -d1x * lx - d1z * lz + 1.5; + Location loc = hitPos.subtract(arena.getLocation().toVector()).subtract(substract).toLocation(player.getWorld()); //(0.5, 0.5, 0.5); // substract 0.5, 0.5, 0.5 + double lx = loc.getX(); + double ly = loc.getY(); + double lz = loc.getZ(); + double dy = ly + 1.5; + double dz = -d1x * lx - d1z * lz + 1.5; - double blockx = (dy / 3.0) * 9.0; - double blockz = (dz / 3.0) * 9.0; + double blockx = (dy / 3.0) * 9.0; + double blockz = (dz / 3.0) * 9.0; - int blockxInt = (int) blockx; - int blockzInt = (int) blockz; - blockx -= blockxInt; - blockz -= blockzInt; + int blockxInt = (int) blockx; + int blockzInt = (int) blockz; + blockx -= blockxInt; + blockz -= blockzInt; - boolean hasRightClicked = false; - if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { - hasRightClicked = true; + if(blockzInt < arena.getArenaWidth() && blockxInt < arenaClicked.getArenaHeight()) { + plugin.getManager().handleFieldClick(e.getPlayer(), blockzInt, blockxInt, hasRightClicked); + } + //player.sendMessage("Arena click! " + blockxInt + " " + blockzInt + " Right Clicked: " + hasRightClicked); } - - if(blockzInt < arena.getArenaWidth() && blockxInt < arenaClicked.getArenaHeight()) { - plugin.getManager().handleFieldClick(e.getPlayer(), blockzInt, blockxInt, hasRightClicked); - } - //player.sendMessage("Arena click! " + blockxInt + " " + blockzInt + " Right Clicked: " + hasRightClicked); - } } + } else if(arenaClicked.hasPlayer() && arenaClicked.getArenaStatus() == ArenaStatus.COMPLETED && !hasRightClicked){ + plugin.getManager().getSchedulerGameOver().cancel(); + plugin.getManager().leaveArena(arenaClicked.getCurrentPlayer(), false); } } else { arena = plugin.getArenaList().getArenaAtBlock(block); diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index f3cb3a5..071e0fd 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -5,7 +5,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map.Entry; -import java.util.Set; import java.util.UUID; import java.util.function.Consumer; import org.bukkit.Bukkit; @@ -13,12 +12,11 @@ import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.Sound; import org.bukkit.World; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitTask; import org.jetbrains.annotations.NotNull; import com.google.common.base.Preconditions; import de.iani.cubesidestats.api.PlayerStatistics; @@ -37,6 +35,7 @@ public class MinecleanerManager { private final MinecleanerPlugin plugin; private final Inventory confirmPlayingInventory; private final HashMap sizes; + public BukkitTask schedulerGameOver; // Statistics private final StatisticKey statisticsWonGamesTotal; @@ -174,12 +173,12 @@ public class MinecleanerManager { ps.increaseScore(sg, 1); } - Bukkit.getScheduler().runTaskLater(plugin, () -> { - if(arena.getCurrentPlayer() == null) { - arena.removePlayer(); - } else { + schedulerGameOver = Bukkit.getScheduler().runTaskLater(plugin, () -> { + if (arena.getCurrentPlayer() == null) { + arena.removePlayer(); + } else { leaveArena(player, false); - } + } }, plugin.getManager().getSettingsValue("resettime", player) * 20L); return; } @@ -235,7 +234,7 @@ public class MinecleanerManager { player.sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!"); } - Bukkit.getScheduler().runTaskLater(plugin, () -> { + schedulerGameOver = Bukkit.getScheduler().runTaskLater(plugin, () -> { if(arena.getCurrentPlayer() == null) { arena.removePlayer(); } else { @@ -463,5 +462,7 @@ public class MinecleanerManager { return minecleanerAdditionalDisplaySettingKey; } - public SettingKey getMinecleanerResetTimeSettingKey() {return minecleanerResetTimerSettingKey; } + public SettingKey getMinecleanerResetTimeSettingKey() {return minecleanerResetTimerSettingKey; } + + public BukkitTask getSchedulerGameOver() { return schedulerGameOver; } } From 4e283a77b1a25c8e608a06cc6e8b03ada09386e9 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Fri, 3 May 2024 19:38:53 +0200 Subject: [PATCH 23/53] players can manually activate manual reset --- .../minecleaner/MinecleanerArena.java | 19 ++++++++++++------- .../minecleaner/MinecleanerListener.java | 14 +++++++++++++- .../minecleaner/MinecleanerManager.java | 18 +++++++++++++++--- 3 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index 6101635..85dc1d6 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -10,17 +10,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.UUID; -import java.util.logging.Level; 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.ChatMessageType; -import net.md_5.bungee.api.chat.BaseComponent; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; -import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.ConfigurationSection; @@ -503,7 +499,10 @@ public class MinecleanerArena { currentMinecleanerGame.flag(x, y); if (currentMinecleanerGame.gameover) { - arenaStatus = ArenaStatus.COMPLETED; + Bukkit.getScheduler().runTaskLater(plugin, () -> { + arenaStatus = ArenaStatus.COMPLETED; + }, 5L); + plugin.getManager().handleGameover(player, this, true); } if (cell.isFlagged() == true) { @@ -535,7 +534,9 @@ public class MinecleanerArena { setBlockForCellType(x, y, cell); if (currentMinecleanerGame.gameover) { - arenaStatus = ArenaStatus.COMPLETED; + Bukkit.getScheduler().runTaskLater(plugin, () -> { + arenaStatus = ArenaStatus.COMPLETED; + }, 5L); plugin.getManager().handleGameover(player, this, !(cell.isRevealed() && cell.isExploded())); } else { updateIngameInfoTexts(); @@ -731,6 +732,9 @@ public class MinecleanerArena { return widthIndex; } + public void setArenaStaus(ArenaStatus status) { + this.arenaStatus = status; + } private int getRotationYaw() { return switch (orientation) { @@ -740,4 +744,5 @@ public class MinecleanerArena { default -> 0; }; } + } \ No newline at end of file diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 8682976..8842c98 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -80,7 +80,7 @@ public class MinecleanerListener implements Listener { } } } - } else if(arenaClicked.hasPlayer() && arenaClicked.getArenaStatus() == ArenaStatus.COMPLETED && !hasRightClicked){ + } else if(arenaClicked.hasPlayer() && arenaClicked.getArenaStatus() == ArenaStatus.COMPLETED && !hasRightClicked && (plugin.getManager().getSettingsValue("allowmanualreset", e.getPlayer()) == 1)) { plugin.getManager().getSchedulerGameOver().cancel(); plugin.getManager().leaveArena(arenaClicked.getCurrentPlayer(), false); } @@ -129,6 +129,18 @@ public class MinecleanerListener implements Listener { e.setCancelled(true); int slot = e.getRawSlot(); switch (slot) { + case 10: { + if(plugin.getManager().getSettingsValue("allowmanualreset", player) == 0) { + plugin.getManager().updateSettingsValue("allowmanualreset", 1, player); + player.closeInventory(); + player.openInventory(plugin.getManager().showSettingsInventory(player)); + } else { + plugin.getManager().updateSettingsValue("allowmanualreset", 0, player); + player.closeInventory(); + player.openInventory(plugin.getManager().showSettingsInventory(player)); + } + break; + } case 12: { if(plugin.getManager().getSettingsValue("additionaldisplay", player) == 0) { plugin.getManager().updateSettingsValue("additionaldisplay", 1, player); diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index 071e0fd..5ab3c04 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -50,6 +50,7 @@ public class MinecleanerManager { private SettingKey minecleanerSettingTimerKey; private SettingKey minecleanerAdditionalDisplaySettingKey; private SettingKey minecleanerResetTimerSettingKey; + private SettingKey minecleanerAllowManualResetSettingKey; public MinecleanerManager(MinecleanerPlugin plugin) { this.plugin = plugin; @@ -81,6 +82,10 @@ public class MinecleanerManager { minecleanerResetTimerSettingKey.setDefault(5); minecleanerResetTimerSettingKey.setDisplayName("Dauer die das Spielfeld für das Zurücksetzen brauchen soll"); + minecleanerAllowManualResetSettingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings.allowmanualreset"); + minecleanerAllowManualResetSettingKey.setDefault(0); + minecleanerAllowManualResetSettingKey.setDisplayName("Erlaube das manuelle Zurücksetzen des Spielfeldes"); + this.settingsInventory = plugin.getServer().createInventory(null, InventoryType.CHEST, plugin.getDisplayedPluginName() + " Einstellungen"); @@ -139,6 +144,7 @@ public class MinecleanerManager { public void leaveArena(Player player, boolean message) { MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); + arena.setArenaStaus(ArenaStatus.INACTIVE); Preconditions.checkArgument(arena != null, "player is in no arena"); arena.removePlayer(); plugin.getArenaList().setArenaForPlayer(player, null); @@ -367,11 +373,17 @@ public class MinecleanerManager { } public Inventory showSettingsInventory(Player player) { - int current = getSettingsValue("additionaldisplay", player); + int current = getSettingsValue("allowmanualreset", player); - settingsInventory.setItem(10, - ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.BARRIER), ChatColor.RED + "Platzhalter"))); + if(current == 0) { + settingsInventory.setItem(10, + ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.SHEARS), ChatColor.RED + "Manuelles Resetten deaktiviert"))); + } else { + settingsInventory.setItem(10, + ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.SHEARS), ChatColor.GREEN + "Manuelles Resetten aktiviert"))); + } + 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"))); From 36e96a50e8b1c2853dab3e4268def6677048665d Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Fri, 3 May 2024 22:45:25 +0200 Subject: [PATCH 24/53] pls fix issues #3, #4, #5 and #6 or i might become a goose farmer /s --- .../minecleaner/MinecleanerListener.java | 15 ++++++++++----- .../lunarakai/minecleaner/MinecleanerManager.java | 9 +++++---- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 8842c98..bf687ec 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -38,12 +38,18 @@ public class MinecleanerListener implements Listener { if(arena != null) { e.setCancelled(true); MinecleanerArena arenaClicked = plugin.getArenaList().getArenaAtBlock(block); + + if(arenaClicked != arena) { + return; + } + boolean hasRightClicked = false; if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { hasRightClicked = true; } - if(!arenaClicked.getCurrentMinecleanerGame().gameover) { - if(arenaClicked == arena && arena.getArenaStatus() == ArenaStatus.PLAYING) { + + if(!arena.getCurrentMinecleanerGame().gameover && (arena.getArenaStatus() == ArenaStatus.PLAYING || arena.getArenaStatus() == ArenaStatus.COMPLETED)) { + if(arena.getArenaStatus() == ArenaStatus.PLAYING) { int d0x = arena.getOrientation().getModX(); int d0z = arena.getOrientation().getModZ(); int d1x = -d0z; @@ -73,14 +79,14 @@ public class MinecleanerListener implements Listener { blockx -= blockxInt; blockz -= blockzInt; - if(blockzInt < arena.getArenaWidth() && blockxInt < arenaClicked.getArenaHeight()) { + if(blockzInt < arena.getArenaWidth() && blockxInt < arena.getArenaHeight()) { plugin.getManager().handleFieldClick(e.getPlayer(), blockzInt, blockxInt, hasRightClicked); } //player.sendMessage("Arena click! " + blockxInt + " " + blockzInt + " Right Clicked: " + hasRightClicked); } } } - } else if(arenaClicked.hasPlayer() && arenaClicked.getArenaStatus() == ArenaStatus.COMPLETED && !hasRightClicked && (plugin.getManager().getSettingsValue("allowmanualreset", e.getPlayer()) == 1)) { + } else if(arena.hasPlayer() && arena.getArenaStatus() == ArenaStatus.COMPLETED && !hasRightClicked && (plugin.getManager().getSettingsValue("allowmanualreset", e.getPlayer()) == 1)) { plugin.getManager().getSchedulerGameOver().cancel(); plugin.getManager().leaveArena(arenaClicked.getCurrentPlayer(), false); } @@ -126,7 +132,6 @@ public class MinecleanerListener implements Listener { } } if(e.getInventory().equals(plugin.getManager().getSettingsInventory())) { - e.setCancelled(true); int slot = e.getRawSlot(); switch (slot) { case 10: { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index 5ab3c04..b6c4a7e 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -146,6 +146,7 @@ public class MinecleanerManager { MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); arena.setArenaStaus(ArenaStatus.INACTIVE); Preconditions.checkArgument(arena != null, "player is in no arena"); + player.closeInventory(); arena.removePlayer(); plugin.getArenaList().setArenaForPlayer(player, null); if(message) { @@ -386,10 +387,10 @@ public class MinecleanerManager { 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"))); + ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.NAME_TAG), ChatColor.RED + "Zusätzliche Anzeige in der Action Bar deaktiviert"))); } else { settingsInventory.setItem(12, - ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.NAME_TAG), ChatColor.GREEN + "Zusätzliche Anzeige in der Action Bar"))); + ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.NAME_TAG), ChatColor.GREEN + "Zusätzliche Anzeige in der Action Bar aktiviert"))); } @@ -397,10 +398,10 @@ public class MinecleanerManager { if(current == 0) { settingsInventory.setItem(14, - ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CLOCK), ChatColor.RED + "Timer anzeigen"))); + ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CLOCK), ChatColor.RED + "Timer wird nicht angezeigt"))); } else { settingsInventory.setItem(14, - ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CLOCK), ChatColor.GREEN + "Timer anzeigen"))); + ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CLOCK), ChatColor.GREEN + "Timer wird angezeigt"))); } current = getSettingsValue("resettime", player); From b773d0e4900af94bf0b8ef06571a22cae17edf62 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Fri, 3 May 2024 22:55:49 +0200 Subject: [PATCH 25/53] this should fix #4 or i will cry --- .../minecleaner/MinecleanerManager.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index b6c4a7e..ed16168 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -180,13 +180,7 @@ public class MinecleanerManager { ps.increaseScore(sg, 1); } - schedulerGameOver = Bukkit.getScheduler().runTaskLater(plugin, () -> { - if (arena.getCurrentPlayer() == null) { - arena.removePlayer(); - } else { - leaveArena(player, false); - } - }, plugin.getManager().getSettingsValue("resettime", player) * 20L); + scheduleArenaReset(player, arena); return; } int millis = (int) (System.currentTimeMillis() - arena.getCurrentGameStartTime()); @@ -241,11 +235,17 @@ public class MinecleanerManager { player.sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!"); } + scheduleArenaReset(player, arena); + } + + private void scheduleArenaReset(Player player, MinecleanerArena arena) { schedulerGameOver = Bukkit.getScheduler().runTaskLater(plugin, () -> { - if(arena.getCurrentPlayer() == null) { - arena.removePlayer(); - } else { - leaveArena(player, false); + if(arena.getArenaStatus() == ArenaStatus.COMPLETED) { + if (arena.getCurrentPlayer() == null) { + arena.removePlayer(); + } else { + leaveArena(player, false); + } } }, plugin.getManager().getSettingsValue("resettime", player) * 20L); } From e2c84ec436d4ef1de44f2c6efba54d45fc43ea35 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 4 May 2024 23:27:33 +0200 Subject: [PATCH 26/53] readme --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..57e888a --- /dev/null +++ b/README.md @@ -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. From 94d796e09b115fcebf0817f53ff5a797f73d6891 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sun, 5 May 2024 01:23:10 +0200 Subject: [PATCH 27/53] started work on translatable Strings (CreateCommand) --- .../minecleaner/MinecleanerPlugin.java | 22 +++++++++++++++ .../minecleaner/commands/CreateCommand.java | 27 +++++++++++-------- .../utils/MinecleanerComponentUtils.java | 23 ++++++++++++++++ src/main/resources/lang/de_DE.properties | 9 +++++++ src/main/resources/lang/en_US.properties | 9 +++++++ src/main/resources/plugin.yml | 2 +- 6 files changed, 80 insertions(+), 12 deletions(-) create mode 100644 src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java create mode 100644 src/main/resources/lang/de_DE.properties create mode 100644 src/main/resources/lang/en_US.properties diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java index 8cd79de..c91a96e 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java @@ -1,6 +1,10 @@ package de.lunarakai.minecleaner; import de.lunarakai.minecleaner.commands.SettingsCommand; +import net.kyori.adventure.key.Key; +import net.kyori.adventure.translation.GlobalTranslator; +import net.kyori.adventure.translation.TranslationRegistry; +import net.kyori.adventure.util.UTF8ResourceBundleControl; import org.bukkit.plugin.java.JavaPlugin; import de.iani.cubesidestats.api.CubesideStatisticsAPI; import de.iani.cubesideutils.bukkit.commands.CommandRouter; @@ -12,6 +16,8 @@ import de.lunarakai.minecleaner.commands.InfoCommand; import de.lunarakai.minecleaner.commands.ListCommand; import de.lunarakai.minecleaner.commands.StatsCommand; +import java.util.Locale; +import java.util.ResourceBundle; import java.util.logging.Level; public final class MinecleanerPlugin extends JavaPlugin { @@ -26,6 +32,18 @@ public final class MinecleanerPlugin extends JavaPlugin { @Override public void onEnable() { this.saveDefaultConfig(); + + TranslationRegistry registry = TranslationRegistry.create(Key.key("minecleaner:lang")); + + ResourceBundle bundle_en_US = ResourceBundle.getBundle("lang.en_US", Locale.US, UTF8ResourceBundleControl.get()); + registry.registerAll(Locale.US, bundle_en_US, true); + GlobalTranslator.translator().addSource(registry); + + ResourceBundle bundle_de_DE = ResourceBundle.getBundle("lang.de_DE", Locale.GERMAN, UTF8ResourceBundleControl.get()); + registry.registerAll(Locale.GERMAN, bundle_de_DE, true); + + GlobalTranslator.translator().addSource(registry); + getServer().getScheduler().runTask(this, this::onLateEnable); } @@ -42,6 +60,10 @@ public final class MinecleanerPlugin extends JavaPlugin { this.getLogger().log(Level.WARNING, "Cubeside Statistics not found. No Statistics will be available"); } + + + + arenaList = new ArenaList(this); arenaList.load(); diff --git a/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java index 38a2022..865268a 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java @@ -5,6 +5,8 @@ import java.util.Collection; import java.util.List; import java.util.regex.Pattern; import javax.annotation.Nullable; + +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Location; import org.bukkit.block.BlockFace; import org.bukkit.command.Command; @@ -22,6 +24,8 @@ import de.lunarakai.minecleaner.MinecleanerArena; import de.lunarakai.minecleaner.MinecleanerPlugin; import net.md_5.bungee.api.ChatColor; +import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; + public class CreateCommand extends SubCommand { private static final Pattern VALID_ARENA_NAME = Pattern.compile("^[a-z0-9_]+$"); @@ -55,11 +59,11 @@ public class CreateCommand extends SubCommand { } String name = args.getNext().toLowerCase().trim(); 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; } 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; } boolean noblocks = false; @@ -73,13 +77,13 @@ public class CreateCommand extends SubCommand { try { widthindex = Integer.parseInt(arg); } catch(NumberFormatException e) { - sender.sendMessage(ChatColor.DARK_RED + "Kein Valider Arena WidthIndex!"); - sender.sendMessage(ChatColor.DARK_RED + "0 (oder weglassen) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33"); + sender.sendMessage(createLangComponent("arena.widthindex.invalid", NamedTextColor.DARK_RED)); + sender.sendMessage(createLangComponent("arena.widthindex.validOptions", NamedTextColor.DARK_RED)); return true; } if(widthindex > 3) { - sender.sendMessage(ChatColor.DARK_RED + "Arena WidthIndex darf nicht größer als 3 sein"); - sender.sendMessage(ChatColor.DARK_RED + "0 (oder weglassen) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33"); + sender.sendMessage(createLangComponent( "arena.widthindex.toolarge", NamedTextColor.DARK_RED)); + sender.sendMessage(createLangComponent("arena.widthindex.validOptions", NamedTextColor.DARK_RED)); return true; } } else { @@ -94,12 +98,14 @@ public class CreateCommand extends SubCommand { @Nullable RayTraceResult target = player.rayTraceBlocks(6); if(target == null || target.getHitBlock() == null) { - sender.sendMessage(ChatColor.DARK_RED + "Bitte gucke den Block an, der im Zentrum des " + plugin.getDisplayedPluginName() + "-Spielfelds sein soll."); + //sender.sendMessage(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; } BlockFace face = target.getHitBlockFace(); if(face != BlockFace.NORTH && face != BlockFace.WEST && face != BlockFace.EAST && face != BlockFace.SOUTH) { - sender.sendMessage(ChatColor.DARK_RED + "Bitte gucke die Seite des Blockes an, wo das " + plugin.getDisplayedPluginName() + "-Spielfeld erstellt werden soll."); + //sender.sendMessage(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; } location = target.getHitBlock().getLocation(); @@ -107,7 +113,7 @@ public class CreateCommand extends SubCommand { MinecleanerArena newArena = new MinecleanerArena(plugin, name, location, widthindex, orientation); 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; } newArena.generateBlockDisplays(); @@ -115,7 +121,7 @@ public class CreateCommand extends SubCommand { newArena.generateBackgroundBlocks(); } plugin.getArenaList().addArena(newArena); - sender.sendMessage(ChatColor.GREEN + "Die Arena wurde erfolgreich angelegt."); + sender.sendMessage(createLangComponent("arena.create.success", NamedTextColor.GREEN)); return true; } @@ -151,5 +157,4 @@ public class CreateCommand extends SubCommand { } return List.of(); } - } diff --git a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java new file mode 100644 index 0000000..b6127cb --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java @@ -0,0 +1,23 @@ +package de.lunarakai.minecleaner.utils; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +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(); + } + +} diff --git a/src/main/resources/lang/de_DE.properties b/src/main/resources/lang/de_DE.properties new file mode 100644 index 0000000..649270c --- /dev/null +++ b/src/main/resources/lang/de_DE.properties @@ -0,0 +1,9 @@ +arena.name.invalid=Ungueltiger Arenaname. Erlaubt sind Buchstaben, Zahlen und der Unterstrich +arena.name.exists=Eine Arena mit diesem Namen existiert bereits +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 groesser 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. \ No newline at end of file diff --git a/src/main/resources/lang/en_US.properties b/src/main/resources/lang/en_US.properties new file mode 100644 index 0000000..298922c --- /dev/null +++ b/src/main/resources/lang/en_US.properties @@ -0,0 +1,9 @@ +arena.name.invalid=Invalid arena name. Allowed are letters, numbers and the underscore +arena.name.exists=An arena with this name already exists +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. \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 1ac16a2..e72cb94 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Minecleaner -version: '${project.version}-${git.commit.id.abbrev}' +version: '${project.version}-dev-${git.commit.id.abbrev}' author: LunarAkai website: https://github.com/LunarAkai/Minecleaner main: de.lunarakai.minecleaner.MinecleanerPlugin From d0c27ae733c7042cece002e3ded338c794e4ca14 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sun, 5 May 2024 01:28:26 +0200 Subject: [PATCH 28/53] 1.2.0-dev --- pom.xml | 2 +- src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java | 4 ---- src/main/resources/plugin.yml | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 1fc0a5c..39827a2 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.lunarakai Minecleaner - 1.1.5 + 1.2.0-dev jar Minecleaner diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java index c91a96e..232587d 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java @@ -60,10 +60,6 @@ public final class MinecleanerPlugin extends JavaPlugin { this.getLogger().log(Level.WARNING, "Cubeside Statistics not found. No Statistics will be available"); } - - - - arenaList = new ArenaList(this); arenaList.load(); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index e72cb94..1ac16a2 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Minecleaner -version: '${project.version}-dev-${git.commit.id.abbrev}' +version: '${project.version}-${git.commit.id.abbrev}' author: LunarAkai website: https://github.com/LunarAkai/Minecleaner main: de.lunarakai.minecleaner.MinecleanerPlugin From 0f349c3ea09dfc9f1097ea381b9ecba8550e389a Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Thu, 9 May 2024 22:02:48 +0200 Subject: [PATCH 29/53] 1.2.0-dev --- .../commands/DeletePlayerScoreCommand.java | 7 +++++-- .../minecleaner/commands/InfoCommand.java | 14 +++++++++----- .../minecleaner/commands/ListCommand.java | 8 ++++++-- .../minecleaner/commands/StatsCommand.java | 11 ++++++++--- .../utils/MinecleanerComponentUtils.java | 7 +++++++ src/main/resources/lang/de_DE.properties | 17 ++++++++++++++++- src/main/resources/lang/en_US.properties | 17 ++++++++++++++++- 7 files changed, 67 insertions(+), 14 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/commands/DeletePlayerScoreCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/DeletePlayerScoreCommand.java index df54c61..c1bd676 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/DeletePlayerScoreCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/DeletePlayerScoreCommand.java @@ -1,5 +1,6 @@ package de.lunarakai.minecleaner.commands; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import de.iani.cubesideutils.bukkit.commands.SubCommand; @@ -13,6 +14,8 @@ import de.iani.playerUUIDCache.CachedPlayer; import de.lunarakai.minecleaner.MinecleanerPlugin; import net.md_5.bungee.api.ChatColor; +import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; + public class DeletePlayerScoreCommand extends SubCommand{ private final MinecleanerPlugin plugin; @@ -48,10 +51,10 @@ public class DeletePlayerScoreCommand extends SubCommand{ CachedPlayer cachedPlayer = plugin.getPlayerUUIDCache().getPlayer(player); 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()); - 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; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/InfoCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/InfoCommand.java index 26da825..fc588f9 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/InfoCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/InfoCommand.java @@ -1,5 +1,7 @@ package de.lunarakai.minecleaner.commands; +import de.iani.cubesideutils.NamedChatColor; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import de.iani.cubesideutils.bukkit.commands.SubCommand; @@ -12,6 +14,8 @@ import de.iani.cubesideutils.commands.ArgsParser; import de.lunarakai.minecleaner.MinecleanerPlugin; import net.md_5.bungee.api.ChatColor; +import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; + public class InfoCommand extends SubCommand{ MinecleanerPlugin plugin; @@ -38,11 +42,11 @@ public class InfoCommand extends SubCommand{ public boolean onCommand(CommandSender sender, Command arg1, String arg2, String arg3, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { - sender.sendMessage(ChatColor.GREEN + "--- " + ChatColor.AQUA + plugin.getName() + ChatColor.GREEN + " ---"); - sender.sendMessage(ChatColor.AQUA + "Version: " + ChatColor.GREEN + plugin.getPluginMeta().getVersion()); - sender.sendMessage(ChatColor.AQUA + "Entwickelt von: " + ChatColor.GREEN + plugin.getPluginMeta().getAuthors().get(0)); - sender.sendMessage(ChatColor.AQUA + "Website: " + ChatColor.GREEN + plugin.getPluginMeta().getWebsite()); - sender.sendMessage(ChatColor.AQUA + "Lizenz: " + ChatColor.GREEN + "GPL-3.0"); + sender.sendMessage(NamedChatColor.GREEN + "--- " + ChatColor.AQUA + plugin.getName() + ChatColor.GREEN + " ---"); + sender.sendMessage(createLangComponent("minecleaner.info.version", NamedTextColor.AQUA) + ": " + ChatColor.GREEN + plugin.getPluginMeta().getVersion()); + sender.sendMessage(createLangComponent("minecleaner.info.developer", NamedTextColor.AQUA) + ": " + ChatColor.GREEN + plugin.getPluginMeta().getAuthors().get(0)); + sender.sendMessage(createLangComponent("minecleaner.info.website", NamedTextColor.AQUA) + ": " + ChatColor.GREEN + plugin.getPluginMeta().getWebsite()); + sender.sendMessage(createLangComponent("minecleaner.info.license", NamedTextColor.AQUA) + ": " + ChatColor.GREEN + "GPL-3.0"); return true; } } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java index 51b9b96..2b176b4 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java @@ -2,6 +2,8 @@ package de.lunarakai.minecleaner.commands; import java.util.Collection; import java.util.List; + +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -16,6 +18,8 @@ import de.lunarakai.minecleaner.MinecleanerArena; import de.lunarakai.minecleaner.MinecleanerPlugin; import net.md_5.bungee.api.ChatColor; +import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; + public class ListCommand extends SubCommand{ private final MinecleanerPlugin plugin; @@ -41,7 +45,7 @@ public class ListCommand extends SubCommand{ @Override public boolean onCommand(CommandSender sender, Command arg1, String arg2, String commandString, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { - sender.sendMessage(ChatColor.YELLOW + "Angelegte "+ plugin.getDisplayedPluginName() + "-Arenen"); + sender.sendMessage(createLangComponent("arena.list", plugin.getDisplayedPluginName(), NamedTextColor.YELLOW)); boolean any = false; for(MinecleanerArena arena : plugin.getArenaList().getArenas()) { Location location = arena.getLocation(); @@ -49,7 +53,7 @@ public class ListCommand extends SubCommand{ any = true; } if(!any) { - sender.sendMessage(ChatColor.GRAY + " (keine)"); + sender.sendMessage(" " + createLangComponent("arena.list.none", NamedTextColor.GRAY)); } return true; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java index dfacd9e..1b68ae6 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java @@ -2,6 +2,9 @@ package de.lunarakai.minecleaner.commands; import java.util.Map.Entry; import java.util.function.Consumer; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -18,6 +21,8 @@ import de.lunarakai.minecleaner.PlayerStatisticsData; 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 { private final MinecleanerPlugin plugin; @@ -48,13 +53,13 @@ public class StatsCommand extends SubCommand { @Override public void accept(PlayerStatisticsData data) { if(data == null) { - sender.sendMessage(ChatColor.GREEN + "Für Spieler '" + playerName + "' existieren keine Daten."); + sender.sendMessage(createLangComponent("data.player.noData", playerName, NamedTextColor.GREEN)); return; } 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 { - 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() + ")"); diff --git a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java index b6127cb..134216a 100644 --- a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java +++ b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java @@ -20,4 +20,11 @@ public class MinecleanerComponentUtils { .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(); + } + } diff --git a/src/main/resources/lang/de_DE.properties b/src/main/resources/lang/de_DE.properties index 649270c..48543f0 100644 --- a/src/main/resources/lang/de_DE.properties +++ b/src/main/resources/lang/de_DE.properties @@ -1,3 +1,8 @@ +minecleaner.info.version=Version +minecleaner.info.developer=Entwickelt von +minecleaner.info.website=Website +minecleaner.info.license=Lizenz + arena.name.invalid=Ungueltiger Arenaname. Erlaubt sind Buchstaben, Zahlen und der Unterstrich arena.name.exists=Eine Arena mit diesem Namen existiert bereits arena.widthindex.invalid=Kein Valider Arena WidthIndex! @@ -6,4 +11,14 @@ arena.widthindex.toolarge=Arena WidthIndex darf nicht groesser 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. \ No newline at end of file +arena.create.success=Die Arena wurde erfolgreich angelegt. + +arena.list=Angelegte {0}-Arenen +arena.list.none=(keine) + +data.player.noData=Fuer Spieler "{0}" existieren keine Daten. +data.player.self=Deine {0} Statistik +data.player.other={0}-Statistik von {1} + +data.delete.playerNotFound=Ein Spieler mit dem Namen "{0}" konnte nicht gefunden werden. +data.delete.deleted=Alle {0}-Statistiken von Spieler "{1}" wurden geloescht. \ No newline at end of file diff --git a/src/main/resources/lang/en_US.properties b/src/main/resources/lang/en_US.properties index 298922c..9f03c69 100644 --- a/src/main/resources/lang/en_US.properties +++ b/src/main/resources/lang/en_US.properties @@ -1,3 +1,8 @@ +minecleaner.info.version=Version +minecleaner.info.developer=Developed by +minecleaner.info.website=Website +minecleaner.info.license=License + arena.name.invalid=Invalid arena name. Allowed are letters, numbers and the underscore arena.name.exists=An arena with this name already exists arena.widthindex.invalid=Not a valid Arena WidthIndex @@ -6,4 +11,14 @@ 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. \ No newline at end of file +arena.create.success=The arena has been created successfully. + +arena.list=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.delete.playerNotFound=A player with the name "{0}" could not be found. +data.delete.deleted=All {0} stats of player "{1}" have been deleted. \ No newline at end of file From b1193d4687ea3cf00301d9bd8a92884b6cd95e20 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Thu, 9 May 2024 22:26:37 +0200 Subject: [PATCH 30/53] 1.20.6 --- .../minecleaner/utils/MinecleanerHeads.java | 43 ++----------------- 1 file changed, 4 insertions(+), 39 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerHeads.java b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerHeads.java index 6dbb368..4e66dae 100644 --- a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerHeads.java +++ b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerHeads.java @@ -1,14 +1,8 @@ package de.lunarakai.minecleaner.utils; -import java.util.Arrays; +import de.iani.cubesideutils.bukkit.items.CustomHeads; import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.Material; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.SkullMeta; -import com.destroystokyo.paper.profile.PlayerProfile; -import com.destroystokyo.paper.profile.ProfileProperty; public enum MinecleanerHeads { MINESWEEPER_TILE_0("38206373-5653-4431-85aa-6276f3f9a046", "Minesweeper Tile 0", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzRjMjg0YTRlOTc0MDA1ZWE4ZDFkNGQwNjc0ZWMwODk0ZWZkOGY2ZGQwMjQ4NjM5YTZjZmE5NGY4NTM4OCJ9fX0="), @@ -38,40 +32,11 @@ public enum MinecleanerHeads { private ItemStack head; - private MinecleanerHeads(String ownerUUIDString, String ownerName, String texturesProperty) { - head = createHead(UUID.fromString(ownerUUIDString), ownerName, texturesProperty); + MinecleanerHeads(String ownerUUIDString, String ownerName, String texturesProperty) { + head = CustomHeads.createHead(UUID.fromString(ownerUUIDString), ownerName, texturesProperty); } - + public ItemStack getHead() { return new ItemStack(head); } - - public ItemStack getHead(String displayName) { - return getHead(displayName, (String[]) null); - } - - public ItemStack getHead(String displayName, String... lore) { - ItemStack stack = getHead(); - ItemMeta meta = stack.getItemMeta(); - meta.setDisplayName(displayName); - if (lore != null && lore.length > 0) { - meta.setLore(Arrays.asList(lore)); - } - stack.setItemMeta(meta); - return stack; - } - - public static ItemStack createHead(UUID ownerUUID, String ownerName, String texturesProperty) { - if (ownerName == null) { - ownerName = ownerUUID.toString().substring(0, 16); - } - ItemStack stack = new ItemStack(Material.PLAYER_HEAD); - SkullMeta meta = (SkullMeta) stack.getItemMeta(); - PlayerProfile profile = Bukkit.createProfile(ownerUUID, ownerName); - profile.setProperty(new ProfileProperty("textures", texturesProperty)); - meta.setPlayerProfile(profile); - stack.setItemMeta(meta); - return stack; - } - } From 75768ea5877d3e36c4182e75598d724f8c8b7227 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Mon, 13 May 2024 22:13:44 +0200 Subject: [PATCH 31/53] nullpointer + settingsinv --- .../minecleaner/MinecleanerListener.java | 113 +--------------- .../minecleaner/MinecleanerManager.java | 69 ---------- .../MinecleanerSettingsInventory.java | 124 ++++++++++++++++++ .../minecleaner/commands/SettingsCommand.java | 3 +- .../utils/MinecleanerStringUtil.java | 2 + 5 files changed, 129 insertions(+), 182 deletions(-) create mode 100644 src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index bf687ec..fae60ab 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -48,7 +48,7 @@ public class MinecleanerListener implements Listener { hasRightClicked = true; } - if(!arena.getCurrentMinecleanerGame().gameover && (arena.getArenaStatus() == ArenaStatus.PLAYING || arena.getArenaStatus() == ArenaStatus.COMPLETED)) { + if(arena.getCurrentMinecleanerGame() != null && !arena.getCurrentMinecleanerGame().gameover && (arena.getArenaStatus() == ArenaStatus.PLAYING || arena.getArenaStatus() == ArenaStatus.COMPLETED)) { if(arena.getArenaStatus() == ArenaStatus.PLAYING) { int d0x = arena.getOrientation().getModX(); int d0z = arena.getOrientation().getModZ(); @@ -131,117 +131,6 @@ public class MinecleanerListener implements Listener { } } } - if(e.getInventory().equals(plugin.getManager().getSettingsInventory())) { - int slot = e.getRawSlot(); - switch (slot) { - case 10: { - if(plugin.getManager().getSettingsValue("allowmanualreset", player) == 0) { - plugin.getManager().updateSettingsValue("allowmanualreset", 1, player); - player.closeInventory(); - player.openInventory(plugin.getManager().showSettingsInventory(player)); - } else { - plugin.getManager().updateSettingsValue("allowmanualreset", 0, player); - player.closeInventory(); - player.openInventory(plugin.getManager().showSettingsInventory(player)); - } - break; - } - 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; - } - case 16: { - switch (plugin.getManager().getSettingsValue("resettime", player)) { - case 1: { - plugin.getManager().updateSettingsValue("resettime", 2, player); - player.closeInventory(); - player.openInventory(plugin.getManager().showSettingsInventory(player)); - break; - } - case 2: { - plugin.getManager().updateSettingsValue("resettime", 3, player); - player.closeInventory(); - player.openInventory(plugin.getManager().showSettingsInventory(player)); - break; - } - case 3: { - plugin.getManager().updateSettingsValue("resettime", 4, player); - player.closeInventory(); - player.openInventory(plugin.getManager().showSettingsInventory(player)); - break; - } - case 4: { - plugin.getManager().updateSettingsValue("resettime", 5, player); - player.closeInventory(); - player.openInventory(plugin.getManager().showSettingsInventory(player)); - break; - } - case 5: { - plugin.getManager().updateSettingsValue("resettime", 6, player); - player.closeInventory(); - player.openInventory(plugin.getManager().showSettingsInventory(player)); - break; - } - case 6: { - plugin.getManager().updateSettingsValue("resettime", 7, player); - player.closeInventory(); - player.openInventory(plugin.getManager().showSettingsInventory(player)); - break; - } - case 7: { - plugin.getManager().updateSettingsValue("resettime", 8, player); - player.closeInventory(); - player.openInventory(plugin.getManager().showSettingsInventory(player)); - break; - } - case 8: { - plugin.getManager().updateSettingsValue("resettime", 9, player); - player.closeInventory(); - player.openInventory(plugin.getManager().showSettingsInventory(player)); - break; - } - case 9: { - plugin.getManager().updateSettingsValue("resettime", 10, player); - player.closeInventory(); - player.openInventory(plugin.getManager().showSettingsInventory(player)); - break; - } - case 10: { - plugin.getManager().updateSettingsValue("resettime", 1, player); - player.closeInventory(); - player.openInventory(plugin.getManager().showSettingsInventory(player)); - break; - } - } - } - default: { - break; - } - } - } } } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index ed16168..2441a99 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -373,75 +373,6 @@ public class MinecleanerManager { } } - public Inventory showSettingsInventory(Player player) { - int current = getSettingsValue("allowmanualreset", player); - - if(current == 0) { - settingsInventory.setItem(10, - ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.SHEARS), ChatColor.RED + "Manuelles Resetten deaktiviert"))); - } else { - settingsInventory.setItem(10, - ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.SHEARS), ChatColor.GREEN + "Manuelles Resetten aktiviert"))); - } - - 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 deaktiviert"))); - } else { - settingsInventory.setItem(12, - ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.NAME_TAG), ChatColor.GREEN + "Zusätzliche Anzeige in der Action Bar aktiviert"))); - } - - - current = getSettingsValue("timer", player); - - if(current == 0) { - settingsInventory.setItem(14, - ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CLOCK), ChatColor.RED + "Timer wird nicht angezeigt"))); - } else { - settingsInventory.setItem(14, - ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CLOCK), ChatColor.GREEN + "Timer wird angezeigt"))); - } - - current = getSettingsValue("resettime", player); - - switch (current) { - case 1: - settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "1s"))); - break; - case 2: - settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "2s"))); - break; - case 3: - settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "3s"))); - break; - case 4: - settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "4s"))); - break; - case 5: - settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "5s"))); - break; - case 6: - settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "6s"))); - break; - case 7: - settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "7s"))); - break; - case 8: - settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "8s"))); - break; - case 9: - settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "9s"))); - break; - case 10: - settingsInventory.setItem(16, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.CANDLE), ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + "10s"))); - break; - } - - return settingsInventory; - } - public int getSettingsValue(String settingsKeyString, Player player) { PlayerStatistics playerStatistics = plugin.getCubesideStatistics().getStatistics(player.getUniqueId()); SettingKey settingKey = plugin.getCubesideStatistics().getSettingKey("minecleaner.settings." + settingsKeyString); diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java new file mode 100644 index 0000000..2ac51ee --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java @@ -0,0 +1,124 @@ +package de.lunarakai.minecleaner; + +import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; +import de.lunarakai.minecleaner.utils.ItemUtil; +import net.md_5.bungee.api.ChatColor; +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, ChatColor.RED + "Manuelles Resetten deaktiviert"); + } else { + item = ItemUtil.createGuiItem(Material.SHEARS, ChatColor.GREEN + "Manuelles Resetten aktiviert"); + } + } + case SETTINGS_ADDITIONAL_DISPLAY -> { + if (plugin.getManager().getSettingsValue("additionaldisplay", player) == 0) { + item = ItemUtil.createGuiItem(Material.NAME_TAG, ChatColor.RED + "Zusätzliche Anzeige in der Action Bar deaktiviert\""); + } else { + item = ItemUtil.createGuiItem(Material.NAME_TAG, ChatColor.GREEN + "Zusätzliche Anzeige in der Action Bar aktiviert\""); + } + } + case SETTINGS_TIMER -> { + if (plugin.getManager().getSettingsValue("timer", player) == 0) { + item = ItemUtil.createGuiItem(Material.CLOCK, ChatColor.RED + "Timer wird nicht angezeigt"); + } else { + item = ItemUtil.createGuiItem(Material.CLOCK, ChatColor.GREEN + "Timer wird angezeigt"); + } + } + case SETTINGS_RESETTIME -> { + int current = plugin.getManager().getSettingsValue("resettime", player); + item = ItemUtil.createGuiItem(Material.CANDLE, ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + current + "s"); + } + 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 -> { + } + } + } +} diff --git a/src/main/java/de/lunarakai/minecleaner/commands/SettingsCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/SettingsCommand.java index a7051ad..4679e0d 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/SettingsCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/SettingsCommand.java @@ -8,6 +8,7 @@ import de.iani.cubesideutils.bukkit.commands.exceptions.NoPermissionException; import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; import de.iani.cubesideutils.commands.ArgsParser; import de.lunarakai.minecleaner.MinecleanerPlugin; +import de.lunarakai.minecleaner.MinecleanerSettingsInventory; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -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 { Player player = (Player) sender; - player.openInventory(plugin.getManager().showSettingsInventory(player)); + new MinecleanerSettingsInventory(player, plugin).open(); return true; } } diff --git a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java index 7693f80..b9b6f58 100644 --- a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java +++ b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java @@ -1,5 +1,7 @@ package de.lunarakai.minecleaner.utils; +import de.iani.cubesideutils.StringUtil; + public class MinecleanerStringUtil { private MinecleanerStringUtil() { } From f09c9772b278706982705a5406d16897033c7a64 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Mon, 13 May 2024 22:16:50 +0200 Subject: [PATCH 32/53] whoops --- .../lunarakai/minecleaner/utils/ItemUtil.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/main/java/de/lunarakai/minecleaner/utils/ItemUtil.java diff --git a/src/main/java/de/lunarakai/minecleaner/utils/ItemUtil.java b/src/main/java/de/lunarakai/minecleaner/utils/ItemUtil.java new file mode 100644 index 0000000..bf9e2e7 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/utils/ItemUtil.java @@ -0,0 +1,32 @@ +package de.lunarakai.minecleaner.utils; + +import de.iani.cubesideutils.bukkit.items.ItemBuilder; +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, " ", true, true); + + public static ItemStack createGuiItem(Material material, String name, String... lore) { + return createGuiItem(material, name, false, lore); + } + + public static ItemStack createGuiItem(Material material, String 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, String name, boolean glowing, String... lore) { + return createGuiItem(material, name, glowing, true, lore); + } +} From 583f8a1257d5490895308afa4536c23e70bcf9e5 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Wed, 15 May 2024 18:55:12 +0200 Subject: [PATCH 33/53] translatable StatsCommand --- .../minecleaner/commands/InfoCommand.java | 8 +-- .../minecleaner/commands/InviteCommand.java | 37 +++++++++++++ .../minecleaner/commands/StatsCommand.java | 55 +++++++++++++++---- .../utils/MinecleanerComponentUtils.java | 22 ++++++++ .../utils/MinecleanerStringUtil.java | 14 ++++- src/main/resources/lang/de_DE.properties | 13 ++++- src/main/resources/lang/en_US.properties | 13 ++++- src/main/resources/plugin.yml | 2 +- 8 files changed, 144 insertions(+), 20 deletions(-) create mode 100644 src/main/java/de/lunarakai/minecleaner/commands/InviteCommand.java diff --git a/src/main/java/de/lunarakai/minecleaner/commands/InfoCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/InfoCommand.java index fc588f9..b49992c 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/InfoCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/InfoCommand.java @@ -43,10 +43,10 @@ public class InfoCommand extends SubCommand{ ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { sender.sendMessage(NamedChatColor.GREEN + "--- " + ChatColor.AQUA + plugin.getName() + ChatColor.GREEN + " ---"); - sender.sendMessage(createLangComponent("minecleaner.info.version", NamedTextColor.AQUA) + ": " + ChatColor.GREEN + plugin.getPluginMeta().getVersion()); - sender.sendMessage(createLangComponent("minecleaner.info.developer", NamedTextColor.AQUA) + ": " + ChatColor.GREEN + plugin.getPluginMeta().getAuthors().get(0)); - sender.sendMessage(createLangComponent("minecleaner.info.website", NamedTextColor.AQUA) + ": " + ChatColor.GREEN + plugin.getPluginMeta().getWebsite()); - sender.sendMessage(createLangComponent("minecleaner.info.license", NamedTextColor.AQUA) + ": " + ChatColor.GREEN + "GPL-3.0"); + sender.sendMessage(createLangComponent("minecleaner.info.version", ": ", plugin.getPluginMeta().getVersion(), NamedTextColor.AQUA, NamedTextColor.GREEN)); + sender.sendMessage(createLangComponent("minecleaner.info.developer", ": ", plugin.getPluginMeta().getAuthors().get(0), NamedTextColor.AQUA, NamedTextColor.GREEN)); + sender.sendMessage(createLangComponent("minecleaner.info.website", ": ", plugin.getPluginMeta().getWebsite(), NamedTextColor.AQUA, NamedTextColor.GREEN)); + sender.sendMessage(createLangComponent("minecleaner.info.license", ": ", "GPL-3.0", NamedTextColor.AQUA, NamedTextColor.GREEN)); return true; } } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/InviteCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/InviteCommand.java new file mode 100644 index 0000000..df5d52d --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/commands/InviteCommand.java @@ -0,0 +1,37 @@ +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.MinecleanerPlugin; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +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 + */ + + @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 { + return false; + } +} diff --git a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java index 1b68ae6..dac1757 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java @@ -8,7 +8,6 @@ import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import de.iani.cubesideutils.StringUtil; import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException; import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException; @@ -19,7 +18,6 @@ import de.iani.cubesideutils.commands.ArgsParser; import de.lunarakai.minecleaner.MinecleanerPlugin; import de.lunarakai.minecleaner.PlayerStatisticsData; import de.lunarakai.minecleaner.utils.MinecleanerStringUtil; -import net.md_5.bungee.api.ChatColor; import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; @@ -61,8 +59,22 @@ public class StatsCommand extends SubCommand { } else { 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 e : plugin.getManager().getSizes().entrySet()) { int totalWonSize = data.getGamesPlayedSize(e.getKey()); int totalWonMonth = data.getGamesPlayedSizeThisMonth(e.getKey()); @@ -70,14 +82,35 @@ public class StatsCommand extends SubCommand { int totalSizeMonth = data.getTotalGamesPlayedSizeThisMonth(e.getKey()); if(totalSize > 0) { - String sizeName = StringUtil.capitalizeFirstLetter(e.getValue(), false); - sender.sendMessage(ChatColor.AQUA + " " + sizeName + ":"); - sender.sendMessage(ChatColor.BLUE + " Runden gewonnen: " + ChatColor.GREEN + totalWonSize + " von " + totalSize + " (" + MinecleanerStringUtil.percentageString(totalWonSize, totalSize)+ ") "); - sender.sendMessage(ChatColor.BLUE + " Dieser Monat: " + ChatColor.GREEN + totalWonMonth + " von " + totalSizeMonth + " (" + MinecleanerStringUtil.percentageString(totalWonMonth, totalSizeMonth)+ ")"); + String sizeName = e.getValue(); + if(sizeName.equals("groß")) { + sizeName = "gross"; + } + sender.sendMessage(createLangComponent("arena.width." + sizeName, NamedTextColor.AQUA).append(Component.text(":", NamedTextColor.AQUA))); + + sender.sendMessage(Component.text(" ") + .append(createLangComponent("data.player.roundswon", NamedTextColor.BLUE)) + .append(Component.text(" ")) + .append(Component.text(String.valueOf(totalWonSize), NamedTextColor.GREEN)) + .append(Component.text(" ")) + .append(createLangComponent("data.player.outof", NamedTextColor.GREEN)) + .append(Component.text(" " + totalSize + " (" + MinecleanerStringUtil.percentageString(totalWonSize, totalSize) + ")", NamedTextColor.GREEN))); + + sender.sendMessage(Component.text(" ") + .append(createLangComponent("data.player.thismonth", NamedTextColor.BLUE)) + .append(Component.text(" ")) + .append(Component.text(String.valueOf(totalWonMonth), NamedTextColor.GREEN)) + .append(Component.text(" ")) + .append(createLangComponent("data.player.outof", NamedTextColor.GREEN)) + .append(Component.text(" " + totalSize + " (" + MinecleanerStringUtil.percentageString(totalWonMonth, totalSizeMonth) + ")", NamedTextColor.GREEN))); + Integer time = data.getBestTime(e.getKey()); Integer timeThisMonth = data.getBestTimeThisMonth(e.getKey()); - sender.sendMessage(ChatColor.BLUE + " Bestzeit: " + ChatColor.GREEN + (time == null ? "-" : MinecleanerStringUtil.timeToString(time, false))); - sender.sendMessage(ChatColor.BLUE + " Dieser Monat: " + ChatColor.GREEN + (timeThisMonth == null ? "-" : MinecleanerStringUtil.timeToString(timeThisMonth, false))); + sender.sendMessage(Component.text(" ") + .append(createLangComponent("data.player.besttime",": ", (time == null ? "-" : MinecleanerStringUtil.timeToString(time, false)), NamedTextColor.BLUE, NamedTextColor.GREEN))); + + sender.sendMessage(Component.text(" ") + .append(createLangComponent("data.player.thismonth", ": ", (timeThisMonth == null ? "-" : MinecleanerStringUtil.timeToString(timeThisMonth, false)), NamedTextColor.BLUE, NamedTextColor.GREEN))); } } } @@ -86,7 +119,7 @@ public class StatsCommand extends SubCommand { if(sender instanceof Player) { plugin.getManager().getStatisticsForPlayer((Player) sender, callback); } else { - sender.sendMessage(ChatColor.GREEN + "Für die Konsole existieren keine Daten."); + sender.sendMessage(createLangComponent("data.console.nodata", NamedTextColor.GREEN)); } } else { plugin.getManager().getStatisticsForPlayerIfExists(playerName, callback); diff --git a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java index 134216a..fe131bd 100644 --- a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java +++ b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java @@ -2,6 +2,7 @@ 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 { @@ -27,4 +28,25 @@ public class MinecleanerComponentUtils { .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(); + } + } } diff --git a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java index b9b6f58..d9dec83 100644 --- a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java +++ b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java @@ -1,6 +1,6 @@ package de.lunarakai.minecleaner.utils; -import de.iani.cubesideutils.StringUtil; +import java.net.URL; public class MinecleanerStringUtil { private MinecleanerStringUtil() { @@ -51,5 +51,15 @@ public class MinecleanerStringUtil { percent = percent * 100; String percentageString = String.format("%.1f", percent); return percentageString + "%"; - } + } + + public static boolean isValidURL(String urlString) { + try { + URL url = new URL(urlString); + url.toURI(); + return true; + } catch (Exception e) { + return false; + } + } } diff --git a/src/main/resources/lang/de_DE.properties b/src/main/resources/lang/de_DE.properties index 48543f0..3c86e81 100644 --- a/src/main/resources/lang/de_DE.properties +++ b/src/main/resources/lang/de_DE.properties @@ -5,6 +5,10 @@ minecleaner.info.license=Lizenz arena.name.invalid=Ungueltiger 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 groesser als 3 sein @@ -19,6 +23,13 @@ arena.list.none=(keine) data.player.noData=Fuer 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.from=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 geloescht. \ No newline at end of file +data.delete.deleted=Alle {0}-Statistiken von Spieler "{1}" wurden geloescht. + +data.console.nodata=Fuer die Konsole existieren keine Daten. \ No newline at end of file diff --git a/src/main/resources/lang/en_US.properties b/src/main/resources/lang/en_US.properties index 9f03c69..c4ad7c0 100644 --- a/src/main/resources/lang/en_US.properties +++ b/src/main/resources/lang/en_US.properties @@ -5,6 +5,10 @@ minecleaner.info.license=License 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 @@ -19,6 +23,13 @@ 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. \ No newline at end of file +data.delete.deleted=All {0} stats of player "{1}" have been deleted. + +data.console.nodata=No data exists for the console. \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 1ac16a2..737f270 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: Minecleaner version: '${project.version}-${git.commit.id.abbrev}' author: LunarAkai -website: https://github.com/LunarAkai/Minecleaner +website: https://git.lunarakai.de/LunarAkai/NewMinecleaner main: de.lunarakai.minecleaner.MinecleanerPlugin api-version: '1.20' depend: From b7e97212ac28be620f312277eb144ea5265f20c0 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Wed, 15 May 2024 19:12:31 +0200 Subject: [PATCH 34/53] translatable DeleteCommand --- .../de/lunarakai/minecleaner/commands/DeleteCommand.java | 8 ++++++-- src/main/resources/lang/de_DE.properties | 2 ++ src/main/resources/lang/en_US.properties | 2 ++ src/main/resources/plugin.yml | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/commands/DeleteCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/DeleteCommand.java index 46f7434..28a47ea 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/DeleteCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/DeleteCommand.java @@ -2,6 +2,8 @@ package de.lunarakai.minecleaner.commands; import java.util.Collection; import java.util.List; + +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.command.Command; @@ -18,6 +20,8 @@ import de.lunarakai.minecleaner.MinecleanerArena; import de.lunarakai.minecleaner.MinecleanerPlugin; import net.md_5.bungee.api.ChatColor; +import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; + public class DeleteCommand extends SubCommand { private final MinecleanerPlugin plugin; @@ -52,9 +56,9 @@ public class DeleteCommand extends SubCommand { } if(arena != null) { 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 { - sender.sendMessage(ChatColor.YELLOW + "Hier befindet sich keine " + plugin.getDisplayedPluginName() + "-Arena."); + sender.sendMessage(createLangComponent("arena.delete.noarena", plugin.getDisplayedPluginName(), NamedTextColor.YELLOW)); } return true; } diff --git a/src/main/resources/lang/de_DE.properties b/src/main/resources/lang/de_DE.properties index 3c86e81..1619c35 100644 --- a/src/main/resources/lang/de_DE.properties +++ b/src/main/resources/lang/de_DE.properties @@ -16,6 +16,8 @@ arena.create.lookAtCenter=Bitte gucke den Block an, der im Zentrum des {0}-Spiel 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 geloescht. +arena.delete.noarena=Hier befindet sich keine {0}-Arena. arena.list=Angelegte {0}-Arenen arena.list.none=(keine) diff --git a/src/main/resources/lang/en_US.properties b/src/main/resources/lang/en_US.properties index c4ad7c0..82a13cf 100644 --- a/src/main/resources/lang/en_US.properties +++ b/src/main/resources/lang/en_US.properties @@ -16,6 +16,8 @@ arena.create.lookAtCenter=Please look at the block that should be in the center 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.list=Created {0} arenas arena.list.none=(none) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 737f270..1ac16a2 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: Minecleaner version: '${project.version}-${git.commit.id.abbrev}' author: LunarAkai -website: https://git.lunarakai.de/LunarAkai/NewMinecleaner +website: https://github.com/LunarAkai/Minecleaner main: de.lunarakai.minecleaner.MinecleanerPlugin api-version: '1.20' depend: From b57e9ff410fa1b90fa5d9bbc6003aa9adab9fb0e Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Wed, 15 May 2024 21:48:43 +0200 Subject: [PATCH 35/53] start duo --- .../de/lunarakai/minecleaner/ArenaList.java | 28 +++++-- .../minecleaner/MinecleanerArena.java | 48 ++++++------ .../minecleaner/MinecleanerGroup.java | 74 +++++++++++++++++++ .../minecleaner/MinecleanerListener.java | 27 ++++--- .../minecleaner/MinecleanerManager.java | 53 +++++++------ .../MinecleanerSettingsInventory.java | 2 +- .../minecleaner/commands/AcceptCommand.java | 50 +++++++++++++ .../minecleaner/commands/DenyCommand.java | 14 ++++ .../minecleaner/commands/InviteCommand.java | 27 ++++++- 9 files changed, 258 insertions(+), 65 deletions(-) create mode 100644 src/main/java/de/lunarakai/minecleaner/MinecleanerGroup.java create mode 100644 src/main/java/de/lunarakai/minecleaner/commands/AcceptCommand.java create mode 100644 src/main/java/de/lunarakai/minecleaner/commands/DenyCommand.java diff --git a/src/main/java/de/lunarakai/minecleaner/ArenaList.java b/src/main/java/de/lunarakai/minecleaner/ArenaList.java index 3229b0d..6ab5e14 100644 --- a/src/main/java/de/lunarakai/minecleaner/ArenaList.java +++ b/src/main/java/de/lunarakai/minecleaner/ArenaList.java @@ -2,6 +2,7 @@ package de.lunarakai.minecleaner; import java.io.File; import java.io.IOException; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.UUID; @@ -106,16 +107,29 @@ public class ArenaList { return false; } - public void setArenaForPlayer(Player player, MinecleanerArena arena) { + public void setArenaForPlayers(Player[] players, MinecleanerArena arena) { if(arena != null) { - playersInArena.put(player.getUniqueId(), arena); + for(int i = 0; i < players.length; i++) { + playersInArena.put(players[i].getUniqueId(), arena); + } } else { - playersInArena.remove(player.getUniqueId()); + for(int i = 0; i < players.length; i++) { + playersInArena.remove(players[i].getUniqueId()); + } } } - public MinecleanerArena getPlayerArena(Player player) { - return playersInArena.get(player.getUniqueId()); + public MinecleanerArena getPlayersArena(Player[] players) { + MinecleanerArena[] arenas = new MinecleanerArena[players.length]; + for(int i = 0; i < players.length; i++) { + arenas[i] = playersInArena.get(players[i].getUniqueId()); + } + boolean match = Arrays.stream(arenas).allMatch(s -> s.equals(arenas[0])); + if(match) { + return arenas[0]; + } else { + return null; + } } public MinecleanerArena getArenaAtBlock(Block block) { @@ -127,8 +141,8 @@ public class ArenaList { } public void removeArena(MinecleanerArena arena) { - if(arena.hasPlayer()) { - plugin.getManager().leaveArena(arena.getCurrentPlayer(), true); + if(arena.hasPlayers()) { + plugin.getManager().leaveArena(arena.getCurrentPlayers(), true); } for(UUID id : arena.getBlockDisplays()) { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index 85dc1d6..bd34d36 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -43,7 +43,7 @@ public class MinecleanerArena { private TextDisplay textDisplay; private boolean hasMadeFirstClick = false; private int flagsPlaced = 0; - private Player currentPlayer; + private Player[] currentPlayers; private long currentGameStartTime; private long ingameTime; private Game currentMinecleanerGame; @@ -235,13 +235,13 @@ public class MinecleanerArena { new BukkitRunnable() { @Override public void run() { - if(arenaStatus == ArenaStatus.PLAYING && currentPlayer != null) { + if(arenaStatus == ArenaStatus.PLAYING && currentPlayers != null) { if(!currentMinecleanerGame.gameover) { ingameTime++; } if(plugin.isStatisticsEnabled()) { - if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayer) != 0 - || plugin.getManager().getSettingsValue("timer", currentPlayer) != 0) { + if(plugin.getManager().getSettingsValue("additionaldisplay", currentPlayers[0]) != 0 + || plugin.getManager().getSettingsValue("timer", currentPlayers[0]) != 0) { updateIngameInfoTexts(); } } @@ -254,19 +254,19 @@ public class MinecleanerArena { } - public void addJoiningPlayer(Player player) { - Preconditions.checkNotNull(player); + public void addJoiningPlayers(Player[] players) { + Preconditions.checkNotNull(players); Preconditions.checkState(arenaStatus == ArenaStatus.INACTIVE); this.arenaStatus = ArenaStatus.CONFIRM_PLAYING; - this.currentPlayer = player; + this.currentPlayers = players; } - public void removePlayer() { + public void removePlayers() { int sizeWidth = BoardSize.boardSizesWidth[widthIndex]; int sizeHeight = BoardSize.boardSizesHeight[widthIndex]; this.arenaStatus = ArenaStatus.INACTIVE; - this.currentPlayer = null; + this.currentPlayers = null; this.currentMinecleanerGame = null; // load chunk of block -1 and x+1 @@ -382,8 +382,8 @@ public class MinecleanerArena { } private void showTextDisplay() { - Player player = this.getCurrentPlayer(); - World world = player.getWorld(); + Player[] players = this.getCurrentPlayers(); + World world = players[0].getWorld(); double textCenterX = centerLocation.getX(); double textCenterY = centerLocation.getY() + ((double) BoardSize.boardSizesHeight[widthIndex] / 3 - 2.75 - widthIndex); @@ -417,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 -> { Transformation transformation = textdisplay.getTransformation(); @@ -445,12 +445,14 @@ public class MinecleanerArena { public void updateIngameInfoTexts() { String timer = ""; 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) + " "; } - 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]; - currentPlayer.sendActionBar(Component.text(componentActionBar + " " + timer)); + for(int i = 0; i < currentPlayers.length; i++) { + currentPlayers[i].sendActionBar(Component.text(componentActionBar + " " + timer)); + } } } @@ -495,7 +497,7 @@ public class MinecleanerArena { if (currentMinecleanerGame != null && !currentMinecleanerGame.gameover) { Cell cell = currentMinecleanerGame.getCell(x, y); if (!cell.isRevealed()) { - Player player = this.currentPlayer; + Player[] players = this.currentPlayers; currentMinecleanerGame.flag(x, y); if (currentMinecleanerGame.gameover) { @@ -503,7 +505,7 @@ public class MinecleanerArena { arenaStatus = ArenaStatus.COMPLETED; }, 5L); - plugin.getManager().handleGameover(player, this, true); + plugin.getManager().handleGameover(players, this, true); } if (cell.isFlagged() == true) { flagsPlaced = flagsPlaced + 1; @@ -523,7 +525,7 @@ public class MinecleanerArena { if (currentMinecleanerGame != null && !currentMinecleanerGame.gameover) { Cell cell = currentMinecleanerGame.getCell(x, y); if (!cell.isFlagged()) { - Player player = this.currentPlayer; + Player[] players = this.currentPlayers; if (!hasMadeFirstClick) { currentMinecleanerGame.firstClick(x, y); @@ -537,7 +539,7 @@ public class MinecleanerArena { Bukkit.getScheduler().runTaskLater(plugin, () -> { arenaStatus = ArenaStatus.COMPLETED; }, 5L); - plugin.getManager().handleGameover(player, this, !(cell.isRevealed() && cell.isExploded())); + plugin.getManager().handleGameover(players, this, !(cell.isRevealed() && cell.isExploded())); } else { updateIngameInfoTexts(); } @@ -692,12 +694,12 @@ public class MinecleanerArena { return name; } - public boolean hasPlayer() { - return currentPlayer != null; + public boolean hasPlayers() { + return currentPlayers != null; } - public Player getCurrentPlayer() { - return currentPlayer; + public Player[] getCurrentPlayers() { + return currentPlayers; } public Location getLocation() { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroup.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroup.java new file mode 100644 index 0000000..4ebd571 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroup.java @@ -0,0 +1,74 @@ +package de.lunarakai.minecleaner; + +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.UUID; + +public class MinecleanerGroup { + private final Player groupCreator; + private final ArrayList groups; + private final HashMap playerGroupMap; + private final HashMap invitedPlayerGroupMap; + + private int groupSize; + + public MinecleanerGroup() { + this.groupCreator = null; + this.groups = new ArrayList<>(); + this.playerGroupMap = new HashMap<>(); + this.invitedPlayerGroupMap = new HashMap<>(); + } + + public void createGroup(Player player) { + UUID groupUUID = UUID.randomUUID(); + groups.add(groupUUID); + playerGroupMap.put(player.getUniqueId(), groupUUID); + groupSize++; + } + + private void deleteGroup(UUID groupUUID) { + groups.remove(groupUUID); + } + + public void addPlayerToGroup(Player player) { + + } + + public void invitePlayerToGroup(UUID groupUUID, Player player) { + invitedPlayerGroupMap.put(groupUUID, player.getUniqueId()); + player.sendMessage("You have been invited. :)"); + } + + private void removePlayerFromGroup(Player player) { + playerGroupMap.remove(player.getUniqueId()); + } + + public void removePlayerFromInvitedMap(UUID playerUUID) { + invitedPlayerGroupMap.remove(playerUUID); + } + + public UUID getGroupUUID(Player player) { + return playerGroupMap.get(player.getUniqueId()); + } + + public MinecleanerGroup getGroup(Player player) { + return + } + + public Player getGroupCreator(UUID groupUUID) { + return groupCreator; + } + public boolean isInGroup(Player player) { + // TODO + } + + public boolean isInvited(Player player) { + return invitedPlayerGroupMap.containsKey(player.getUniqueId()); + } + + public int getGroupSize() { + return groupSize; + } +} diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index fae60ab..e1f8495 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -34,7 +34,7 @@ public class MinecleanerListener implements Listener { if(e.getHand() != EquipmentSlot.HAND) return; if((e.getAction() == Action.LEFT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_BLOCK)) { Block block = e.getClickedBlock(); - MinecleanerArena arena = plugin.getArenaList().getPlayerArena(e.getPlayer()); + MinecleanerArena arena = plugin.getArenaList().getPlayersArena(e.getPlayer()); if(arena != null) { e.setCancelled(true); MinecleanerArena arenaClicked = plugin.getArenaList().getArenaAtBlock(block); @@ -86,9 +86,9 @@ public class MinecleanerListener implements Listener { } } } - } else if(arena.hasPlayer() && arena.getArenaStatus() == ArenaStatus.COMPLETED && !hasRightClicked && (plugin.getManager().getSettingsValue("allowmanualreset", e.getPlayer()) == 1)) { + } else if(arena.hasPlayers() && arena.getArenaStatus() == ArenaStatus.COMPLETED && !hasRightClicked && (plugin.getManager().getSettingsValue("allowmanualreset", e.getPlayer()) == 1)) { plugin.getManager().getSchedulerGameOver().cancel(); - plugin.getManager().leaveArena(arenaClicked.getCurrentPlayer(), false); + plugin.getManager().leaveArena(arenaClicked.getCurrentPlayers(), false); } } else { arena = plugin.getArenaList().getArenaAtBlock(block); @@ -116,15 +116,24 @@ public class MinecleanerListener implements Listener { @EventHandler public void onPlayerInventoryClick(InventoryClickEvent e) { if(e.getWhoClicked() instanceof Player player) { - MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); + MinecleanerArena arena = plugin.getArenaList().getPlayersArena(player); if(arena != null) { if(e.getInventory().equals(plugin.getManager().getConfirmPlayingInventory())) { e.setCancelled(true); if(arena.getArenaStatus() == ArenaStatus.CONFIRM_PLAYING) { int slot = e.getRawSlot(); boolean hasConfirmed = slot == 1 ? true : false; - if(hasConfirmed) { - plugin.getManager().startGame(player); + if(hasConfirmed) { + Player[] players; + if(MinecleanerGroup.isInGroup(player)) { + players = new Player[MinecleanerGroup.getGroupSize()]; + players[0] = player; + } else { + players = new Player[1]; + players[0] = player; + } + plugin.getManager().startGame(players); + //player.closeInventory(); } player.closeInventory(); @@ -137,7 +146,7 @@ public class MinecleanerListener implements Listener { @EventHandler public void onPlayerInventoryClose(InventoryCloseEvent e) { if(e.getPlayer() instanceof Player player) { - MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); + MinecleanerArena arena = plugin.getArenaList().getPlayersArena(player); if(arena != null) { if(arena.getArenaStatus() == ArenaStatus.CONFIRM_PLAYING && e.getInventory().equals(plugin.getManager().getConfirmPlayingInventory())) { plugin.getManager().leaveArena(player, false); @@ -149,7 +158,7 @@ public class MinecleanerListener implements Listener { @EventHandler public void onPlayerMove(PlayerMoveEvent e) { final Player player = e.getPlayer(); - MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); + MinecleanerArena arena = plugin.getArenaList().getPlayersArena(player); if(arena != null) { if(arena.isTooFarAway(player)) { player.sendMessage(ChatColor.YELLOW + "Du hast dich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen."); @@ -160,7 +169,7 @@ public class MinecleanerListener implements Listener { @EventHandler public void onPlayerQuit(PlayerQuitEvent e) { - MinecleanerArena arena = plugin.getArenaList().getPlayerArena(e.getPlayer()); + MinecleanerArena arena = plugin.getArenaList().getPlayersArena(e.getPlayer()); if(arena != null) { plugin.getManager().leaveArena(e.getPlayer(), false); } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index 2441a99..577cf9a 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -1,11 +1,9 @@ package de.lunarakai.minecleaner; import de.iani.cubesidestats.api.SettingKey; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; + +import java.util.*; import java.util.Map.Entry; -import java.util.UUID; import java.util.function.Consumer; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -131,35 +129,42 @@ public class MinecleanerManager { } - public void joinArena(Player player, MinecleanerArena arena) { - if (!player.hasPermission(MinecleanerPlugin.PERMISSION_PLAY)) { + public void joinArena(Player[] players, MinecleanerArena arena) { + if (!players[0].hasPermission(MinecleanerPlugin.PERMISSION_PLAY)) { return; } - Preconditions.checkArgument(plugin.getArenaList().getPlayerArena(player) == null, "player is in an arena"); + Preconditions.checkArgument(plugin.getArenaList().getPlayersArena(players) == null, "player is in an arena"); Preconditions.checkArgument(arena.getArenaStatus() == ArenaStatus.INACTIVE, "arena is in use"); - arena.addJoiningPlayer(player); - plugin.getArenaList().setArenaForPlayer(player, arena); - player.openInventory(confirmPlayingInventory); + arena.addJoiningPlayers(players); + plugin.getArenaList().setArenaForPlayers(players, arena); + players[0].openInventory(confirmPlayingInventory); } - public void leaveArena(Player player, boolean message) { - MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); + public void leaveArena(Player[] players, boolean message) { + MinecleanerArena arena = plugin.getArenaList().getPlayersArena(players); arena.setArenaStaus(ArenaStatus.INACTIVE); Preconditions.checkArgument(arena != null, "player is in no arena"); - player.closeInventory(); - arena.removePlayer(); - plugin.getArenaList().setArenaForPlayer(player, null); + for(int i = 0; i < players.length; i++) { + players[i].closeInventory(); + } + arena.removePlayers(); + plugin.getArenaList().setArenaForPlayers(players, null); if(message) { - player.sendMessage(ChatColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); + for(int i = 0; i < players.length; i++) { + players[i].sendMessage(ChatColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); + } } } - public void startGame(Player player) { - MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); + public void startGame(Player[] players) { + MinecleanerArena arena = plugin.getArenaList().getPlayersArena(players); Preconditions.checkArgument(arena != null, "player is in no arena"); Preconditions.checkState(arena.getArenaStatus() == ArenaStatus.CONFIRM_PLAYING, "not confirming playing status"); arena.startNewGame(); - player.sendMessage(ChatColor.YELLOW + "Du hast eine neue Runde " + plugin.getDisplayedPluginName() + " gestartet."); + for(int i = 0; i < players.length; i++) { + players[i].sendMessage(ChatColor.YELLOW + "Du hast eine neue Runde " + plugin.getDisplayedPluginName() + " gestartet."); + } + } public void handleGameover(Player player, MinecleanerArena arena, boolean isSuccessfullyCleared) { @@ -241,8 +246,8 @@ public class MinecleanerManager { private void scheduleArenaReset(Player player, MinecleanerArena arena) { schedulerGameOver = Bukkit.getScheduler().runTaskLater(plugin, () -> { if(arena.getArenaStatus() == ArenaStatus.COMPLETED) { - if (arena.getCurrentPlayer() == null) { - arena.removePlayer(); + if (arena.getCurrentPlayers() == null) { + arena.removePlayers(); } else { leaveArena(player, false); } @@ -252,15 +257,15 @@ public class MinecleanerManager { public void clearAllArenas() { for(MinecleanerArena arena : plugin.getArenaList().getArenas()) { - if(arena.hasPlayer()) { - leaveArena(arena.getCurrentPlayer(), true); + if(arena.hasPlayers()) { + leaveArena(arena.getCurrentPlayers(), true); } } } public void handleFieldClick(@NotNull Player player, int x, int y, boolean hasRightClicked) { - MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); + MinecleanerArena arena = plugin.getArenaList().getPlayersArena(player); Preconditions.checkArgument(arena != null, "player is in no arena"); Preconditions.checkState(arena.getArenaStatus() == ArenaStatus.PLAYING, "not running"); diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java index 2ac51ee..5d6e9c5 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java @@ -100,7 +100,7 @@ public class MinecleanerSettingsInventory extends AbstractWindow { if(plugin.getManager().getSettingsValue("timer", player) == 0) { plugin.getManager().updateSettingsValue("timer", 1, player); } else { - MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); + MinecleanerArena arena = plugin.getArenaList().getPlayersArena(player); plugin.getManager().updateSettingsValue("timer", 0, player); if(arena != null) { arena.updateIngameInfoTexts(); diff --git a/src/main/java/de/lunarakai/minecleaner/commands/AcceptCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/AcceptCommand.java new file mode 100644 index 0000000..4764418 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/commands/AcceptCommand.java @@ -0,0 +1,50 @@ +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.MinecleanerGroup; +import de.lunarakai.minecleaner.MinecleanerPlugin; +import net.kyori.adventure.text.Component; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.HashMap; +import java.util.UUID; + +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() { + UUID groupUUID = invitedPlayersHashMap.get(player.getUniqueId()); + + } else { + player.sendMessage(Component.text("Du wurdest in keine Gruppe eingeladen.")); + } + return false; + } +} diff --git a/src/main/java/de/lunarakai/minecleaner/commands/DenyCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/DenyCommand.java new file mode 100644 index 0000000..4a7f759 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/commands/DenyCommand.java @@ -0,0 +1,14 @@ +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 org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +public class DenyCommand extends SubCommand { + @Override + public boolean onCommand(CommandSender commandSender, Command command, String s, String s1, ArgsParser argsParser) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { + return false; + } +} diff --git a/src/main/java/de/lunarakai/minecleaner/commands/InviteCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/InviteCommand.java index df5d52d..2eb5245 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/InviteCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/InviteCommand.java @@ -3,9 +3,14 @@ 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.MinecleanerGroup; import de.lunarakai.minecleaner.MinecleanerPlugin; +import net.md_5.bungee.api.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.UUID; public class InviteCommand extends SubCommand { /* @@ -15,6 +20,12 @@ public class InviteCommand extends SubCommand { - 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 ""; @@ -31,7 +42,21 @@ public class InviteCommand extends SubCommand { } @Override - public boolean onCommand(CommandSender commandSender, Command command, String s, String s1, ArgsParser argsParser) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { + public boolean onCommand(CommandSender sender, Command command, String s, String commandString, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { + Player player = (Player) sender; + if(args.remaining() < 1 || args.remaining() >= 2) { + sender.sendMessage(ChatColor.DARK_RED + commandString + getUsage()); + return true; + } + String playerName = args.getNext().trim(); + Player invitedPlayer = plugin.getServer().getPlayer(playerName); + + MinecleanerGroup group = new MinecleanerGroup(); + group.createGroup(player); + UUID groupUUID = group.getGroupUUID(player); + + group.invitePlayerToGroup(groupUUID, invitedPlayer); + return false; } } From 45ad2766994b235a429761ec7eefc7e27b4cdf7b Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Thu, 16 May 2024 00:29:56 +0200 Subject: [PATCH 36/53] i'm very eepy, but it compiles and works normally if you don't interact with the group system uwu --- .../de/lunarakai/minecleaner/ArenaList.java | 47 ++++-- .../minecleaner/MinecleanerGroup.java | 74 ---------- .../minecleaner/MinecleanerGroupManager.java | 137 ++++++++++++++++++ .../minecleaner/MinecleanerListener.java | 76 ++++++++-- .../minecleaner/MinecleanerManager.java | 97 +++++++++---- .../minecleaner/MinecleanerPlugin.java | 7 + .../MinecleanerSettingsInventory.java | 2 +- .../minecleaner/commands/DenyCommand.java | 14 -- .../commands/{ => groups}/AcceptCommand.java | 22 +-- .../commands/groups/DenyCommand.java | 56 +++++++ .../commands/{ => groups}/InviteCommand.java | 34 +++-- 11 files changed, 399 insertions(+), 167 deletions(-) delete mode 100644 src/main/java/de/lunarakai/minecleaner/MinecleanerGroup.java create mode 100644 src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java delete mode 100644 src/main/java/de/lunarakai/minecleaner/commands/DenyCommand.java rename src/main/java/de/lunarakai/minecleaner/commands/{ => groups}/AcceptCommand.java (60%) create mode 100644 src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java rename src/main/java/de/lunarakai/minecleaner/commands/{ => groups}/InviteCommand.java (55%) diff --git a/src/main/java/de/lunarakai/minecleaner/ArenaList.java b/src/main/java/de/lunarakai/minecleaner/ArenaList.java index 6ab5e14..c327160 100644 --- a/src/main/java/de/lunarakai/minecleaner/ArenaList.java +++ b/src/main/java/de/lunarakai/minecleaner/ArenaList.java @@ -2,11 +2,10 @@ package de.lunarakai.minecleaner; import java.io.File; import java.io.IOException; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.UUID; +import java.util.*; import java.util.logging.Level; + +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.configuration.ConfigurationSection; @@ -119,17 +118,37 @@ public class ArenaList { } } - public MinecleanerArena getPlayersArena(Player[] players) { - MinecleanerArena[] arenas = new MinecleanerArena[players.length]; - for(int i = 0; i < players.length; i++) { - arenas[i] = playersInArena.get(players[i].getUniqueId()); - } - boolean match = Arrays.stream(arenas).allMatch(s -> s.equals(arenas[0])); - if(match) { - return arenas[0]; + public MinecleanerArena getPlayerArena(Player player) { + int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroup(player).getPlayers().size() : 1; + Player[] players = new Player[arraySize]; + + if(plugin.getGroupManager().getGroup(player) != null) { + for(Iterator iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + Arrays.fill(players, iteratorPlayer); + } } else { - return null; + Arrays.fill(players, player); } + return getPlayerArena(players); + } + + public MinecleanerArena getPlayerArena(Player[] players) { + if(plugin.getGroupManager().getGroup(players[0]) != null) { + MinecleanerArena[] arenas = new MinecleanerArena[players.length]; + for(int i = 0; i < players.length; i++) { + arenas[i] = playersInArena.get(players[i].getUniqueId()); + } + boolean match = Arrays.stream(arenas).allMatch(s -> s.equals(arenas[0])); + if(match) { + return arenas[0]; + } else { + return null; + } + } else { + return playersInArena.get(players[0].getUniqueId()); + } + } public MinecleanerArena getArenaAtBlock(Block block) { @@ -142,7 +161,7 @@ public class ArenaList { public void removeArena(MinecleanerArena arena) { if(arena.hasPlayers()) { - plugin.getManager().leaveArena(arena.getCurrentPlayers(), true); + plugin.getManager().leaveArena(arena.getCurrentPlayers(), true, true); } for(UUID id : arena.getBlockDisplays()) { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroup.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroup.java deleted file mode 100644 index 4ebd571..0000000 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroup.java +++ /dev/null @@ -1,74 +0,0 @@ -package de.lunarakai.minecleaner; - -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.UUID; - -public class MinecleanerGroup { - private final Player groupCreator; - private final ArrayList groups; - private final HashMap playerGroupMap; - private final HashMap invitedPlayerGroupMap; - - private int groupSize; - - public MinecleanerGroup() { - this.groupCreator = null; - this.groups = new ArrayList<>(); - this.playerGroupMap = new HashMap<>(); - this.invitedPlayerGroupMap = new HashMap<>(); - } - - public void createGroup(Player player) { - UUID groupUUID = UUID.randomUUID(); - groups.add(groupUUID); - playerGroupMap.put(player.getUniqueId(), groupUUID); - groupSize++; - } - - private void deleteGroup(UUID groupUUID) { - groups.remove(groupUUID); - } - - public void addPlayerToGroup(Player player) { - - } - - public void invitePlayerToGroup(UUID groupUUID, Player player) { - invitedPlayerGroupMap.put(groupUUID, player.getUniqueId()); - player.sendMessage("You have been invited. :)"); - } - - private void removePlayerFromGroup(Player player) { - playerGroupMap.remove(player.getUniqueId()); - } - - public void removePlayerFromInvitedMap(UUID playerUUID) { - invitedPlayerGroupMap.remove(playerUUID); - } - - public UUID getGroupUUID(Player player) { - return playerGroupMap.get(player.getUniqueId()); - } - - public MinecleanerGroup getGroup(Player player) { - return - } - - public Player getGroupCreator(UUID groupUUID) { - return groupCreator; - } - public boolean isInGroup(Player player) { - // TODO - } - - public boolean isInvited(Player player) { - return invitedPlayerGroupMap.containsKey(player.getUniqueId()); - } - - public int getGroupSize() { - return groupSize; - } -} diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java new file mode 100644 index 0000000..aa2cd39 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java @@ -0,0 +1,137 @@ +package de.lunarakai.minecleaner; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.*; + +public class MinecleanerGroupManager { + + public class MinecleanerGroup { + + public UUID owner; + public HashSet players; + public Set invitedPlayers; + + public MinecleanerGroup(UUID owner){ + this.owner = owner; + this.players = new HashSet<>(); + this.invitedPlayers = new HashSet<>(); + } + + public UUID getOwner() { + return owner; + } + + public Set getInvitedPlayers() { + return invitedPlayers; + } + + public HashSet 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 iterator = getGroup(player).getPlayers().iterator(); iterator.hasNext();) { + if(getOwner() == iterator.next()) { + continue; + } + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + iteratorPlayer.sendMessage(Component.text("Die Gruppe wurde aufgelöst, da die Person, welche die Gruppe erstellt hat, aus der Gruppe entfernt wurde.", NamedTextColor.YELLOW)); + + } + deleteGroup(getGroup(Bukkit.getPlayer(owner))); + } + players.remove(playerUUID); + if(players.size() < 2) { + Bukkit.getPlayer(owner).sendMessage(Component.text("Die Gruppe wurde aufgelöst, da du nur noch alleine in der Gruppe bist", NamedTextColor.YELLOW)); + 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 UUID groupCreator; + private final Set groups; + + public MinecleanerGroupManager() { + this.groupCreator = null; + 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; + } + + public MinecleanerGroup getInvitedGroup(Player player){ + UUID playerUUID = player.getUniqueId(); + for (MinecleanerGroup group : groups) { + if (group.isPlayerInvited(playerUUID)) { + return group; + } + } + return null; + } + + private void deleteGroup(MinecleanerGroup minecleanerGroup) { + groups.remove(minecleanerGroup); + } + + public void deleteAllGroups() { + groups.clear(); + } +} diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index e1f8495..27099bb 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -1,6 +1,11 @@ package de.lunarakai.minecleaner; +import java.sql.Array; +import java.util.Arrays; import java.util.Iterator; +import java.util.UUID; + +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -34,7 +39,7 @@ public class MinecleanerListener implements Listener { if(e.getHand() != EquipmentSlot.HAND) return; if((e.getAction() == Action.LEFT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_BLOCK)) { Block block = e.getClickedBlock(); - MinecleanerArena arena = plugin.getArenaList().getPlayersArena(e.getPlayer()); + MinecleanerArena arena = plugin.getArenaList().getPlayerArena(e.getPlayer()); if(arena != null) { e.setCancelled(true); MinecleanerArena arenaClicked = plugin.getArenaList().getArenaAtBlock(block); @@ -88,7 +93,7 @@ public class MinecleanerListener implements Listener { } } else if(arena.hasPlayers() && arena.getArenaStatus() == ArenaStatus.COMPLETED && !hasRightClicked && (plugin.getManager().getSettingsValue("allowmanualreset", e.getPlayer()) == 1)) { plugin.getManager().getSchedulerGameOver().cancel(); - plugin.getManager().leaveArena(arenaClicked.getCurrentPlayers(), false); + plugin.getManager().leaveArena(arenaClicked.getCurrentPlayers(), false, true); } } else { arena = plugin.getArenaList().getArenaAtBlock(block); @@ -96,7 +101,18 @@ public class MinecleanerListener implements Listener { e.setCancelled(true); if(e.getHand() == EquipmentSlot.HAND) { if(arena.getArenaStatus() == ArenaStatus.INACTIVE) { - plugin.getManager().joinArena(e.getPlayer(), arena); + int arraySize = plugin.getGroupManager().getGroup(e.getPlayer()) != null ? plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size() : 1; + Player[] players = new Player[arraySize]; + + if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) { + for(Iterator iterator = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().iterator(); iterator.hasNext();) { + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + Arrays.fill(players, iteratorPlayer); + } + } else { + Arrays.fill(players, e.getPlayer()); + } + plugin.getManager().joinArena(players, arena); } else { e.getPlayer().sendMessage(ChatColor.YELLOW + "Hier spielt schon jemand anderes"); } @@ -116,7 +132,7 @@ public class MinecleanerListener implements Listener { @EventHandler public void onPlayerInventoryClick(InventoryClickEvent e) { if(e.getWhoClicked() instanceof Player player) { - MinecleanerArena arena = plugin.getArenaList().getPlayersArena(player); + MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); if(arena != null) { if(e.getInventory().equals(plugin.getManager().getConfirmPlayingInventory())) { e.setCancelled(true); @@ -125,8 +141,8 @@ public class MinecleanerListener implements Listener { boolean hasConfirmed = slot == 1 ? true : false; if(hasConfirmed) { Player[] players; - if(MinecleanerGroup.isInGroup(player)) { - players = new Player[MinecleanerGroup.getGroupSize()]; + if(plugin.getGroupManager().getGroup(player) != null) { + players = new Player[plugin.getGroupManager().getGroup(player).getPlayers().size()]; players[0] = player; } else { players = new Player[1]; @@ -146,10 +162,21 @@ public class MinecleanerListener implements Listener { @EventHandler public void onPlayerInventoryClose(InventoryCloseEvent e) { if(e.getPlayer() instanceof Player player) { - MinecleanerArena arena = plugin.getArenaList().getPlayersArena(player); + MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); if(arena != null) { 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().getGroup(player).getPlayers().size() : 1; + Player[] players = new Player[arraySize]; + + if(plugin.getGroupManager().getGroup(player) != null) { + for(Iterator 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); } } } @@ -158,20 +185,43 @@ public class MinecleanerListener implements Listener { @EventHandler public void onPlayerMove(PlayerMoveEvent e) { final Player player = e.getPlayer(); - MinecleanerArena arena = plugin.getArenaList().getPlayersArena(player); + MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); if(arena != null) { - if(arena.isTooFarAway(player)) { + if(arena.isTooFarAway(player) && plugin.getGroupManager().getGroup(player) == null) { player.sendMessage(ChatColor.YELLOW + "Du hast dich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen."); - plugin.getManager().leaveArena(player, false); + Player[] players = new Player[] { + player + }; + plugin.getManager().leaveArena(players, false, true); } } } @EventHandler public void onPlayerQuit(PlayerQuitEvent e) { - MinecleanerArena arena = plugin.getArenaList().getPlayersArena(e.getPlayer()); + MinecleanerArena arena = plugin.getArenaList().getPlayerArena(e.getPlayer()); if(arena != null) { - plugin.getManager().leaveArena(e.getPlayer(), false); + if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) { + if(plugin.getGroupManager().getGroup(e.getPlayer()).getOwner().equals(e.getPlayer())) { + Player[] players = new Player[plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size()]; + for(Iterator iterator = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().iterator(); iterator.hasNext();) { + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + Arrays.fill(players, iteratorPlayer); + } + plugin.getManager().leaveArena(players, false, true); + return; + } + Player[] players = new Player[] { + e.getPlayer() + }; + plugin.getGroupManager().getGroup(e.getPlayer()).removePlayerFromGroup(e.getPlayer()); + plugin.getManager().leaveArena(players, false, false); + } else { + Player[] players = new Player[] { + e.getPlayer() + }; + plugin.getManager().leaveArena(players, false, true); + } } } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index 577cf9a..399bf81 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -133,31 +133,52 @@ public class MinecleanerManager { if (!players[0].hasPermission(MinecleanerPlugin.PERMISSION_PLAY)) { return; } - Preconditions.checkArgument(plugin.getArenaList().getPlayersArena(players) == 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"); arena.addJoiningPlayers(players); plugin.getArenaList().setArenaForPlayers(players, arena); - players[0].openInventory(confirmPlayingInventory); - } - - public void leaveArena(Player[] players, boolean message) { - MinecleanerArena arena = plugin.getArenaList().getPlayersArena(players); - arena.setArenaStaus(ArenaStatus.INACTIVE); - Preconditions.checkArgument(arena != null, "player is in no arena"); for(int i = 0; i < players.length; i++) { - players[i].closeInventory(); - } - arena.removePlayers(); - plugin.getArenaList().setArenaForPlayers(players, null); - if(message) { - for(int i = 0; i < players.length; i++) { - players[i].sendMessage(ChatColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); + 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[] players, boolean message, boolean reset) { + 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); + } + + Preconditions.checkArgument(arena != null, "player is in no arena"); + + if(reset) { + arena.setArenaStaus(ArenaStatus.INACTIVE); + for(int i = 0; i < players.length; i++) { + players[i].closeInventory(); + } + arena.removePlayers(); + if(message) { + for(int i = 0; i < players.length; i++) { + players[i].sendMessage(ChatColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); + } + } + } + + plugin.getArenaList().setArenaForPlayers(players, null); + } + + public void startGame(Player[] players) { - MinecleanerArena arena = plugin.getArenaList().getPlayersArena(players); + MinecleanerArena arena = plugin.getArenaList().getPlayerArena(players); Preconditions.checkArgument(arena != null, "player is in no arena"); Preconditions.checkState(arena.getArenaStatus() == ArenaStatus.CONFIRM_PLAYING, "not confirming playing status"); arena.startNewGame(); @@ -167,30 +188,35 @@ public class MinecleanerManager { } - public void handleGameover(Player player, MinecleanerArena arena, boolean isSuccessfullyCleared) { - World world = player.getWorld(); + public void handleGameover(Player[] player, MinecleanerArena arena, boolean isSuccessfullyCleared) { + if(plugin.getGroupManager().getGroup(player[0]) != null) { + // Todo + // eigene Extra Punkte + return; + } + World world = player[0].getWorld(); PlayerStatistics ps = null; StatisticKey sg = null; if(plugin.isStatisticsEnabled()) { - ps = plugin.getCubesideStatistics().getStatistics(player.getUniqueId()); + ps = plugin.getCubesideStatistics().getStatistics(player[0].getUniqueId()); sg = statisticsTotalGamesPlayed.get(arena.getWidthIndex()); } if(!isSuccessfullyCleared) { - world.playSound(player.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); - player.sendMessage(ChatColor.YELLOW + "Game Over! Du konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!"); + world.playSound(player[0].getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); + player[0].sendMessage(ChatColor.YELLOW + "Game Over! Du konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!"); arena.showMines(); if(sg != null && plugin.isStatisticsEnabled()) { ps.increaseScore(sg, 1); } - scheduleArenaReset(player, arena); + scheduleArenaReset(player[0], arena); return; } 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()) { ps.increaseScore(sg, 1); @@ -207,9 +233,9 @@ public class MinecleanerManager { if(sg != null) { ps.minScore(sg, millis, 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(ChatColor.GOLD + "Herzlichen Glückwunsch! Du hast eine neue Bestzeit erreicht! " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) ); } 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(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!"); } }); } @@ -237,10 +263,10 @@ public class MinecleanerManager { } } } 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(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!"); } - scheduleArenaReset(player, arena); + scheduleArenaReset(player[0], arena); } private void scheduleArenaReset(Player player, MinecleanerArena arena) { @@ -249,7 +275,17 @@ public class MinecleanerManager { if (arena.getCurrentPlayers() == null) { arena.removePlayers(); } else { - leaveArena(player, false); + int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroup(player).getPlayers().size() : 1; + Player[] players = new Player[arraySize]; + if(plugin.getGroupManager().getGroup(player) != null) { + for(Iterator iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + Arrays.fill(players, iteratorPlayer); + } + } else { + Arrays.fill(players, player); + } + leaveArena(players, false, true); } } }, plugin.getManager().getSettingsValue("resettime", player) * 20L); @@ -258,14 +294,13 @@ public class MinecleanerManager { public void clearAllArenas() { for(MinecleanerArena arena : plugin.getArenaList().getArenas()) { if(arena.hasPlayers()) { - leaveArena(arena.getCurrentPlayers(), true); + leaveArena(arena.getCurrentPlayers(), true, true); } } } - public void handleFieldClick(@NotNull Player player, int x, int y, boolean hasRightClicked) { - MinecleanerArena arena = plugin.getArenaList().getPlayersArena(player); + MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); Preconditions.checkArgument(arena != null, "player is in no arena"); Preconditions.checkState(arena.getArenaStatus() == ArenaStatus.PLAYING, "not running"); diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java index 232587d..813bef9 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java @@ -25,6 +25,7 @@ public final class MinecleanerPlugin extends JavaPlugin { public static final String PERMISSION_ADMIN = "minecleaner.admin"; private MinecleanerManager minecleanerManager; + private MinecleanerGroupManager minecleanerGroupManager; private ArenaList arenaList; private CubesideStatisticsAPI cubesideStatistics; private PlayerUUIDCache playerUUIDCache; @@ -64,6 +65,7 @@ public final class MinecleanerPlugin extends JavaPlugin { arenaList.load(); minecleanerManager = new MinecleanerManager(this); + minecleanerGroupManager = new MinecleanerGroupManager(); getServer().getPluginManager().registerEvents(new MinecleanerListener(this), this); CommandRouter minecleanerCommand = new CommandRouter(getCommand("minecleaner")); @@ -84,6 +86,9 @@ public final class MinecleanerPlugin extends JavaPlugin { if(minecleanerManager != null) { minecleanerManager.clearAllArenas(); } + if(minecleanerGroupManager != null) { + minecleanerGroupManager.deleteAllGroups(); + } } public ArenaList getArenaList() { @@ -94,6 +99,8 @@ public final class MinecleanerPlugin extends JavaPlugin { return minecleanerManager; } + public MinecleanerGroupManager getGroupManager() { return minecleanerGroupManager; } + public boolean isStatisticsEnabled() { return cubesideStatistics != null; } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java index 5d6e9c5..2ac51ee 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java @@ -100,7 +100,7 @@ public class MinecleanerSettingsInventory extends AbstractWindow { if(plugin.getManager().getSettingsValue("timer", player) == 0) { plugin.getManager().updateSettingsValue("timer", 1, player); } else { - MinecleanerArena arena = plugin.getArenaList().getPlayersArena(player); + MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); plugin.getManager().updateSettingsValue("timer", 0, player); if(arena != null) { arena.updateIngameInfoTexts(); diff --git a/src/main/java/de/lunarakai/minecleaner/commands/DenyCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/DenyCommand.java deleted file mode 100644 index 4a7f759..0000000 --- a/src/main/java/de/lunarakai/minecleaner/commands/DenyCommand.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.lunarakai.minecleaner.commands; - -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.bukkit.commands.exceptions.*; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; - -public class DenyCommand extends SubCommand { - @Override - public boolean onCommand(CommandSender commandSender, Command command, String s, String s1, ArgsParser argsParser) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { - return false; - } -} diff --git a/src/main/java/de/lunarakai/minecleaner/commands/AcceptCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java similarity index 60% rename from src/main/java/de/lunarakai/minecleaner/commands/AcceptCommand.java rename to src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java index 4764418..1db0b17 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/AcceptCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java @@ -1,18 +1,16 @@ -package de.lunarakai.minecleaner.commands; +package de.lunarakai.minecleaner.commands.groups; import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.bukkit.commands.exceptions.*; import de.iani.cubesideutils.commands.ArgsParser; -import de.lunarakai.minecleaner.MinecleanerGroup; import de.lunarakai.minecleaner.MinecleanerPlugin; 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; -import java.util.HashMap; -import java.util.UUID; - public class AcceptCommand extends SubCommand { private final MinecleanerPlugin plugin; @@ -39,12 +37,18 @@ public class AcceptCommand extends SubCommand { public boolean onCommand(CommandSender commandSender, Command command, String s, String s1, ArgsParser argsParser) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { Player player = (Player) commandSender; - if() { - UUID groupUUID = invitedPlayersHashMap.get(player.getUniqueId()); + if(plugin.getGroupManager().getInvitedGroup(player) != null && plugin.getGroupManager().getGroup(player) == null) { + Player groupOwner = Bukkit.getPlayer(plugin.getGroupManager().getInvitedGroup(player).getOwner()); + plugin.getGroupManager().getInvitedGroup(player).addPlayerToGroup(player); + assert groupOwner != null; + groupOwner.sendMessage(Component.text(player.getName() + " hat deine Einladung angenommen.", NamedTextColor.GREEN)); + player.sendMessage(Component.text("Du hast die Einladung angenommen", NamedTextColor.GREEN)); + + return true; } else { - player.sendMessage(Component.text("Du wurdest in keine Gruppe eingeladen.")); + player.sendMessage(Component.text("Du wurdest in keine Gruppe eingeladen.", NamedTextColor.YELLOW)); } - return false; + return true; } } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java new file mode 100644 index 0000000..519fa86 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java @@ -0,0 +1,56 @@ +package de.lunarakai.minecleaner.commands.groups; + +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.bukkit.commands.exceptions.*; +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.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()); + plugin.getGroupManager().getInvitedGroup(player).removePlayerFromInvitedList(player); + + assert groupOwner != null; + groupOwner.sendMessage(Component.text(player.getName() + " hat deine Einladung abgelehnt.", NamedTextColor.RED)); + player.sendMessage(Component.text("Du hast die Einladung abgelehnt", NamedTextColor.YELLOW)); + + return true; + } else { + player.sendMessage(Component.text("Du wurdest in keine Gruppe eingeladen.", NamedTextColor.YELLOW)); + } + return true; + } +} diff --git a/src/main/java/de/lunarakai/minecleaner/commands/InviteCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java similarity index 55% rename from src/main/java/de/lunarakai/minecleaner/commands/InviteCommand.java rename to src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java index 2eb5245..56abba0 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/InviteCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java @@ -1,17 +1,17 @@ -package de.lunarakai.minecleaner.commands; +package de.lunarakai.minecleaner.commands.groups; import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.bukkit.commands.exceptions.*; import de.iani.cubesideutils.commands.ArgsParser; -import de.lunarakai.minecleaner.MinecleanerGroup; +import de.lunarakai.minecleaner.MinecleanerGroupManager; import de.lunarakai.minecleaner.MinecleanerPlugin; -import net.md_5.bungee.api.ChatColor; +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; -import java.util.UUID; - public class InviteCommand extends SubCommand { /* TODO: @@ -45,18 +45,30 @@ public class InviteCommand extends SubCommand { public boolean onCommand(CommandSender sender, Command command, String s, String commandString, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { Player player = (Player) sender; if(args.remaining() < 1 || args.remaining() >= 2) { - sender.sendMessage(ChatColor.DARK_RED + commandString + getUsage()); + sender.sendMessage(Component.text(commandString + getUsage(), NamedTextColor.DARK_RED)); return true; } String playerName = args.getNext().trim(); Player invitedPlayer = plugin.getServer().getPlayer(playerName); - MinecleanerGroup group = new MinecleanerGroup(); - group.createGroup(player); - UUID groupUUID = group.getGroupUUID(player); + MinecleanerGroupManager groupManager = plugin.getGroupManager(); + if(groupManager.getInvitedGroup(player) != null) { + player.sendMessage(Component.text("Du wurdest bereits in eine Gruppe eingeladen. Bitte kümmere dich zuerst um die Einladung bevor du eine eigene Gruppe erstellst.", NamedTextColor.YELLOW)); + return true; + } - group.invitePlayerToGroup(groupUUID, invitedPlayer); + if(groupManager.getGroup(player) != null && Bukkit.getPlayer(groupManager.getGroup(player).getOwner()).equals(player)) { + player.sendMessage(Component.text("Nur als Ersteller der Gruppe bist du berechtigt Leute einzuladen.", NamedTextColor.YELLOW)); + return true; + } - return false; + if(groupManager.getGroup(player) == null) { + groupManager.createGroup(player); + } + + assert invitedPlayer != null; + groupManager.getGroup(player).invitePlayerToGroup(invitedPlayer); + + return true; } } From 70605461ef3a2cfce646d03491e08cce3213762a Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Thu, 16 May 2024 12:28:45 +0200 Subject: [PATCH 37/53] duo mode works but spaghetti (+ 2 small known bugs) --- .../de/lunarakai/minecleaner/ArenaList.java | 64 ++++++++++---- .../minecleaner/MinecleanerGroupManager.java | 13 +-- .../minecleaner/MinecleanerListener.java | 57 ++++++++++--- .../minecleaner/MinecleanerManager.java | 85 ++++++++++++++++--- .../minecleaner/MinecleanerPlugin.java | 27 ++++-- .../minecleaner/commands/DeleteCommand.java | 3 - .../minecleaner/commands/ListCommand.java | 1 - .../commands/ListPlayersInArenaCommand.java | 63 ++++++++++++++ .../minecleaner/commands/StatsCommand.java | 1 - .../commands/groups/AcceptCommand.java | 6 +- .../commands/groups/DenyCommand.java | 13 ++- .../groups/DismantleGroupCommand.java | 66 ++++++++++++++ .../commands/groups/InviteCommand.java | 13 ++- .../groups/ListGroupMembersCommand.java | 62 ++++++++++++++ 14 files changed, 413 insertions(+), 61 deletions(-) create mode 100644 src/main/java/de/lunarakai/minecleaner/commands/ListPlayersInArenaCommand.java create mode 100644 src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java create mode 100644 src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java diff --git a/src/main/java/de/lunarakai/minecleaner/ArenaList.java b/src/main/java/de/lunarakai/minecleaner/ArenaList.java index c327160..90068d2 100644 --- a/src/main/java/de/lunarakai/minecleaner/ArenaList.java +++ b/src/main/java/de/lunarakai/minecleaner/ArenaList.java @@ -2,9 +2,12 @@ package de.lunarakai.minecleaner; import java.io.File; import java.io.IOException; -import java.util.*; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.UUID; import java.util.logging.Level; - import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; @@ -119,13 +122,18 @@ public class ArenaList { } public MinecleanerArena getPlayerArena(Player player) { + if(playersInArena.get(player.getUniqueId()) == null) { + return null; + } int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroup(player).getPlayers().size() : 1; Player[] players = new Player[arraySize]; if(plugin.getGroupManager().getGroup(player) != null) { + int i = 0; for(Iterator iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - Arrays.fill(players, iteratorPlayer); + players[i] = iteratorPlayer; + i++; } } else { Arrays.fill(players, player); @@ -134,21 +142,41 @@ public class ArenaList { } public MinecleanerArena getPlayerArena(Player[] players) { - if(plugin.getGroupManager().getGroup(players[0]) != null) { - MinecleanerArena[] arenas = new MinecleanerArena[players.length]; - for(int i = 0; i < players.length; i++) { - arenas[i] = playersInArena.get(players[i].getUniqueId()); - } - boolean match = Arrays.stream(arenas).allMatch(s -> s.equals(arenas[0])); - if(match) { - return arenas[0]; - } else { - return null; - } - } else { - return playersInArena.get(players[0].getUniqueId()); - } - + 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) { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java index aa2cd39..94444bf 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java @@ -1,12 +1,14 @@ package de.lunarakai.minecleaner; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import java.util.UUID; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import java.util.*; - public class MinecleanerGroupManager { public class MinecleanerGroup { @@ -19,6 +21,8 @@ public class MinecleanerGroupManager { this.owner = owner; this.players = new HashSet<>(); this.invitedPlayers = new HashSet<>(); + + players.add(owner); } public UUID getOwner() { @@ -90,7 +94,7 @@ public class MinecleanerGroupManager { } } - private final UUID groupCreator; + private UUID groupCreator; private final Set groups; public MinecleanerGroupManager() { @@ -103,7 +107,6 @@ public class MinecleanerGroupManager { if (getGroup(player) != null) { return; } - groups.add(new MinecleanerGroup(player.getUniqueId())); } @@ -127,7 +130,7 @@ public class MinecleanerGroupManager { return null; } - private void deleteGroup(MinecleanerGroup minecleanerGroup) { + public void deleteGroup(MinecleanerGroup minecleanerGroup) { groups.remove(minecleanerGroup); } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 27099bb..9921d2b 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -1,10 +1,11 @@ package de.lunarakai.minecleaner; -import java.sql.Array; import java.util.Arrays; import java.util.Iterator; import java.util.UUID; - +import java.util.logging.Level; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; @@ -101,13 +102,18 @@ public class MinecleanerListener implements Listener { e.setCancelled(true); if(e.getHand() == EquipmentSlot.HAND) { if(arena.getArenaStatus() == ArenaStatus.INACTIVE) { - int arraySize = plugin.getGroupManager().getGroup(e.getPlayer()) != null ? plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size() : 1; + int arraySize = 1; + if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) { + arraySize = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size(); + } Player[] players = new Player[arraySize]; if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) { + int i = 0; for(Iterator iterator = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - Arrays.fill(players, iteratorPlayer); + players[i] = iteratorPlayer; + i++; } } else { Arrays.fill(players, e.getPlayer()); @@ -187,12 +193,14 @@ public class MinecleanerListener implements Listener { final Player player = e.getPlayer(); MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); if(arena != null) { - if(arena.isTooFarAway(player) && plugin.getGroupManager().getGroup(player) == null) { - player.sendMessage(ChatColor.YELLOW + "Du hast dich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen."); - Player[] players = new Player[] { - player - }; - plugin.getManager().leaveArena(players, false, true); + if(plugin.getGroupManager().getGroup(player) == null) { + if((arena.isTooFarAway(player))) { + player.sendMessage(ChatColor.YELLOW + "Du hast dich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen."); + Player[] players = new Player[] { + player + }; + plugin.getManager().leaveArena(players, false, true); + } } } } @@ -222,6 +230,35 @@ public class MinecleanerListener implements Listener { }; plugin.getManager().leaveArena(players, false, true); } + } else { + if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) { + if(plugin.getGroupManager().getGroup(e.getPlayer()).getOwner().equals(e.getPlayer())) { + int i = 0; + Player[] players = new Player[plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size()]; + for(Iterator iterator = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().iterator(); iterator.hasNext();) { + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + if(iteratorPlayer == e.getPlayer()) { + i++; + continue; + } + players[i] = iteratorPlayer; + players[i].sendMessage(Component.text("Die " + plugin.getDisplayedPluginName() + "gruppe in der du dich befindest wurde aufgelöst. Die Person, welche die Gruppe erstellt hat, hat den Server verlassen", NamedTextColor.YELLOW)); + i++; + } + if(plugin.getArenaList().getPlayerArena(e.getPlayer()) != null) { + plugin.getManager().leaveArena(players, false, true); + } + return; + } + Player[] players = new Player[] { + e.getPlayer() + }; + plugin.getGroupManager().getGroup(e.getPlayer()).removePlayerFromGroup(e.getPlayer()); + if(plugin.getArenaList().getPlayerArena(e.getPlayer()) != null) { + plugin.getManager().leaveArena(players, false, false); + } + + } } } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index 399bf81..e1f7115 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -1,10 +1,17 @@ package de.lunarakai.minecleaner; import de.iani.cubesidestats.api.SettingKey; - -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; import java.util.Map.Entry; +import java.util.Objects; +import java.util.UUID; import java.util.function.Consumer; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.OfflinePlayer; @@ -130,11 +137,13 @@ public class MinecleanerManager { public void joinArena(Player[] players, MinecleanerArena arena) { - if (!players[0].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; } + Preconditions.checkArgument(plugin.getArenaList().getPlayerArena(players) == null, "player is in an arena"); Preconditions.checkArgument(arena.getArenaStatus() == ArenaStatus.INACTIVE, "arena is in use"); + arena.addJoiningPlayers(players); plugin.getArenaList().setArenaForPlayers(players, arena); for(int i = 0; i < players.length; i++) { @@ -157,23 +166,34 @@ public class MinecleanerManager { } else { arena = plugin.getArenaList().getPlayerArena(players); } + Player[] players1 = group != null ? new Player[group.getPlayers().size()] : new Player[1]; + if(plugin.getGroupManager().getGroup(players[0]) != null) { + int i = 0; + for(Iterator iterator = group.getPlayers().iterator(); iterator.hasNext();) { + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + players1[i] = iteratorPlayer; + i++; + } + } else { + players1 = players; + } Preconditions.checkArgument(arena != null, "player is in no arena"); if(reset) { arena.setArenaStaus(ArenaStatus.INACTIVE); - for(int i = 0; i < players.length; i++) { - players[i].closeInventory(); + for(int i = 0; i < players1.length; i++) { + players1[i].closeInventory(); } arena.removePlayers(); if(message) { for(int i = 0; i < players.length; i++) { - players[i].sendMessage(ChatColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); + players1[i].sendMessage(ChatColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); } } } - plugin.getArenaList().setArenaForPlayers(players, null); + plugin.getArenaList().setArenaForPlayers(players1, null); } @@ -182,16 +202,53 @@ public class MinecleanerManager { Preconditions.checkArgument(arena != null, "player is in no arena"); Preconditions.checkState(arena.getArenaStatus() == ArenaStatus.CONFIRM_PLAYING, "not confirming playing status"); arena.startNewGame(); - for(int i = 0; i < players.length; i++) { - players[i].sendMessage(ChatColor.YELLOW + "Du hast eine neue Runde " + plugin.getDisplayedPluginName() + " gestartet."); - } + + if(plugin.getGroupManager().getGroup(players[0]) != null) { + for(Iterator iterator = plugin.getGroupManager().getGroup(players[0]).getPlayers().iterator(); iterator.hasNext();) { + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + assert iteratorPlayer != null; + iteratorPlayer.sendMessage(Component.text("Du hast eine neue Runde " + plugin.getDisplayedPluginName() + " gestartet.", NamedTextColor.YELLOW)); + } + } else { + players[0].sendMessage(Component.text("Du hast eine neue Runde " + plugin.getDisplayedPluginName() + " gestartet.", NamedTextColor.YELLOW)); + } } public void handleGameover(Player[] player, MinecleanerArena arena, boolean isSuccessfullyCleared) { if(plugin.getGroupManager().getGroup(player[0]) != null) { - // Todo - // eigene Extra Punkte + World world = player[0].getWorld(); + if(!isSuccessfullyCleared) { + world.playSound(player[0].getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); + + int arraySize = plugin.getGroupManager().getGroup(player[0]) != null ? plugin.getGroupManager().getGroup(player[0]).getPlayers().size() : 1; + Player[] players = new Player[arraySize]; + + for(Iterator iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) { + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + assert iteratorPlayer != null; + iteratorPlayer.sendMessage(Component.text("Game Over! Ihr konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!", NamedTextColor.YELLOW)); + } + + arena.showMines(); + scheduleArenaReset(player[0], arena); + return; + } + // Todo: Punkte durch Anzahl der Leute in der Gruppe teilen => bei floats abrunden (heißt für Kleine (1 Punkt normal) => 0 Punkte in der Gruppe) + int millis = (int) (System.currentTimeMillis() - arena.getCurrentGameStartTime()); + world.playSound(player[0].getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f); + int arraySize = plugin.getGroupManager().getGroup(player[0]) != null ? plugin.getGroupManager().getGroup(player[0]).getPlayers().size() : 1; + Player[] players = new Player[arraySize]; + + for(Iterator iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) { + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + assert iteratorPlayer != null; + iteratorPlayer.sendMessage(Component.text( + "Glückwunsch, ihr konntest das " + plugin.getDisplayedPluginName() + "-Feld in ", NamedTextColor.YELLOW) + .append(Component.text(MinecleanerStringUtil.timeToString(millis, false), NamedTextColor.RED)) + .append(Component.text(" erfolgreich lösen!", NamedTextColor.YELLOW))); + } + scheduleArenaReset(player[0], arena); return; } World world = player[0].getWorld(); @@ -277,10 +334,12 @@ public class MinecleanerManager { } else { int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroup(player).getPlayers().size() : 1; Player[] players = new Player[arraySize]; + int i = 0; if(plugin.getGroupManager().getGroup(player) != null) { for(Iterator iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - Arrays.fill(players, iteratorPlayer); + players[i] = iteratorPlayer; + i++; } } else { Arrays.fill(players, player); diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java index 813bef9..6112882 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java @@ -1,6 +1,19 @@ 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.InfoCommand; +import de.lunarakai.minecleaner.commands.ListCommand; +import de.lunarakai.minecleaner.commands.ListPlayersInArenaCommand; import de.lunarakai.minecleaner.commands.SettingsCommand; +import de.lunarakai.minecleaner.commands.StatsCommand; +import de.lunarakai.minecleaner.commands.groups.AcceptCommand; +import de.lunarakai.minecleaner.commands.groups.DenyCommand; +import de.lunarakai.minecleaner.commands.groups.DismantleGroupCommand; +import de.lunarakai.minecleaner.commands.groups.InviteCommand; +import de.lunarakai.minecleaner.commands.groups.ListGroupMembersCommand; import net.kyori.adventure.key.Key; import net.kyori.adventure.translation.GlobalTranslator; import net.kyori.adventure.translation.TranslationRegistry; @@ -9,12 +22,6 @@ import org.bukkit.plugin.java.JavaPlugin; import de.iani.cubesidestats.api.CubesideStatisticsAPI; import de.iani.cubesideutils.bukkit.commands.CommandRouter; import de.iani.playerUUIDCache.PlayerUUIDCache; -import de.lunarakai.minecleaner.commands.CreateCommand; -import de.lunarakai.minecleaner.commands.DeleteCommand; -import de.lunarakai.minecleaner.commands.DeletePlayerScoreCommand; -import de.lunarakai.minecleaner.commands.InfoCommand; -import de.lunarakai.minecleaner.commands.ListCommand; -import de.lunarakai.minecleaner.commands.StatsCommand; import java.util.Locale; import java.util.ResourceBundle; @@ -73,6 +80,14 @@ public final class MinecleanerPlugin extends JavaPlugin { minecleanerCommand.addCommandMapping(new DeleteCommand(this), "delete"); minecleanerCommand.addCommandMapping(new ListCommand(this), "list"); minecleanerCommand.addCommandMapping(new InfoCommand(this), "info"); + minecleanerCommand.addCommandMapping(new ListPlayersInArenaCommand(this), "currentplayers"); + + // 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"); if(isStatisticsEnabled()) { minecleanerCommand.addCommandMapping(new SettingsCommand(this), "settings"); diff --git a/src/main/java/de/lunarakai/minecleaner/commands/DeleteCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/DeleteCommand.java index 28a47ea..c644cbe 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/DeleteCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/DeleteCommand.java @@ -2,7 +2,6 @@ package de.lunarakai.minecleaner.commands; import java.util.Collection; import java.util.List; - import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -18,7 +17,6 @@ import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; import de.iani.cubesideutils.commands.ArgsParser; import de.lunarakai.minecleaner.MinecleanerArena; import de.lunarakai.minecleaner.MinecleanerPlugin; -import net.md_5.bungee.api.ChatColor; import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; @@ -67,5 +65,4 @@ public class DeleteCommand extends SubCommand { public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { return List.of(); } - } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java index 2b176b4..8766cc2 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java @@ -2,7 +2,6 @@ package de.lunarakai.minecleaner.commands; import java.util.Collection; import java.util.List; - import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Location; import org.bukkit.command.Command; diff --git a/src/main/java/de/lunarakai/minecleaner/commands/ListPlayersInArenaCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/ListPlayersInArenaCommand.java new file mode 100644 index 0000000..d125710 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/commands/ListPlayersInArenaCommand.java @@ -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 net.kyori.adventure.text.Component; +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 ""; + } + + @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) { + player.sendMessage(Component.text("Players in Arena: " + Arrays.toString(arena.getCurrentPlayers()), NamedTextColor.GRAY)); + } else { + player.sendMessage(Component.text("Hier befindet sich keine Arena.", NamedTextColor.GRAY)); + } + return true; + } + + @Override + public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { + return List.of(); + } +} diff --git a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java index dac1757..eae5b99 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java @@ -2,7 +2,6 @@ package de.lunarakai.minecleaner.commands; import java.util.Map.Entry; import java.util.function.Consumer; - import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.command.Command; diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java index 1db0b17..b000401 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java @@ -1,7 +1,11 @@ package de.lunarakai.minecleaner.commands.groups; import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.bukkit.commands.exceptions.*; +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; diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java index 519fa86..2ebcc7c 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java @@ -1,8 +1,13 @@ 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.bukkit.commands.exceptions.*; import de.iani.cubesideutils.commands.ArgsParser; +import de.lunarakai.minecleaner.MinecleanerGroupManager; import de.lunarakai.minecleaner.MinecleanerPlugin; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -41,7 +46,11 @@ public class DenyCommand extends SubCommand { if(plugin.getGroupManager().getInvitedGroup(player) != null && plugin.getGroupManager().getGroup(player) == null) { Player groupOwner = Bukkit.getPlayer(plugin.getGroupManager().getInvitedGroup(player).getOwner()); - plugin.getGroupManager().getInvitedGroup(player).removePlayerFromInvitedList(player); + 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; groupOwner.sendMessage(Component.text(player.getName() + " hat deine Einladung abgelehnt.", NamedTextColor.RED)); diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java new file mode 100644 index 0000000..f8ee5d3 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java @@ -0,0 +1,66 @@ +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 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 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) { + player.sendMessage(Component.text("Du bist in keiner Gruppe die du auflösen könntest.", NamedTextColor.YELLOW)); + return true; + } + Player groupOwnerPlayer = Bukkit.getPlayer(plugin.getGroupManager().getGroup(player).getOwner()); + + if(player != groupOwnerPlayer) { + player.sendMessage(Component.text("Du bist nicht berechtigt deine Gruppe aufzulösen.", NamedTextColor.YELLOW)); + return true; + } + + + for(Iterator iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + iteratorPlayer.sendMessage(Component.text("Die Gruppe in der du dich befindest wurde aufgelöst.", NamedTextColor.YELLOW)); + } + plugin.getGroupManager().deleteGroup(plugin.getGroupManager().getGroup(player)); + + return true; + } +} diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java index 56abba0..2f09b62 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java @@ -1,7 +1,11 @@ package de.lunarakai.minecleaner.commands.groups; import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.bukkit.commands.exceptions.*; +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; @@ -51,6 +55,11 @@ public class InviteCommand extends SubCommand { String playerName = args.getNext().trim(); Player invitedPlayer = plugin.getServer().getPlayer(playerName); + if(invitedPlayer == player) { + player.sendMessage(Component.text("Du kannst dich nicht selber in eine Gruppe einladen.", NamedTextColor.DARK_RED)); + return true; + } + MinecleanerGroupManager groupManager = plugin.getGroupManager(); if(groupManager.getInvitedGroup(player) != null) { player.sendMessage(Component.text("Du wurdest bereits in eine Gruppe eingeladen. Bitte kümmere dich zuerst um die Einladung bevor du eine eigene Gruppe erstellst.", NamedTextColor.YELLOW)); @@ -67,6 +76,8 @@ public class InviteCommand extends SubCommand { } 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)); groupManager.getGroup(player).invitePlayerToGroup(invitedPlayer); return true; diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java new file mode 100644 index 0000000..4f3e405 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java @@ -0,0 +1,62 @@ +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 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) { + player.sendMessage(Component.text("Du bist in keiner Gruppe.", NamedTextColor.YELLOW)); + return true; + } + + player.sendMessage(Component.text("-- Mitglieder deiner " + plugin.getDisplayedPluginName() + "gruppe --", NamedTextColor.AQUA)); + for(Iterator 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; + } +} From 50f51126bbe77845b9b7ce6180597cf210b59640 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Thu, 16 May 2024 12:52:48 +0200 Subject: [PATCH 38/53] field resets when group creator is too far away, still spaghetti --- .../minecleaner/MinecleanerGroupManager.java | 2 -- .../minecleaner/MinecleanerListener.java | 23 ++++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java index 94444bf..851d63d 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java @@ -94,11 +94,9 @@ public class MinecleanerGroupManager { } } - private UUID groupCreator; private final Set groups; public MinecleanerGroupManager() { - this.groupCreator = null; this.groups = new HashSet<>(); } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 9921d2b..92cb081 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -201,6 +201,26 @@ public class MinecleanerListener implements Listener { }; 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 iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + if(iteratorPlayer == ownerPlayer) { + iteratorPlayer.sendMessage(Component.text("Du hast dich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen.", NamedTextColor.YELLOW)); + continue; + } + assert iteratorPlayer != null; + iteratorPlayer.sendMessage(Component.text("Der Ersteller der Gruppe hat sich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen.", NamedTextColor.YELLOW)); + } + Player[] players = new Player[] { + ownerPlayer + }; + plugin.getManager().leaveArena(players, false, true); + } + } } } } @@ -212,9 +232,10 @@ public class MinecleanerListener implements Listener { if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) { if(plugin.getGroupManager().getGroup(e.getPlayer()).getOwner().equals(e.getPlayer())) { Player[] players = new Player[plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size()]; + int i = 0; for(Iterator iterator = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - Arrays.fill(players, iteratorPlayer); + players[i] = iteratorPlayer; } plugin.getManager().leaveArena(players, false, true); return; From 5df021e3dd06e86dec77f23e1c38f89befa94fac Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Thu, 16 May 2024 15:17:35 +0200 Subject: [PATCH 39/53] a little bit less spaghetti and statistics should work for groups now --- .../minecleaner/MinecleanerListener.java | 95 ++++++++++--------- .../minecleaner/MinecleanerManager.java | 93 +++++++++++------- 2 files changed, 109 insertions(+), 79 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 92cb081..a1bcaab 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -3,7 +3,6 @@ package de.lunarakai.minecleaner; import java.util.Arrays; import java.util.Iterator; import java.util.UUID; -import java.util.logging.Level; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; @@ -227,62 +226,72 @@ public class MinecleanerListener implements Listener { @EventHandler public void onPlayerQuit(PlayerQuitEvent e) { - MinecleanerArena arena = plugin.getArenaList().getPlayerArena(e.getPlayer()); + Player player = e.getPlayer(); + MinecleanerGroupManager groupManager = plugin.getGroupManager(); + MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); + if(arena != null) { - if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) { - if(plugin.getGroupManager().getGroup(e.getPlayer()).getOwner().equals(e.getPlayer())) { - Player[] players = new Player[plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size()]; - int i = 0; - for(Iterator iterator = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().iterator(); iterator.hasNext();) { - Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - players[i] = iteratorPlayer; - } + if(groupManager.getGroup(player) != null) { + MinecleanerGroupManager.MinecleanerGroup group = groupManager.getGroup(player); + Player ownerPlayer = Bukkit.getPlayer(group.getOwner()); + if(player == ownerPlayer) { + Player[] players = iterateOverGroupMembersOnCreatorPlayerQuit(player, groupManager, group); plugin.getManager().leaveArena(players, false, true); - return; + } else { + iterateOverGroupMembersOnPlayerQuit(player, group); } - Player[] players = new Player[] { - e.getPlayer() - }; - plugin.getGroupManager().getGroup(e.getPlayer()).removePlayerFromGroup(e.getPlayer()); - plugin.getManager().leaveArena(players, false, false); } else { Player[] players = new Player[] { e.getPlayer() }; plugin.getManager().leaveArena(players, false, true); } - } else { - if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) { - if(plugin.getGroupManager().getGroup(e.getPlayer()).getOwner().equals(e.getPlayer())) { - int i = 0; - Player[] players = new Player[plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().size()]; - for(Iterator iterator = plugin.getGroupManager().getGroup(e.getPlayer()).getPlayers().iterator(); iterator.hasNext();) { - Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - if(iteratorPlayer == e.getPlayer()) { - i++; - continue; - } - players[i] = iteratorPlayer; - players[i].sendMessage(Component.text("Die " + plugin.getDisplayedPluginName() + "gruppe in der du dich befindest wurde aufgelöst. Die Person, welche die Gruppe erstellt hat, hat den Server verlassen", NamedTextColor.YELLOW)); - i++; - } - if(plugin.getArenaList().getPlayerArena(e.getPlayer()) != null) { - plugin.getManager().leaveArena(players, false, true); - } - return; + } else { + if(groupManager.getGroup(player) != null) { + MinecleanerGroupManager.MinecleanerGroup group = groupManager.getGroup(player); + Player ownerPlayer = Bukkit.getPlayer(group.getOwner()); + if(player == ownerPlayer) { + iterateOverGroupMembersOnCreatorPlayerQuit(player, groupManager, group); + } else { + iterateOverGroupMembersOnPlayerQuit(player, group); } - Player[] players = new Player[] { - e.getPlayer() - }; - plugin.getGroupManager().getGroup(e.getPlayer()).removePlayerFromGroup(e.getPlayer()); - if(plugin.getArenaList().getPlayerArena(e.getPlayer()) != null) { - plugin.getManager().leaveArena(players, false, false); - } - + } else { + return; } } } + private void iterateOverGroupMembersOnPlayerQuit(Player player, MinecleanerGroupManager.MinecleanerGroup group) { + Player[] players = new Player[group.players.size()]; + int i = 0; + for(Iterator iterator = group.getPlayers().iterator(); iterator.hasNext();) { + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + if(iteratorPlayer == player) { + i++; + continue; + } + players[i] = iteratorPlayer; + iteratorPlayer.sendMessage(Component.text(player.getName() + " hat den Server verlassen und wurde aus der Gruppe entfernt.", NamedTextColor.YELLOW)); + } + group.removePlayerFromGroup(player); + } + + private Player[] iterateOverGroupMembersOnCreatorPlayerQuit(Player player, MinecleanerGroupManager groupManager, MinecleanerGroupManager.MinecleanerGroup group) { + Player[] players = new Player[group.players.size()]; + int i = 0; + for(Iterator iterator = group.getPlayers().iterator(); iterator.hasNext();) { + Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); + if(iteratorPlayer == player) { + i++; + continue; + } + players[i] = iteratorPlayer; + iteratorPlayer.sendMessage(Component.text("Die " + plugin.getDisplayedPluginName() + "gruppe in der du dich befindest wurde aufgelöst. Die Person, welche die Gruppe erstellt hat, hat den Server verlassen", NamedTextColor.YELLOW)); + } + groupManager.deleteGroup(group); + return players; + } + @EventHandler public void onBlockBurn(BlockBurnEvent e) { if(plugin.getArenaList().getArenaAtBlock(e.getBlock()) != null) { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index e1f7115..adb4f34 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -216,41 +216,57 @@ public class MinecleanerManager { } public void handleGameover(Player[] player, MinecleanerArena arena, boolean isSuccessfullyCleared) { + if(plugin.getGroupManager().getGroup(player[0]) != null) { World world = player[0].getWorld(); + if(!isSuccessfullyCleared) { world.playSound(player[0].getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); - int arraySize = plugin.getGroupManager().getGroup(player[0]) != null ? plugin.getGroupManager().getGroup(player[0]).getPlayers().size() : 1; - Player[] players = new Player[arraySize]; - for(Iterator iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); assert iteratorPlayer != null; iteratorPlayer.sendMessage(Component.text("Game Over! Ihr konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!", NamedTextColor.YELLOW)); + if(plugin.isStatisticsEnabled()) { + + PlayerStatistics ps = plugin.getCubesideStatistics().getStatistics(iteratorPlayer.getUniqueId()); + ps.increaseScore(statisticsTotalGamesPlayed.get(arena.getWidthIndex()), 1); + } } arena.showMines(); - scheduleArenaReset(player[0], arena); + scheduleArenaReset(Bukkit.getPlayer(plugin.getGroupManager().getGroup(player[0]).getOwner()), arena); return; } - // Todo: Punkte durch Anzahl der Leute in der Gruppe teilen => bei floats abrunden (heißt für Kleine (1 Punkt normal) => 0 Punkte in der Gruppe) + int millis = (int) (System.currentTimeMillis() - arena.getCurrentGameStartTime()); world.playSound(player[0].getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f); - int arraySize = plugin.getGroupManager().getGroup(player[0]) != null ? plugin.getGroupManager().getGroup(player[0]).getPlayers().size() : 1; - Player[] players = new Player[arraySize]; + MinecleanerGroupManager.MinecleanerGroup group = plugin.getGroupManager().getGroup(player[0]); - for(Iterator iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) { - Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - assert iteratorPlayer != null; - iteratorPlayer.sendMessage(Component.text( - "Glückwunsch, ihr konntest das " + plugin.getDisplayedPluginName() + "-Feld in ", NamedTextColor.YELLOW) - .append(Component.text(MinecleanerStringUtil.timeToString(millis, false), NamedTextColor.RED)) - .append(Component.text(" erfolgreich lösen!", NamedTextColor.YELLOW))); + for(UUID currentPlayer : group.getPlayers()) { + + Player iteratorPlayer = Bukkit.getPlayer(currentPlayer); + if(iteratorPlayer != null) + iteratorPlayer.sendMessage(Component.text( + "Glückwunsch, ihr konntet das " + plugin.getDisplayedPluginName() + "-Feld in ", NamedTextColor.YELLOW) + .append(Component.text(MinecleanerStringUtil.timeToString(millis, false), NamedTextColor.RED)) + .append(Component.text(" erfolgreich lösen!", NamedTextColor.YELLOW))); + + if(!plugin.isStatisticsEnabled()) + continue; + + PlayerStatistics ps = plugin.getCubesideStatistics().getStatistics(currentPlayer); + ps.increaseScore(statisticsTotalGamesPlayed.get(arena.getWidthIndex()), 1); + ps.increaseScore(statisticsWonGamesTotal, 1); + ps.increaseScore(statisticsGames.get(arena.getWidthIndex()), 1); + + int wIndex = arena.getWidthIndex(); + increaseScore(wIndex, ps, group.getPlayers().size()); } - scheduleArenaReset(player[0], arena); + scheduleArenaReset(Bukkit.getPlayer(group.getOwner()), arena); return; } + World world = player[0].getWorld(); PlayerStatistics ps = null; StatisticKey sg = null; @@ -298,27 +314,7 @@ public class MinecleanerManager { } int wIndex = arena.getWidthIndex(); - switch (wIndex) { - case 0: { - ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.small")); - break; - } - case 1: { - ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.medium")); - break; - } - case 2: { - ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.large")); - break; - } - case 3: { - ps.increaseScore(statisticsPointsAcquired, plugin.getConfig().getInt("winpoints.size.expert")); - } - default: { - ps.increaseScore(statisticsPointsAcquired, 0); - break; - } - } + increaseScore(wIndex, ps, 1); } else { player[0].sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!"); } @@ -326,6 +322,31 @@ public class MinecleanerManager { scheduleArenaReset(player[0], arena); } + private void increaseScore(int wIndex, PlayerStatistics ps, int groupSize) { + switch (wIndex) { + case 0: { + ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.small") /groupSize)); + break; + } + case 1: { + ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.medium") /groupSize)); + break; + } + case 2: { + ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.large") /groupSize)); + break; + } + case 3: { + ps.increaseScore(statisticsPointsAcquired, (int) Math.floor((double) plugin.getConfig().getInt("winpoints.size.expert") /groupSize)); + break; + } + default: { + ps.increaseScore(statisticsPointsAcquired, 0); + break; + } + } + } + private void scheduleArenaReset(Player player, MinecleanerArena arena) { schedulerGameOver = Bukkit.getScheduler().runTaskLater(plugin, () -> { if(arena.getArenaStatus() == ArenaStatus.COMPLETED) { From 558f113f9d9cabc0acdc5e1047b8eec95aef2ac8 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Thu, 16 May 2024 21:48:18 +0200 Subject: [PATCH 40/53] help me --- .../minecleaner/MinecleanerPlugin.java | 3 +- .../minecleaner/commands/HelpCommand.java | 88 +++++++++++++++++++ 2 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/lunarakai/minecleaner/commands/HelpCommand.java diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java index 6112882..a06bc7d 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java @@ -4,6 +4,7 @@ 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; @@ -22,7 +23,6 @@ import org.bukkit.plugin.java.JavaPlugin; import de.iani.cubesidestats.api.CubesideStatisticsAPI; import de.iani.cubesideutils.bukkit.commands.CommandRouter; import de.iani.playerUUIDCache.PlayerUUIDCache; - import java.util.Locale; import java.util.ResourceBundle; import java.util.logging.Level; @@ -81,6 +81,7 @@ public final class MinecleanerPlugin extends JavaPlugin { minecleanerCommand.addCommandMapping(new ListCommand(this), "list"); minecleanerCommand.addCommandMapping(new InfoCommand(this), "info"); minecleanerCommand.addCommandMapping(new ListPlayersInArenaCommand(this), "currentplayers"); + minecleanerCommand.addCommandMapping(new HelpCommand(this), "help"); // Groups minecleanerCommand.addCommandMapping(new InviteCommand(this), "invite"); diff --git a/src/main/java/de/lunarakai/minecleaner/commands/HelpCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/HelpCommand.java new file mode 100644 index 0000000..a95bc95 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/commands/HelpCommand.java @@ -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 : ", 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))); + } +} From 37ebd2a743f570ea99aa7405220c4a93d77ad65b Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Fri, 17 May 2024 00:44:16 +0200 Subject: [PATCH 41/53] fixed small bugs --- .../de/lunarakai/minecleaner/MinecleanerListener.java | 2 ++ .../de/lunarakai/minecleaner/MinecleanerManager.java | 5 +++++ .../minecleaner/commands/groups/AcceptCommand.java | 4 ++++ .../minecleaner/commands/groups/InviteCommand.java | 9 ++++++++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index a1bcaab..d2894a1 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -3,6 +3,7 @@ package de.lunarakai.minecleaner; import java.util.Arrays; import java.util.Iterator; import java.util.UUID; +import java.util.logging.Level; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; @@ -93,6 +94,7 @@ public class MinecleanerListener implements Listener { } } 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 { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index adb4f34..5bad6e4 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -10,6 +10,7 @@ import java.util.Map.Entry; import java.util.Objects; import java.util.UUID; import java.util.function.Consumer; +import java.util.logging.Level; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; @@ -348,6 +349,10 @@ public class MinecleanerManager { } private void scheduleArenaReset(Player player, MinecleanerArena arena) { + plugin.getLogger().log(Level.INFO, "scheduled reset for arena '" + arena.getName() + "', loc: " + arena.getLocation() + " ArenaStatus: " + arena.getArenaStatus() + " in " + plugin.getManager().getSettingsValue("resettime", player) * 20 + " ticks. Current Players: " + Arrays.toString(arena.getCurrentPlayers())); + Bukkit.getScheduler().runTaskLater(plugin, () -> { + plugin.getLogger().log(Level.INFO, "ArenaStatus for arena '" + arena.getName() + "', loc: " + arena.getLocation() + " after 5 Ticks (should be completed): " + arena.getArenaStatus()); + }, 5L); schedulerGameOver = Bukkit.getScheduler().runTaskLater(plugin, () -> { if(arena.getArenaStatus() == ArenaStatus.COMPLETED) { if (arena.getCurrentPlayers() == null) { diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java index b000401..b2e861c 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java @@ -43,6 +43,10 @@ public class AcceptCommand extends SubCommand { 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) { + player.sendMessage(Component.text("Du kannst keine Einladung annehmen währen die Person, die dich eingeladen hat, in einer Runde ist.", NamedTextColor.DARK_RED)); + return true; + } plugin.getGroupManager().getInvitedGroup(player).addPlayerToGroup(player); assert groupOwner != null; diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java index 2f09b62..e5e53d4 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java @@ -7,6 +7,7 @@ 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.MinecleanerArena; import de.lunarakai.minecleaner.MinecleanerGroupManager; import de.lunarakai.minecleaner.MinecleanerPlugin; import net.kyori.adventure.text.Component; @@ -48,6 +49,12 @@ public class InviteCommand extends SubCommand { @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) { + player.sendMessage(Component.text("Du kannst keine Einladung verschicken während du in einer Runde bist.", NamedTextColor.DARK_RED)); + return true; + } + if(args.remaining() < 1 || args.remaining() >= 2) { sender.sendMessage(Component.text(commandString + getUsage(), NamedTextColor.DARK_RED)); return true; @@ -66,7 +73,7 @@ public class InviteCommand extends SubCommand { return true; } - if(groupManager.getGroup(player) != null && Bukkit.getPlayer(groupManager.getGroup(player).getOwner()).equals(player)) { + if(groupManager.getGroup(player) != null && !Bukkit.getPlayer(groupManager.getGroup(player).getOwner()).equals(player)) { player.sendMessage(Component.text("Nur als Ersteller der Gruppe bist du berechtigt Leute einzuladen.", NamedTextColor.YELLOW)); return true; } From e4e973449b8fb869cf76bd3101a787e4962a04ba Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Fri, 24 May 2024 22:22:32 +0200 Subject: [PATCH 42/53] stuff (tm) --- .../minecleaner/commands/ListCommand.java | 2 +- .../commands/groups/AcceptCommand.java | 12 +++--- .../commands/groups/DenyCommand.java | 10 ++--- .../groups/DismantleGroupCommand.java | 10 ++--- .../commands/groups/InviteCommand.java | 17 +++++--- .../groups/ListGroupMembersCommand.java | 5 ++- .../de/lunarakai/minecleaner/game/Game.java | 1 + .../minecleaner/utils/ChatUtils.java | 42 +++++++++++++++++++ src/main/resources/lang/de_DE.properties | 16 +++---- src/main/resources/lang/en_US.properties | 2 +- 10 files changed, 80 insertions(+), 37 deletions(-) create mode 100644 src/main/java/de/lunarakai/minecleaner/utils/ChatUtils.java diff --git a/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java index 8766cc2..dccfea9 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/ListCommand.java @@ -44,7 +44,7 @@ public class ListCommand extends SubCommand{ @Override public boolean onCommand(CommandSender sender, Command arg1, String arg2, String commandString, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException { - sender.sendMessage(createLangComponent("arena.list", plugin.getDisplayedPluginName(), NamedTextColor.YELLOW)); + sender.sendMessage(createLangComponent("arena.list.created", plugin.getDisplayedPluginName(), NamedTextColor.YELLOW)); boolean any = false; for(MinecleanerArena arena : plugin.getArenaList().getArenas()) { Location location = arena.getLocation(); diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java index b2e861c..861f23f 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java @@ -8,8 +8,7 @@ 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 de.lunarakai.minecleaner.utils.ChatUtils; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -44,18 +43,17 @@ public class AcceptCommand extends SubCommand { 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) { - player.sendMessage(Component.text("Du kannst keine Einladung annehmen währen die Person, die dich eingeladen hat, in einer Runde ist.", NamedTextColor.DARK_RED)); + ChatUtils.sendSingleLineWarningMessage(player, "Du kannst keine Einladung annehmen während die Person, die dich eingeladen hat, in einer Runde ist."); return true; } plugin.getGroupManager().getInvitedGroup(player).addPlayerToGroup(player); assert groupOwner != null; - groupOwner.sendMessage(Component.text(player.getName() + " hat deine Einladung angenommen.", NamedTextColor.GREEN)); - player.sendMessage(Component.text("Du hast die Einladung angenommen", NamedTextColor.GREEN)); - + ChatUtils.sendSingleLineSuccessMessage(groupOwner, player.getName() + " hat deine Einladung angenommen."); + ChatUtils.sendSingleLineSuccessMessage(player, "Du hast die Einladung angenommen"); return true; } else { - player.sendMessage(Component.text("Du wurdest in keine Gruppe eingeladen.", NamedTextColor.YELLOW)); + ChatUtils.sendSingleLineWarningMessage(player, "Du wurdest in keine Gruppe eingeladen."); } return true; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java index 2ebcc7c..910d11a 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java @@ -9,8 +9,7 @@ import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.commands.ArgsParser; import de.lunarakai.minecleaner.MinecleanerGroupManager; import de.lunarakai.minecleaner.MinecleanerPlugin; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; +import de.lunarakai.minecleaner.utils.ChatUtils; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -53,12 +52,11 @@ public class DenyCommand extends SubCommand { } assert groupOwner != null; - groupOwner.sendMessage(Component.text(player.getName() + " hat deine Einladung abgelehnt.", NamedTextColor.RED)); - player.sendMessage(Component.text("Du hast die Einladung abgelehnt", NamedTextColor.YELLOW)); - + ChatUtils.sendSingleLineWarningMessage(groupOwner, player.getName() + " hat deine Einladung abgelehnt."); + ChatUtils.sendSingleLineInfoMessage(player, "Du hast die Einladung abgelehnt"); return true; } else { - player.sendMessage(Component.text("Du wurdest in keine Gruppe eingeladen.", NamedTextColor.YELLOW)); + ChatUtils.sendSingleLineWarningMessage(player, "Du wurdest in keine Gruppe eingeladen."); } return true; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java index f8ee5d3..9e3e838 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java @@ -8,10 +8,9 @@ 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; @@ -44,20 +43,19 @@ public class DismantleGroupCommand extends SubCommand { 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) { - player.sendMessage(Component.text("Du bist in keiner Gruppe die du auflösen könntest.", NamedTextColor.YELLOW)); + ChatUtils.sendSingleLineWarningMessage(player, "Du bist in keiner Gruppe die du auflösen könntest."); return true; } Player groupOwnerPlayer = Bukkit.getPlayer(plugin.getGroupManager().getGroup(player).getOwner()); if(player != groupOwnerPlayer) { - player.sendMessage(Component.text("Du bist nicht berechtigt deine Gruppe aufzulösen.", NamedTextColor.YELLOW)); + ChatUtils.sendSingleLineWarningMessage(player, "Du bist nicht berechtigt deine Gruppe aufzulösen."); return true; } - for(Iterator iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - iteratorPlayer.sendMessage(Component.text("Die Gruppe in der du dich befindest wurde aufgelöst.", NamedTextColor.YELLOW)); + ChatUtils.sendSingleLineWarningMessage(iteratorPlayer, "Die Gruppe in der du dich befindest wurde aufgelöst."); } plugin.getGroupManager().deleteGroup(plugin.getGroupManager().getGroup(player)); diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java index e5e53d4..ecd35b2 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java @@ -7,9 +7,9 @@ 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.MinecleanerArena; 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.format.NamedTextColor; import org.bukkit.Bukkit; @@ -51,30 +51,35 @@ public class InviteCommand extends SubCommand { Player player = (Player) sender; if(plugin.getArenaList().getPlayerArena(player) != null) { - player.sendMessage(Component.text("Du kannst keine Einladung verschicken während du in einer Runde bist.", NamedTextColor.DARK_RED)); + ChatUtils.sendSingleLineWarningMessage(player, "Du kannst keine Einladung verschicken während du in einer Runde bist."); return true; } if(args.remaining() < 1 || args.remaining() >= 2) { - sender.sendMessage(Component.text(commandString + getUsage(), NamedTextColor.DARK_RED)); + ChatUtils.sendSingleLineWarningMessage(player, commandString + getUsage()); return true; } String playerName = args.getNext().trim(); Player invitedPlayer = plugin.getServer().getPlayer(playerName); if(invitedPlayer == player) { - player.sendMessage(Component.text("Du kannst dich nicht selber in eine Gruppe einladen.", NamedTextColor.DARK_RED)); + ChatUtils.sendSingleLineWarningMessage(player, "Du kannst dich nicht selber in eine Gruppe einladen."); + return true; + } + + if(plugin.getArenaList().getPlayerArena(invitedPlayer) != null) { + ChatUtils.sendSingleLineWarningMessage(player, "Du kannst Spieler nicht einladen, die bereits in einer Runde sind."); return true; } MinecleanerGroupManager groupManager = plugin.getGroupManager(); if(groupManager.getInvitedGroup(player) != null) { - player.sendMessage(Component.text("Du wurdest bereits in eine Gruppe eingeladen. Bitte kümmere dich zuerst um die Einladung bevor du eine eigene Gruppe erstellst.", NamedTextColor.YELLOW)); + ChatUtils.sendSingleLineInfoMessage(player, "Du wurdest bereits in eine Gruppe eingeladen. Bitte kümmere dich zuerst um die Einladung bevor du eine eigene Gruppe erstellst."); return true; } if(groupManager.getGroup(player) != null && !Bukkit.getPlayer(groupManager.getGroup(player).getOwner()).equals(player)) { - player.sendMessage(Component.text("Nur als Ersteller der Gruppe bist du berechtigt Leute einzuladen.", NamedTextColor.YELLOW)); + ChatUtils.sendSingleLineInfoMessage(player, "Nur als Ersteller der Gruppe bist du berechtigt Leute einzuladen."); return true; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java index 4f3e405..58952e2 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java @@ -8,6 +8,7 @@ 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; @@ -44,11 +45,11 @@ public class ListGroupMembersCommand extends SubCommand { Player player = (Player) commandSender; if(plugin.getGroupManager().getGroup(player) == null) { - player.sendMessage(Component.text("Du bist in keiner Gruppe.", NamedTextColor.YELLOW)); + ChatUtils.sendSingleLineWarningMessage(player, "Du bist in keiner Gruppe."); return true; } - player.sendMessage(Component.text("-- Mitglieder deiner " + plugin.getDisplayedPluginName() + "gruppe --", NamedTextColor.AQUA)); + ChatUtils.sendSingleLineSpecialMessage(player, "-- Mitglieder deiner " + plugin.getDisplayedPluginName() + "gruppe --", NamedTextColor.AQUA); for(Iterator iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); String ownerString = ""; diff --git a/src/main/java/de/lunarakai/minecleaner/game/Game.java b/src/main/java/de/lunarakai/minecleaner/game/Game.java index f79faa3..4b0b967 100644 --- a/src/main/java/de/lunarakai/minecleaner/game/Game.java +++ b/src/main/java/de/lunarakai/minecleaner/game/Game.java @@ -185,6 +185,7 @@ public class Game { switch (cell.getType()) { case Mine: { + resetFloodedFlaggedCellCounter(); explode(cell); break; } diff --git a/src/main/java/de/lunarakai/minecleaner/utils/ChatUtils.java b/src/main/java/de/lunarakai/minecleaner/utils/ChatUtils.java new file mode 100644 index 0000000..a2f0b30 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/utils/ChatUtils.java @@ -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 sendSingleLineSuccessMessage(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 sendSingleLineInfoMessage(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 sendSingleLineWarningMessage(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 sendSingleLineSpecialMessage(Player player, String message, NamedTextColor color) { + if(message.matches(langKeyPattern.pattern())) { + player.sendMessage(Component.translatable(message, color)); + } else { + player.sendMessage(Component.text(message, color)); + } + } +} diff --git a/src/main/resources/lang/de_DE.properties b/src/main/resources/lang/de_DE.properties index 1619c35..31be8cb 100644 --- a/src/main/resources/lang/de_DE.properties +++ b/src/main/resources/lang/de_DE.properties @@ -3,7 +3,7 @@ minecleaner.info.developer=Entwickelt von minecleaner.info.website=Website minecleaner.info.license=Lizenz -arena.name.invalid=Ungueltiger Arenaname. Erlaubt sind Buchstaben, Zahlen und der Unterstrich +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 @@ -11,27 +11,27 @@ 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 groesser als 3 sein +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 geloescht. +arena.delete.success=Die {0}-Arena {1} wurde gelöscht. arena.delete.noarena=Hier befindet sich keine {0}-Arena. -arena.list=Angelegte {0}-Arenen +arena.list.created=Angelegte {0}-Arenen arena.list.none=(keine) -data.player.noData=Fuer Spieler "{0}" existieren keine Daten. +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.from=von +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 geloescht. +data.delete.deleted=Alle {0}-Statistiken von Spieler "{1}" wurden gelöscht. -data.console.nodata=Fuer die Konsole existieren keine Daten. \ No newline at end of file +data.console.nodata=Für die Konsole existieren keine Daten. \ No newline at end of file diff --git a/src/main/resources/lang/en_US.properties b/src/main/resources/lang/en_US.properties index 82a13cf..6aff9f5 100644 --- a/src/main/resources/lang/en_US.properties +++ b/src/main/resources/lang/en_US.properties @@ -19,7 +19,7 @@ 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.list=Created {0} arenas +arena.list.created=Created {0} arenas arena.list.none=(none) data.player.noData=No data exists for player "{0}". From 7e171194cee6f10fd04a09c7f5e44d931bfa4c74 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 25 May 2024 17:16:34 +0200 Subject: [PATCH 43/53] more stuff (tm) --- .../minecleaner/MinecleanerGroupManager.java | 8 +++----- .../minecleaner/MinecleanerListener.java | 16 +++++++--------- .../minecleaner/MinecleanerManager.java | 9 +++++---- .../commands/ListPlayersInArenaCommand.java | 6 +++--- .../commands/groups/AcceptCommand.java | 8 ++++---- .../commands/groups/DenyCommand.java | 6 +++--- .../commands/groups/DismantleGroupCommand.java | 6 +++--- .../commands/groups/InviteCommand.java | 17 +++++++++++------ .../groups/ListGroupMembersCommand.java | 4 ++-- .../lunarakai/minecleaner/utils/ChatUtils.java | 8 ++++---- 10 files changed, 45 insertions(+), 43 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java index 851d63d..22e3802 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java @@ -1,11 +1,10 @@ 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 net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -56,14 +55,13 @@ public class MinecleanerGroupManager { continue; } Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - iteratorPlayer.sendMessage(Component.text("Die Gruppe wurde aufgelöst, da die Person, welche die Gruppe erstellt hat, aus der Gruppe entfernt wurde.", NamedTextColor.YELLOW)); - + ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "Die Gruppe wurde aufgelöst, da die Person, welche die Gruppe erstellt hat, aus der Gruppe entfernt wurde."); } deleteGroup(getGroup(Bukkit.getPlayer(owner))); } players.remove(playerUUID); if(players.size() < 2) { - Bukkit.getPlayer(owner).sendMessage(Component.text("Die Gruppe wurde aufgelöst, da du nur noch alleine in der Gruppe bist", NamedTextColor.YELLOW)); + ChatUtils.sendSimpleInfoMessage(Bukkit.getPlayer(owner), "Die Gruppe wurde aufgelöst, da du nur noch alleine in der Gruppe bist"); deleteGroup(getGroup(Bukkit.getPlayer(owner))); } } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index d2894a1..d3059e7 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -1,11 +1,10 @@ package de.lunarakai.minecleaner; +import de.lunarakai.minecleaner.utils.ChatUtils; import java.util.Arrays; import java.util.Iterator; import java.util.UUID; import java.util.logging.Level; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; @@ -26,7 +25,6 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.util.RayTraceResult; import org.bukkit.util.Vector; -import net.md_5.bungee.api.ChatColor; public class MinecleanerListener implements Listener { private final MinecleanerPlugin plugin; @@ -121,7 +119,7 @@ public class MinecleanerListener implements Listener { } plugin.getManager().joinArena(players, arena); } else { - e.getPlayer().sendMessage(ChatColor.YELLOW + "Hier spielt schon jemand anderes"); + ChatUtils.sendSimpleInfoMessage(e.getPlayer(), "Hier spielt schon jemand anderes"); } } } @@ -196,7 +194,7 @@ public class MinecleanerListener implements Listener { if(arena != null) { if(plugin.getGroupManager().getGroup(player) == null) { if((arena.isTooFarAway(player))) { - player.sendMessage(ChatColor.YELLOW + "Du hast dich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen."); + ChatUtils.sendSimpleInfoMessage(player, "Du hast dich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen."); Player[] players = new Player[] { player }; @@ -210,11 +208,11 @@ public class MinecleanerListener implements Listener { for(Iterator iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); if(iteratorPlayer == ownerPlayer) { - iteratorPlayer.sendMessage(Component.text("Du hast dich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen.", NamedTextColor.YELLOW)); + ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "Du hast dich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen."); continue; } assert iteratorPlayer != null; - iteratorPlayer.sendMessage(Component.text("Der Ersteller der Gruppe hat sich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen.", NamedTextColor.YELLOW)); + ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "Der Ersteller der Gruppe hat sich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen."); } Player[] players = new Player[] { ownerPlayer @@ -273,7 +271,7 @@ public class MinecleanerListener implements Listener { continue; } players[i] = iteratorPlayer; - iteratorPlayer.sendMessage(Component.text(player.getName() + " hat den Server verlassen und wurde aus der Gruppe entfernt.", NamedTextColor.YELLOW)); + ChatUtils.sendSimpleInfoMessage(iteratorPlayer, player.getName() + " hat den Server verlassen und wurde aus der Gruppe entfernt."); } group.removePlayerFromGroup(player); } @@ -288,7 +286,7 @@ public class MinecleanerListener implements Listener { continue; } players[i] = iteratorPlayer; - iteratorPlayer.sendMessage(Component.text("Die " + plugin.getDisplayedPluginName() + "gruppe in der du dich befindest wurde aufgelöst. Die Person, welche die Gruppe erstellt hat, hat den Server verlassen", NamedTextColor.YELLOW)); + 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; diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index 5bad6e4..6de4851 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -1,6 +1,7 @@ package de.lunarakai.minecleaner; import de.iani.cubesidestats.api.SettingKey; +import de.lunarakai.minecleaner.utils.ChatUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -209,10 +210,10 @@ public class MinecleanerManager { for(Iterator iterator = plugin.getGroupManager().getGroup(players[0]).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); assert iteratorPlayer != null; - iteratorPlayer.sendMessage(Component.text("Du hast eine neue Runde " + plugin.getDisplayedPluginName() + " gestartet.", NamedTextColor.YELLOW)); + ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "Du hast eine neue Runde " + plugin.getDisplayedPluginName() + " gestartet."); } } else { - players[0].sendMessage(Component.text("Du hast eine neue Runde " + plugin.getDisplayedPluginName() + " gestartet.", NamedTextColor.YELLOW)); + ChatUtils.sendSimpleInfoMessage(players[0], "Du hast eine neue Runde " + plugin.getDisplayedPluginName() + " gestartet."); } } @@ -227,7 +228,7 @@ public class MinecleanerManager { for(Iterator iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); assert iteratorPlayer != null; - iteratorPlayer.sendMessage(Component.text("Game Over! Ihr konntest das " + plugin.getDisplayedPluginName() + "-Feld nicht erfolgreich lösen!", NamedTextColor.YELLOW)); + 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()); @@ -278,7 +279,7 @@ public class MinecleanerManager { if(!isSuccessfullyCleared) { world.playSound(player[0].getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); - player[0].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(); if(sg != null && plugin.isStatisticsEnabled()) { diff --git a/src/main/java/de/lunarakai/minecleaner/commands/ListPlayersInArenaCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/ListPlayersInArenaCommand.java index d125710..e206bd2 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/ListPlayersInArenaCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/ListPlayersInArenaCommand.java @@ -5,7 +5,7 @@ import de.iani.cubesideutils.bukkit.commands.exceptions.*; import de.iani.cubesideutils.commands.ArgsParser; import de.lunarakai.minecleaner.MinecleanerArena; import de.lunarakai.minecleaner.MinecleanerPlugin; -import net.kyori.adventure.text.Component; +import de.lunarakai.minecleaner.utils.ChatUtils; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -49,9 +49,9 @@ public class ListPlayersInArenaCommand extends SubCommand { } } if(arena != null) { - player.sendMessage(Component.text("Players in Arena: " + Arrays.toString(arena.getCurrentPlayers()), NamedTextColor.GRAY)); + ChatUtils.sendSimpleSpecialMessage(player, "Players in Arena: " + Arrays.toString(arena.getCurrentPlayers()), NamedTextColor.GRAY); } else { - player.sendMessage(Component.text("Hier befindet sich keine Arena.", NamedTextColor.GRAY)); + ChatUtils.sendSimpleSpecialMessage(player, "Hier befindet sich keine Arena.", NamedTextColor.GRAY); } return true; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java index 861f23f..ac3acc9 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java @@ -43,17 +43,17 @@ public class AcceptCommand extends SubCommand { 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.sendSingleLineWarningMessage(player, "Du kannst keine Einladung annehmen während die Person, die dich eingeladen hat, in einer Runde ist."); + ChatUtils.sendSimpleWarningMessage(player, "Du kannst keine Einladung annehmen während die Person, die dich eingeladen hat, in einer Runde ist."); return true; } plugin.getGroupManager().getInvitedGroup(player).addPlayerToGroup(player); assert groupOwner != null; - ChatUtils.sendSingleLineSuccessMessage(groupOwner, player.getName() + " hat deine Einladung angenommen."); - ChatUtils.sendSingleLineSuccessMessage(player, "Du hast die Einladung angenommen"); + ChatUtils.sendSimpleSuccessMessage(groupOwner, player.getName() + " hat deine Einladung angenommen."); + ChatUtils.sendSimpleSuccessMessage(player, "Du hast die Einladung angenommen"); return true; } else { - ChatUtils.sendSingleLineWarningMessage(player, "Du wurdest in keine Gruppe eingeladen."); + ChatUtils.sendSimpleInfoMessage(player, "Du wurdest in keine Gruppe eingeladen."); } return true; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java index 910d11a..9aba705 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java @@ -52,11 +52,11 @@ public class DenyCommand extends SubCommand { } assert groupOwner != null; - ChatUtils.sendSingleLineWarningMessage(groupOwner, player.getName() + " hat deine Einladung abgelehnt."); - ChatUtils.sendSingleLineInfoMessage(player, "Du hast die Einladung abgelehnt"); + ChatUtils.sendSimpleWarningMessage(groupOwner, player.getName() + " hat deine Einladung abgelehnt."); + ChatUtils.sendSimpleInfoMessage(player, "Du hast die Einladung abgelehnt"); return true; } else { - ChatUtils.sendSingleLineWarningMessage(player, "Du wurdest in keine Gruppe eingeladen."); + ChatUtils.sendSimpleWarningMessage(player, "Du wurdest in keine Gruppe eingeladen."); } return true; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java index 9e3e838..027f991 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java @@ -43,19 +43,19 @@ public class DismantleGroupCommand extends SubCommand { 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.sendSingleLineWarningMessage(player, "Du bist in keiner Gruppe die du auflösen könntest."); + ChatUtils.sendSimpleWarningMessage(player, "Du bist in keiner Gruppe die du auflösen könntest."); return true; } Player groupOwnerPlayer = Bukkit.getPlayer(plugin.getGroupManager().getGroup(player).getOwner()); if(player != groupOwnerPlayer) { - ChatUtils.sendSingleLineWarningMessage(player, "Du bist nicht berechtigt deine Gruppe aufzulösen."); + ChatUtils.sendSimpleWarningMessage(player, "Du bist nicht berechtigt deine Gruppe aufzulösen."); return true; } for(Iterator iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - ChatUtils.sendSingleLineWarningMessage(iteratorPlayer, "Die Gruppe in der du dich befindest wurde aufgelöst."); + ChatUtils.sendSimpleWarningMessage(iteratorPlayer, "Die Gruppe in der du dich befindest wurde aufgelöst."); } plugin.getGroupManager().deleteGroup(plugin.getGroupManager().getGroup(player)); diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java index ecd35b2..9959165 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java @@ -51,35 +51,40 @@ public class InviteCommand extends SubCommand { Player player = (Player) sender; if(plugin.getArenaList().getPlayerArena(player) != null) { - ChatUtils.sendSingleLineWarningMessage(player, "Du kannst keine Einladung verschicken während du in einer Runde bist."); + ChatUtils.sendSimpleWarningMessage(player, "Du kannst keine Einladung verschicken während du in einer Runde bist."); return true; } if(args.remaining() < 1 || args.remaining() >= 2) { - ChatUtils.sendSingleLineWarningMessage(player, commandString + getUsage()); + ChatUtils.sendSimpleWarningMessage(player, commandString + getUsage()); return true; } String playerName = args.getNext().trim(); Player invitedPlayer = plugin.getServer().getPlayer(playerName); + if(invitedPlayer == null) { + ChatUtils.sendSimpleWarningMessage(player, "Du kannst keine Person einladen, die entweder offline oder auf einen anderen Server ist."); + return true; + } + if(invitedPlayer == player) { - ChatUtils.sendSingleLineWarningMessage(player, "Du kannst dich nicht selber in eine Gruppe einladen."); + ChatUtils.sendSimpleWarningMessage(player, "Du kannst dich nicht selber in eine Gruppe einladen."); return true; } if(plugin.getArenaList().getPlayerArena(invitedPlayer) != null) { - ChatUtils.sendSingleLineWarningMessage(player, "Du kannst Spieler nicht einladen, die bereits in einer Runde sind."); + ChatUtils.sendSimpleWarningMessage(player, "Du kannst Spieler nicht einladen, die bereits in einer Runde sind."); return true; } MinecleanerGroupManager groupManager = plugin.getGroupManager(); if(groupManager.getInvitedGroup(player) != null) { - ChatUtils.sendSingleLineInfoMessage(player, "Du wurdest bereits in eine Gruppe eingeladen. Bitte kümmere dich zuerst um die Einladung bevor du eine eigene Gruppe erstellst."); + ChatUtils.sendSimpleInfoMessage(player, "Du wurdest bereits in eine Gruppe eingeladen. Bitte kümmere dich zuerst um die Einladung bevor du eine eigene Gruppe erstellst."); return true; } if(groupManager.getGroup(player) != null && !Bukkit.getPlayer(groupManager.getGroup(player).getOwner()).equals(player)) { - ChatUtils.sendSingleLineInfoMessage(player, "Nur als Ersteller der Gruppe bist du berechtigt Leute einzuladen."); + ChatUtils.sendSimpleInfoMessage(player, "Nur als Ersteller der Gruppe bist du berechtigt Leute einzuladen."); return true; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java index 58952e2..90c08ce 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java @@ -45,11 +45,11 @@ public class ListGroupMembersCommand extends SubCommand { Player player = (Player) commandSender; if(plugin.getGroupManager().getGroup(player) == null) { - ChatUtils.sendSingleLineWarningMessage(player, "Du bist in keiner Gruppe."); + ChatUtils.sendSimpleInfoMessage(player, "Du bist in keiner Gruppe."); return true; } - ChatUtils.sendSingleLineSpecialMessage(player, "-- Mitglieder deiner " + plugin.getDisplayedPluginName() + "gruppe --", NamedTextColor.AQUA); + ChatUtils.sendSimpleSpecialMessage(player, "-- Mitglieder deiner " + plugin.getDisplayedPluginName() + "gruppe --", NamedTextColor.AQUA); for(Iterator iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); String ownerString = ""; diff --git a/src/main/java/de/lunarakai/minecleaner/utils/ChatUtils.java b/src/main/java/de/lunarakai/minecleaner/utils/ChatUtils.java index a2f0b30..0e5f02b 100644 --- a/src/main/java/de/lunarakai/minecleaner/utils/ChatUtils.java +++ b/src/main/java/de/lunarakai/minecleaner/utils/ChatUtils.java @@ -8,7 +8,7 @@ import org.bukkit.entity.Player; public class ChatUtils { static Pattern langKeyPattern = Pattern.compile("^\\w+\\.\\w+\\.\\w+$"); - public static void sendSingleLineSuccessMessage(Player player, String message) { + public static void sendSimpleSuccessMessage(Player player, String message) { if(message.matches(langKeyPattern.pattern())) { player.sendMessage(Component.translatable(message, NamedTextColor.GREEN)); } else { @@ -16,7 +16,7 @@ public class ChatUtils { } } - public static void sendSingleLineInfoMessage(Player player, String message) { + public static void sendSimpleInfoMessage(Player player, String message) { if(message.matches(langKeyPattern.pattern())) { player.sendMessage(Component.translatable(message, NamedTextColor.GOLD)); } else { @@ -24,7 +24,7 @@ public class ChatUtils { } } - public static void sendSingleLineWarningMessage(Player player, String message) { + public static void sendSimpleWarningMessage(Player player, String message) { if(message.matches(langKeyPattern.pattern())) { player.sendMessage(Component.translatable(message, NamedTextColor.DARK_RED)); } else { @@ -32,7 +32,7 @@ public class ChatUtils { } } - public static void sendSingleLineSpecialMessage(Player player, String message, NamedTextColor color) { + public static void sendSimpleSpecialMessage(Player player, String message, NamedTextColor color) { if(message.matches(langKeyPattern.pattern())) { player.sendMessage(Component.translatable(message, color)); } else { From e17b7fcc1e2aa2dfb4fbf05fd4b71bd4cda96ff1 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 25 May 2024 17:53:08 +0200 Subject: [PATCH 44/53] accept/deny invites by clicking --- .../de/lunarakai/minecleaner/commands/groups/DenyCommand.java | 2 +- .../de/lunarakai/minecleaner/commands/groups/InviteCommand.java | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java index 9aba705..59f11ed 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java @@ -53,7 +53,7 @@ public class DenyCommand extends SubCommand { assert groupOwner != null; ChatUtils.sendSimpleWarningMessage(groupOwner, player.getName() + " hat deine Einladung abgelehnt."); - ChatUtils.sendSimpleInfoMessage(player, "Du hast die Einladung abgelehnt"); + ChatUtils.sendSimpleInfoMessage(player, "Du hast die Einladung abgelehnt."); return true; } else { ChatUtils.sendSimpleWarningMessage(player, "Du wurdest in keine Gruppe eingeladen."); diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java index 9959165..a9eb1b4 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java @@ -11,6 +11,7 @@ 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; @@ -95,6 +96,7 @@ public class InviteCommand extends SubCommand { 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; From d5536db37f4dddb51eb3455720c859e2a63e9f91 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 25 May 2024 18:54:15 +0200 Subject: [PATCH 45/53] more switching to translatable stuff --- .../commands/ListPlayersInArenaCommand.java | 2 +- .../commands/groups/AcceptCommand.java | 6 ++--- .../commands/groups/DenyCommand.java | 4 ++-- .../groups/DismantleGroupCommand.java | 6 ++--- .../commands/groups/InviteCommand.java | 12 +++++----- .../groups/ListGroupMembersCommand.java | 2 +- src/main/resources/lang/de_DE.properties | 22 +++++++++++++++++- src/main/resources/lang/en_US.properties | 23 ++++++++++++++++++- 8 files changed, 59 insertions(+), 18 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/commands/ListPlayersInArenaCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/ListPlayersInArenaCommand.java index e206bd2..6d12428 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/ListPlayersInArenaCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/ListPlayersInArenaCommand.java @@ -51,7 +51,7 @@ public class ListPlayersInArenaCommand extends SubCommand { if(arena != null) { ChatUtils.sendSimpleSpecialMessage(player, "Players in Arena: " + Arrays.toString(arena.getCurrentPlayers()), NamedTextColor.GRAY); } else { - ChatUtils.sendSimpleSpecialMessage(player, "Hier befindet sich keine Arena.", NamedTextColor.GRAY); + ChatUtils.sendSimpleSpecialMessage(player, "arena.common.noarena", NamedTextColor.GRAY); } return true; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java index ac3acc9..3bb2839 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/AcceptCommand.java @@ -43,17 +43,17 @@ public class AcceptCommand extends SubCommand { 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, "Du kannst keine Einladung annehmen während die Person, die dich eingeladen hat, in einer Runde ist."); + 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, "Du hast die Einladung angenommen"); + ChatUtils.sendSimpleSuccessMessage(player, "group.invite.accepted"); return true; } else { - ChatUtils.sendSimpleInfoMessage(player, "Du wurdest in keine Gruppe eingeladen."); + ChatUtils.sendSimpleInfoMessage(player, "group.invite.notinvited"); } return true; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java index 59f11ed..3009873 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/DenyCommand.java @@ -53,10 +53,10 @@ public class DenyCommand extends SubCommand { assert groupOwner != null; ChatUtils.sendSimpleWarningMessage(groupOwner, player.getName() + " hat deine Einladung abgelehnt."); - ChatUtils.sendSimpleInfoMessage(player, "Du hast die Einladung abgelehnt."); + ChatUtils.sendSimpleInfoMessage(player, "group.invite.denied"); return true; } else { - ChatUtils.sendSimpleWarningMessage(player, "Du wurdest in keine Gruppe eingeladen."); + ChatUtils.sendSimpleWarningMessage(player, "group.invite.notinvited"); } return true; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java index 027f991..ede2a68 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/DismantleGroupCommand.java @@ -43,19 +43,19 @@ public class DismantleGroupCommand extends SubCommand { 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, "Du bist in keiner Gruppe die du auflösen könntest."); + ChatUtils.sendSimpleWarningMessage(player, "group.common.notingroup"); return true; } Player groupOwnerPlayer = Bukkit.getPlayer(plugin.getGroupManager().getGroup(player).getOwner()); if(player != groupOwnerPlayer) { - ChatUtils.sendSimpleWarningMessage(player, "Du bist nicht berechtigt deine Gruppe aufzulösen."); + ChatUtils.sendSimpleWarningMessage(player, "group.dismantle.nopermission"); return true; } for(Iterator iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - ChatUtils.sendSimpleWarningMessage(iteratorPlayer, "Die Gruppe in der du dich befindest wurde aufgelöst."); + ChatUtils.sendSimpleWarningMessage(iteratorPlayer, "group.dismantle.yourgroup"); } plugin.getGroupManager().deleteGroup(plugin.getGroupManager().getGroup(player)); diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java index a9eb1b4..32944d3 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/InviteCommand.java @@ -52,7 +52,7 @@ public class InviteCommand extends SubCommand { Player player = (Player) sender; if(plugin.getArenaList().getPlayerArena(player) != null) { - ChatUtils.sendSimpleWarningMessage(player, "Du kannst keine Einladung verschicken während du in einer Runde bist."); + ChatUtils.sendSimpleWarningMessage(player, "group.invite.notwhileinround"); return true; } @@ -64,28 +64,28 @@ public class InviteCommand extends SubCommand { Player invitedPlayer = plugin.getServer().getPlayer(playerName); if(invitedPlayer == null) { - ChatUtils.sendSimpleWarningMessage(player, "Du kannst keine Person einladen, die entweder offline oder auf einen anderen Server ist."); + ChatUtils.sendSimpleWarningMessage(player, "group.invite.offline"); return true; } if(invitedPlayer == player) { - ChatUtils.sendSimpleWarningMessage(player, "Du kannst dich nicht selber in eine Gruppe einladen."); + ChatUtils.sendSimpleWarningMessage(player, "group.invite.notyourself"); return true; } if(plugin.getArenaList().getPlayerArena(invitedPlayer) != null) { - ChatUtils.sendSimpleWarningMessage(player, "Du kannst Spieler nicht einladen, die bereits in einer Runde sind."); + ChatUtils.sendSimpleWarningMessage(player, "group.invite.invitedinround"); return true; } MinecleanerGroupManager groupManager = plugin.getGroupManager(); if(groupManager.getInvitedGroup(player) != null) { - ChatUtils.sendSimpleInfoMessage(player, "Du wurdest bereits in eine Gruppe eingeladen. Bitte kümmere dich zuerst um die Einladung bevor du eine eigene Gruppe erstellst."); + ChatUtils.sendSimpleInfoMessage(player, "group.invite.alreadyinvited"); return true; } if(groupManager.getGroup(player) != null && !Bukkit.getPlayer(groupManager.getGroup(player).getOwner()).equals(player)) { - ChatUtils.sendSimpleInfoMessage(player, "Nur als Ersteller der Gruppe bist du berechtigt Leute einzuladen."); + ChatUtils.sendSimpleInfoMessage(player, "group.invite.nopermission"); return true; } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java index 90c08ce..abbc265 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/groups/ListGroupMembersCommand.java @@ -45,7 +45,7 @@ public class ListGroupMembersCommand extends SubCommand { Player player = (Player) commandSender; if(plugin.getGroupManager().getGroup(player) == null) { - ChatUtils.sendSimpleInfoMessage(player, "Du bist in keiner Gruppe."); + ChatUtils.sendSimpleInfoMessage(player, "group.common.notingroup"); return true; } diff --git a/src/main/resources/lang/de_DE.properties b/src/main/resources/lang/de_DE.properties index 31be8cb..49365e5 100644 --- a/src/main/resources/lang/de_DE.properties +++ b/src/main/resources/lang/de_DE.properties @@ -19,6 +19,8 @@ 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.list.created=Angelegte {0}-Arenen arena.list.none=(keine) @@ -34,4 +36,22 @@ 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. \ No newline at end of file +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. \ No newline at end of file diff --git a/src/main/resources/lang/en_US.properties b/src/main/resources/lang/en_US.properties index 6aff9f5..ecfbbd8 100644 --- a/src/main/resources/lang/en_US.properties +++ b/src/main/resources/lang/en_US.properties @@ -19,6 +19,9 @@ 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.list.created=Created {0} arenas arena.list.none=(none) @@ -34,4 +37,22 @@ 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. \ No newline at end of file +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. From a308cc9546e7c6068d412eb7e0f10888898d2435 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 25 May 2024 21:55:13 +0200 Subject: [PATCH 46/53] only creator of group can start game (no spam from other members) --- .../java/de/lunarakai/minecleaner/MinecleanerListener.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index d3059e7..d5ff403 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -105,6 +105,11 @@ public class MinecleanerListener implements Listener { 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(), "Nur der Ersteller der Gruppe kann eine neue Runde starten!"); + return; + } Player[] players = new Player[arraySize]; if(plugin.getGroupManager().getGroup(e.getPlayer()) != null) { From 63674eb9ef719c282ac07235512352bd75eecbd2 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 25 May 2024 21:59:01 +0200 Subject: [PATCH 47/53] forgot something, whoops --- .../java/de/lunarakai/minecleaner/MinecleanerListener.java | 2 +- src/main/resources/lang/de_DE.properties | 4 +++- src/main/resources/lang/en_US.properties | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index d5ff403..9bfb4b4 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -107,7 +107,7 @@ public class MinecleanerListener implements Listener { } if(plugin.getGroupManager().getGroup(e.getPlayer()) != null && plugin.getGroupManager().getGroup(e.getPlayer()).getOwner() != e.getPlayer().getUniqueId()) { - ChatUtils.sendSimpleWarningMessage(e.getPlayer(), "Nur der Ersteller der Gruppe kann eine neue Runde starten!"); + ChatUtils.sendSimpleWarningMessage(e.getPlayer(), "group.game.nopermission"); return; } Player[] players = new Player[arraySize]; diff --git a/src/main/resources/lang/de_DE.properties b/src/main/resources/lang/de_DE.properties index 49365e5..87f7260 100644 --- a/src/main/resources/lang/de_DE.properties +++ b/src/main/resources/lang/de_DE.properties @@ -54,4 +54,6 @@ 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. \ No newline at end of file +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! \ No newline at end of file diff --git a/src/main/resources/lang/en_US.properties b/src/main/resources/lang/en_US.properties index ecfbbd8..1e60179 100644 --- a/src/main/resources/lang/en_US.properties +++ b/src/main/resources/lang/en_US.properties @@ -56,3 +56,5 @@ 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! From 31b18a98c95173b0747fb6a418b8ecb20beae8d7 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sat, 25 May 2024 22:26:55 +0200 Subject: [PATCH 48/53] sound --- .../lunarakai/minecleaner/MinecleanerManager.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index 6de4851..09d6509 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -221,10 +221,11 @@ public class MinecleanerManager { if(plugin.getGroupManager().getGroup(player[0]) != null) { World world = player[0].getWorld(); + MinecleanerGroupManager.MinecleanerGroup group = plugin.getGroupManager().getGroup(player[0]); + world.playSound(Bukkit.getPlayer(group.getOwner()).getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); + if(!isSuccessfullyCleared) { - world.playSound(player[0].getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); - for(Iterator iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); assert iteratorPlayer != null; @@ -242,17 +243,19 @@ public class MinecleanerManager { } int millis = (int) (System.currentTimeMillis() - arena.getCurrentGameStartTime()); - world.playSound(player[0].getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f); - MinecleanerGroupManager.MinecleanerGroup group = plugin.getGroupManager().getGroup(player[0]); + + 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) + if(iteratorPlayer != null) { iteratorPlayer.sendMessage(Component.text( - "Glückwunsch, ihr konntet das " + plugin.getDisplayedPluginName() + "-Feld in ", NamedTextColor.YELLOW) + "Glückwunsch, ihr konntet das " + plugin.getDisplayedPluginName() + "-Feld in ", NamedTextColor.YELLOW) .append(Component.text(MinecleanerStringUtil.timeToString(millis, false), NamedTextColor.RED)) .append(Component.text(" erfolgreich lösen!", NamedTextColor.YELLOW))); + } + if(!plugin.isStatisticsEnabled()) continue; From 9f652507711076a119c5173a8fce283a31f88880 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Mon, 27 May 2024 15:39:29 +0200 Subject: [PATCH 49/53] fixed stats command --- .../java/de/lunarakai/minecleaner/commands/StatsCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java index eae5b99..a4f8ab4 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java @@ -101,7 +101,7 @@ public class StatsCommand extends SubCommand { .append(Component.text(String.valueOf(totalWonMonth), NamedTextColor.GREEN)) .append(Component.text(" ")) .append(createLangComponent("data.player.outof", NamedTextColor.GREEN)) - .append(Component.text(" " + totalSize + " (" + MinecleanerStringUtil.percentageString(totalWonMonth, totalSizeMonth) + ")", NamedTextColor.GREEN))); + .append(Component.text(" " + totalSizeMonth + " (" + MinecleanerStringUtil.percentageString(totalWonMonth, totalSizeMonth) + ")", NamedTextColor.GREEN))); Integer time = data.getBestTime(e.getKey()); Integer timeThisMonth = data.getBestTimeThisMonth(e.getKey()); From 854fdd1c1da76e9eac6f301e7854b6b3ed31f280 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Fri, 31 May 2024 19:03:46 +0200 Subject: [PATCH 50/53] sound fix when in group --- src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index 09d6509..99b92e7 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -222,10 +222,9 @@ public class MinecleanerManager { if(plugin.getGroupManager().getGroup(player[0]) != null) { World world = player[0].getWorld(); MinecleanerGroupManager.MinecleanerGroup group = plugin.getGroupManager().getGroup(player[0]); - world.playSound(Bukkit.getPlayer(group.getOwner()).getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); - if(!isSuccessfullyCleared) { + world.playSound(Bukkit.getPlayer(group.getOwner()).getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); for(Iterator iterator = plugin.getGroupManager().getGroup(player[0]).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); assert iteratorPlayer != null; From 017a02a0c06077fcf0d1891a8b4235cd15b24d2a Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Wed, 6 Nov 2024 01:52:58 +0100 Subject: [PATCH 51/53] fixed compilation error + apparently more usage of translatable components --- pom.xml | 2 +- .../minecleaner/MinecleanerGroupManager.java | 4 ++-- .../minecleaner/MinecleanerListener.java | 7 ++++--- .../minecleaner/MinecleanerManager.java | 16 +++++++-------- .../MinecleanerSettingsInventory.java | 17 ++++++++-------- .../lunarakai/minecleaner/utils/ItemUtil.java | 9 +++++---- .../utils/MinecleanerStringUtil.java | 9 +++++---- src/main/resources/lang/de_DE.properties | 20 ++++++++++++++++++- src/main/resources/lang/en_US.properties | 18 ++++++++++++++++- 9 files changed, 69 insertions(+), 33 deletions(-) diff --git a/pom.xml b/pom.xml index 39827a2..cbb8cb0 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ io.papermc.paper paper-api - 1.20.6-R0.1-SNAPSHOT + 1.21.3-R0.1-SNAPSHOT provided diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java index 22e3802..21fa246 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java @@ -55,13 +55,13 @@ public class MinecleanerGroupManager { continue; } Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); - ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "Die Gruppe wurde aufgelöst, da die Person, welche die Gruppe erstellt hat, aus der Gruppe entfernt wurde."); + ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "group.creator.removed"); } deleteGroup(getGroup(Bukkit.getPlayer(owner))); } players.remove(playerUUID); if(players.size() < 2) { - ChatUtils.sendSimpleInfoMessage(Bukkit.getPlayer(owner), "Die Gruppe wurde aufgelöst, da du nur noch alleine in der Gruppe bist"); + ChatUtils.sendSimpleInfoMessage(Bukkit.getPlayer(owner), "group.dismantled.alone"); deleteGroup(getGroup(Bukkit.getPlayer(owner))); } } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 9bfb4b4..74a2a53 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -5,6 +5,7 @@ import java.util.Arrays; import java.util.Iterator; import java.util.UUID; import java.util.logging.Level; +import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; @@ -199,7 +200,7 @@ public class MinecleanerListener implements Listener { if(arena != null) { if(plugin.getGroupManager().getGroup(player) == null) { if((arena.isTooFarAway(player))) { - ChatUtils.sendSimpleInfoMessage(player, "Du hast dich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen."); + ChatUtils.sendSimpleInfoMessage(player, "arena.common.toofaraway"); Player[] players = new Player[] { player }; @@ -213,11 +214,11 @@ public class MinecleanerListener implements Listener { for(Iterator iterator = plugin.getGroupManager().getGroup(player).getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); if(iteratorPlayer == ownerPlayer) { - ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "Du hast dich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen."); + ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "arena.common.toofaraway"); continue; } assert iteratorPlayer != null; - ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "Der Ersteller der Gruppe hat sich zu weit von der Arena entfernt. Das Spiel wurde abgebrochen."); + ChatUtils.sendSimpleInfoMessage(iteratorPlayer, "arena.common.groupleadertoofaraway"); } Player[] players = new Player[] { ownerPlayer diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index 99b92e7..aae4d07 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -36,8 +36,8 @@ import de.iani.cubesideutils.bukkit.items.ItemStacks; import de.iani.playerUUIDCache.CachedPlayer; import de.lunarakai.minecleaner.game.BoardSize; import de.lunarakai.minecleaner.utils.MinecleanerStringUtil; -import net.md_5.bungee.api.ChatColor; +// Todo: translatable components verwenden public class MinecleanerManager { private final MinecleanerPlugin plugin; private final Inventory confirmPlayingInventory; @@ -69,10 +69,8 @@ public class MinecleanerManager { this.sizes.put(3, "experte"); this.confirmPlayingInventory = plugin.getServer().createInventory(null, InventoryType.HOPPER, plugin.getDisplayedPluginName() + " starten?"); - this.confirmPlayingInventory.setItem(1, - ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.GREEN_CONCRETE), ChatColor.GREEN + "Bestätigen"))); - this.confirmPlayingInventory.setItem(3, - ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.RED_CONCRETE), ChatColor.RED + "Abbrechen"))); + this.confirmPlayingInventory.setItem(1, ItemStacks.rename(new ItemStack(Material.GREEN_CONCRETE), NamedTextColor.GREEN + "Bestätigen")); + this.confirmPlayingInventory.setItem(3, ItemStacks.rename(new ItemStack(Material.GREEN_CONCRETE), NamedTextColor.RED + "Abbrechen")); // Settings @@ -190,7 +188,7 @@ public class MinecleanerManager { arena.removePlayers(); if(message) { for(int i = 0; i < players.length; i++) { - players1[i].sendMessage(ChatColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); + players1[i].sendMessage(NamedTextColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); } } } @@ -310,9 +308,9 @@ public class MinecleanerManager { if(sg != null) { ps.minScore(sg, millis, isUpdated -> { if(isUpdated != null && isUpdated) { - player[0].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 { - player[0].sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!"); + 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!"); } }); } @@ -320,7 +318,7 @@ public class MinecleanerManager { int wIndex = arena.getWidthIndex(); increaseScore(wIndex, ps, 1); } else { - player[0].sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das " + plugin.getDisplayedPluginName() + "-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis, false) + ChatColor.YELLOW + " erfolgreich lösen!"); + 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); diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java index 2ac51ee..27523e7 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerSettingsInventory.java @@ -2,7 +2,8 @@ package de.lunarakai.minecleaner; import de.iani.cubesideutils.bukkit.inventory.AbstractWindow; import de.lunarakai.minecleaner.utils.ItemUtil; -import net.md_5.bungee.api.ChatColor; +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; @@ -35,28 +36,28 @@ public class MinecleanerSettingsInventory extends AbstractWindow { switch (i) { case SETTINGS_ALLOW_MANUEL_RESET -> { if (plugin.getManager().getSettingsValue("allowmanualreset", player) == 0) { - item = ItemUtil.createGuiItem(Material.SHEARS, ChatColor.RED + "Manuelles Resetten deaktiviert"); + item = ItemUtil.createGuiItem(Material.SHEARS, Component.translatable("settings.manualreset.deny", NamedTextColor.RED)); } else { - item = ItemUtil.createGuiItem(Material.SHEARS, ChatColor.GREEN + "Manuelles Resetten aktiviert"); + 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, ChatColor.RED + "Zusätzliche Anzeige in der Action Bar deaktiviert\""); + item = ItemUtil.createGuiItem(Material.NAME_TAG, Component.translatable("settings.additionaltimer.deny", NamedTextColor.RED)); } else { - item = ItemUtil.createGuiItem(Material.NAME_TAG, ChatColor.GREEN + "Zusätzliche Anzeige in der Action Bar aktiviert\""); + 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, ChatColor.RED + "Timer wird nicht angezeigt"); + item = ItemUtil.createGuiItem(Material.CLOCK, Component.translatable("settings.timer.deny", NamedTextColor.RED)); } else { - item = ItemUtil.createGuiItem(Material.CLOCK, ChatColor.GREEN + "Timer wird angezeigt"); + 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, ChatColor.GOLD + "Resetzeit: " + ChatColor.RED + current + "s"); + 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; } diff --git a/src/main/java/de/lunarakai/minecleaner/utils/ItemUtil.java b/src/main/java/de/lunarakai/minecleaner/utils/ItemUtil.java index bf9e2e7..7bfab72 100644 --- a/src/main/java/de/lunarakai/minecleaner/utils/ItemUtil.java +++ b/src/main/java/de/lunarakai/minecleaner/utils/ItemUtil.java @@ -1,6 +1,7 @@ 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; @@ -8,13 +9,13 @@ import org.bukkit.inventory.ItemStack; public class ItemUtil { - public static final ItemStack EMPTY_ICON = createGuiItem(Material.GRAY_STAINED_GLASS_PANE, " ", true, true); + public static final ItemStack EMPTY_ICON = createGuiItem(Material.GRAY_STAINED_GLASS_PANE, Component.text(" "), true, true); - public static ItemStack createGuiItem(Material material, String name, String... lore) { + public static ItemStack createGuiItem(Material material, Component name, String... lore) { return createGuiItem(material, name, false, lore); } - public static ItemStack createGuiItem(Material material, String name, boolean glowing, boolean showTooltip, String... 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); @@ -26,7 +27,7 @@ public class ItemUtil { } - public static ItemStack createGuiItem(Material material, String name, boolean glowing, String... lore) { + public static ItemStack createGuiItem(Material material, Component name, boolean glowing, String... lore) { return createGuiItem(material, name, glowing, true, lore); } } diff --git a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java index d9dec83..7fe8eb6 100644 --- a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java +++ b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java @@ -1,6 +1,7 @@ package de.lunarakai.minecleaner.utils; import java.net.URL; +import net.kyori.adventure.text.Component; public class MinecleanerStringUtil { private MinecleanerStringUtil() { @@ -14,7 +15,7 @@ public class MinecleanerStringUtil { min = min % 60; StringBuilder timeString = new StringBuilder(); if (hours > 0) { - String hoursString = " Stunden"; + String hoursString = " " + Component.translatable("minecleaner.common.hours"); if(shorten) { hoursString = " h"; } @@ -24,7 +25,7 @@ public class MinecleanerStringUtil { if (!timeString.isEmpty()) { timeString.append(", "); } - String minString = " Minuten"; + String minString = " " + Component.translatable("minecleaner.common.minutes"); if(shorten) { minString = " min"; } @@ -32,9 +33,9 @@ public class MinecleanerStringUtil { } if (sec > 0 || !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) { secondsString = " s"; } diff --git a/src/main/resources/lang/de_DE.properties b/src/main/resources/lang/de_DE.properties index 87f7260..094f1a7 100644 --- a/src/main/resources/lang/de_DE.properties +++ b/src/main/resources/lang/de_DE.properties @@ -3,6 +3,20 @@ 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 @@ -20,6 +34,8 @@ 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) @@ -56,4 +72,6 @@ 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! \ No newline at end of file +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. \ No newline at end of file diff --git a/src/main/resources/lang/en_US.properties b/src/main/resources/lang/en_US.properties index 1e60179..99ffa36 100644 --- a/src/main/resources/lang/en_US.properties +++ b/src/main/resources/lang/en_US.properties @@ -3,6 +3,19 @@ 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 @@ -20,7 +33,8 @@ 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) @@ -58,3 +72,5 @@ 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. From 8c105bba584460c536afefe87367b1f7b7d710ee Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Wed, 6 Nov 2024 01:57:19 +0100 Subject: [PATCH 52/53] eclipse specific gitignore additions --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 39e5df2..359926e 100644 --- a/.gitignore +++ b/.gitignore @@ -114,3 +114,9 @@ buildNumber.properties # Common working directory run/ + +# eclipse +/.classpath +/.project +/.settings +/target \ No newline at end of file From a89930a73af3d0ec280faf52548db569a3f78e32 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Tue, 21 Jan 2025 17:22:27 +0100 Subject: [PATCH 53/53] a little bit of refactoring --- .../de/lunarakai/minecleaner/ArenaList.java | 37 ++++++++++++++----- .../de/lunarakai/minecleaner/ArenaStatus.java | 27 ++++++++++++++ .../minecleaner/MinecleanerGroupManager.java | 19 ++++++++++ .../minecleaner/MinecleanerListener.java | 5 +-- .../minecleaner/MinecleanerManager.java | 36 +++++++++++------- .../minecleaner/MinecleanerPlugin.java | 32 +++++++++++----- .../minecleaner/utils/MinecleanerUtils.java | 11 ++++++ 7 files changed, 130 insertions(+), 37 deletions(-) create mode 100644 src/main/java/de/lunarakai/minecleaner/utils/MinecleanerUtils.java diff --git a/src/main/java/de/lunarakai/minecleaner/ArenaList.java b/src/main/java/de/lunarakai/minecleaner/ArenaList.java index 90068d2..b343547 100644 --- a/src/main/java/de/lunarakai/minecleaner/ArenaList.java +++ b/src/main/java/de/lunarakai/minecleaner/ArenaList.java @@ -8,6 +8,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.UUID; import java.util.logging.Level; +import de.lunarakai.minecleaner.utils.MinecleanerUtils; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; @@ -100,6 +101,13 @@ public class ArenaList { save(); } + /** + * checks for any other arena that might be at the same location as the new MinecleanerArena + * + * @param newArena the new Arena that is set to be created + * @return true if another MinecleanerArena (or at least one Block of another arena) is at the same location as newArena otherwise false + * @see MinecleanerArena + */ public boolean collidesWithArena(MinecleanerArena newArena) { for(Location location : newArena.getBlocks()) { if(arenaBlocks.get(location) != null) { @@ -125,7 +133,7 @@ public class ArenaList { if(playersInArena.get(player.getUniqueId()) == null) { return null; } - int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroup(player).getPlayers().size() : 1; + int arraySize = MinecleanerUtils.isPlayerInGroup(plugin, player) ? plugin.getGroupManager().getGroupSize(player) : 1; Player[] players = new Player[arraySize]; if(plugin.getGroupManager().getGroup(player) != null) { @@ -191,18 +199,27 @@ public class ArenaList { if(arena.hasPlayers()) { plugin.getManager().leaveArena(arena.getCurrentPlayers(), true, true); } - - for(UUID id : arena.getBlockDisplays()) { - if(id != null) { - arenaBlockDisplays.remove(id); - } - } - for(Location block : arena.getBlocks()) { - arenaBlocks.remove(block); - } + + removeArenaBlockDisplayIDs(arena); + removeArenaBlocks(arena); + arena.removeBlockDisplays(); arenas.remove(arena.getName()); save(); } + + private void removeArenaBlocks(MinecleanerArena arena) { + for(Location block : arena.getBlocks()) { + arenaBlocks.remove(block); + } + } + + private void removeArenaBlockDisplayIDs(MinecleanerArena arena) { + for(UUID id : arena.getBlockDisplays()) { + if(id != null) { + arenaBlockDisplays.remove(id); + } + } + } } diff --git a/src/main/java/de/lunarakai/minecleaner/ArenaStatus.java b/src/main/java/de/lunarakai/minecleaner/ArenaStatus.java index c348494..0d5eb2a 100644 --- a/src/main/java/de/lunarakai/minecleaner/ArenaStatus.java +++ b/src/main/java/de/lunarakai/minecleaner/ArenaStatus.java @@ -1,8 +1,35 @@ package de.lunarakai.minecleaner; +/** + * Possible Status of a MinecleanerArena + *
  • {@link #INACTIVE}
  • + *
  • {@link #CONFIRM_PLAYING}
  • + *
  • {@link #PLAYING}
  • + *
  • {@link #COMPLETED}
  • + * + * @see MinecleanerArena + * + */ public enum ArenaStatus { + /** + * default state + */ INACTIVE, + + /** + * Active when the player (or group leader) has interacted with an {@link #INACTIVE} arena and + * sees the confirmPlayingInventory to decide if they start a Game or not + * @see MinecleanerManager#getConfirmPlayingInventory() + */ CONFIRM_PLAYING, + + /** + * Active when a Player (or Group) has confirmed to start a Minecleaner Game (and while playing) + */ PLAYING, + + /** + * Active when a Player (or Group) has either won or lost a Mineclenaer Game and the Arena the scheduled for a reset -> {@link #INACTIVE} + */ COMPLETED } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java index 21fa246..ec3c7b3 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java @@ -116,6 +116,12 @@ public class MinecleanerGroupManager { 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) { @@ -130,7 +136,20 @@ public class MinecleanerGroupManager { 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(); + } } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 74a2a53..89f79fd 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -5,7 +5,6 @@ import java.util.Arrays; import java.util.Iterator; import java.util.UUID; import java.util.logging.Level; -import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; @@ -153,7 +152,7 @@ public class MinecleanerListener implements Listener { if(hasConfirmed) { Player[] players; if(plugin.getGroupManager().getGroup(player) != null) { - players = new Player[plugin.getGroupManager().getGroup(player).getPlayers().size()]; + players = new Player[plugin.getGroupManager().getGroupSize(player)]; players[0] = player; } else { players = new Player[1]; @@ -176,7 +175,7 @@ public class MinecleanerListener implements Listener { MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); if(arena != null) { if(arena.getArenaStatus() == ArenaStatus.CONFIRM_PLAYING && e.getInventory().equals(plugin.getManager().getConfirmPlayingInventory())) { - int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroup(player).getPlayers().size() : 1; + int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroupSize(player) : 1; Player[] players = new Player[arraySize]; if(plugin.getGroupManager().getGroup(player) != null) { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index aae4d07..29914f8 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -158,18 +158,11 @@ public class MinecleanerManager { } public void leaveArena(Player[] players, boolean message, boolean reset) { - 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); - } - Player[] players1 = group != null ? new Player[group.getPlayers().size()] : new Player[1]; + getGroupLeaderOrPlayer player = getGetGroupLeaderOrPlayer(players); + Player[] players1 = player.group() != null ? new Player[player.group().getPlayers().size()] : new Player[1]; if(plugin.getGroupManager().getGroup(players[0]) != null) { int i = 0; - for(Iterator iterator = group.getPlayers().iterator(); iterator.hasNext();) { + for(Iterator iterator = player.group().getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); players1[i] = iteratorPlayer; i++; @@ -178,14 +171,14 @@ public class MinecleanerManager { players1 = players; } - Preconditions.checkArgument(arena != null, "player is in no arena"); + Preconditions.checkArgument(player.arena() != null, "player is in no arena"); if(reset) { - arena.setArenaStaus(ArenaStatus.INACTIVE); + player.arena().setArenaStaus(ArenaStatus.INACTIVE); for(int i = 0; i < players1.length; i++) { players1[i].closeInventory(); } - arena.removePlayers(); + player.arena().removePlayers(); if(message) { for(int i = 0; i < players.length; i++) { players1[i].sendMessage(NamedTextColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); @@ -196,6 +189,21 @@ public class MinecleanerManager { plugin.getArenaList().setArenaForPlayers(players1, null); } + private @NotNull getGroupLeaderOrPlayer getGetGroupLeaderOrPlayer(Player[] players) { + MinecleanerGroupManager.MinecleanerGroup group = null; + MinecleanerArena arena; + if(plugin.getGroupManager().getGroup(players[0]) != null) { + group = plugin.getGroupManager().getGroup(players[0]); + arena = plugin.getArenaList().getPlayerArena(Objects.requireNonNull(Bukkit.getPlayer(group.getOwner()))); + } else { + arena = plugin.getArenaList().getPlayerArena(players); + } + return new getGroupLeaderOrPlayer(group, arena); + } + + private record getGroupLeaderOrPlayer(MinecleanerGroupManager.MinecleanerGroup group, MinecleanerArena arena) { + } + public void startGame(Player[] players) { MinecleanerArena arena = plugin.getArenaList().getPlayerArena(players); @@ -359,7 +367,7 @@ public class MinecleanerManager { if (arena.getCurrentPlayers() == null) { arena.removePlayers(); } else { - int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroup(player).getPlayers().size() : 1; + 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) { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java index a06bc7d..afe57a8 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java @@ -56,17 +56,9 @@ public final class MinecleanerPlugin extends JavaPlugin { } public void onLateEnable() { - if(getServer().getPluginManager().getPlugin("PlayerUUIDCache") != null) { - playerUUIDCache = (PlayerUUIDCache) getServer().getPluginManager().getPlugin("PlayerUUIDCache"); - } else { - this.getLogger().log(Level.WARNING, "PlayerUUIDCache not found."); - } + checkForPlayerUUIDChache(); - 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"); - } + checkForCubesideStatistics(); arenaList = new ArenaList(this); arenaList.load(); @@ -90,6 +82,10 @@ public final class MinecleanerPlugin extends JavaPlugin { minecleanerCommand.addCommandMapping(new DismantleGroupCommand(this), "dismantlegroup"); minecleanerCommand.addCommandMapping(new ListGroupMembersCommand(this), "groupmembers"); + enableCubesideStatisticsCommands(minecleanerCommand); + } + + private void enableCubesideStatisticsCommands(CommandRouter minecleanerCommand) { if(isStatisticsEnabled()) { minecleanerCommand.addCommandMapping(new SettingsCommand(this), "settings"); minecleanerCommand.addCommandMapping(new StatsCommand(this), "stats"); @@ -97,6 +93,22 @@ public final class MinecleanerPlugin extends JavaPlugin { } } + private void checkForCubesideStatistics() { + if(getServer().getPluginManager().getPlugin("CubesideStatistics") != null) { + cubesideStatistics = getServer().getServicesManager().load(CubesideStatisticsAPI.class); + } else { + this.getLogger().log(Level.WARNING, "Cubeside Statistics not found. No Statistics will be available"); + } + } + + private void checkForPlayerUUIDChache() { + if(getServer().getPluginManager().getPlugin("PlayerUUIDCache") != null) { + playerUUIDCache = (PlayerUUIDCache) getServer().getPluginManager().getPlugin("PlayerUUIDCache"); + } else { + this.getLogger().log(Level.WARNING, "PlayerUUIDCache not found."); + } + } + @Override public void onDisable() { if(minecleanerManager != null) { diff --git a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerUtils.java b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerUtils.java new file mode 100644 index 0000000..cb9ab00 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerUtils.java @@ -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; + } +}