diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index 67de8cd..caeff83 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -156,16 +156,16 @@ public class MinecleanerArena { double southGapFixZ = 0.0; if(orientation == BlockFace.EAST) { rotation0 = 90; - eastWestGapFixX = 0.55; - eastWestGapFixZ = -0.46; + eastWestGapFixX = 0.5; + eastWestGapFixZ = -0.55; } else if(orientation == BlockFace.SOUTH) { rotation0 = 180; southGapFixX = 1.02; - southGapFixZ = 0.1; + southGapFixZ = -0.05; } else if(orientation == BlockFace.WEST) { rotation0 = 270; - eastWestGapFixX = 0.5; - eastWestGapFixZ = 0.5725; + eastWestGapFixX = 0.55; + eastWestGapFixZ = 0.5; } float rotation = rotation0; @@ -176,8 +176,7 @@ public class MinecleanerArena { int d1z = d0x; Location loc = location.clone(); - - // todo: felder bisschen dichter an die wand + for(int fx = 0; fx < size; fx++) { final int fxf = fx; for(int fz = 0; fz < size; fz++) { @@ -185,7 +184,7 @@ public class MinecleanerArena { 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.45 + eastWestGapFixZ + southGapFixZ - (d1z * fz) / 3.0 + d0z * 0.55 + d1z * 1.847); + 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(); @@ -270,6 +269,7 @@ public class MinecleanerArena { currentMinecleanerGame.start(); flagsPlaced = 0; arenaStatus = ArenaStatus.PLAYING; + currentGameStartTime = System.currentTimeMillis(); } public void addJoiningPlayer(Player player) { @@ -468,7 +468,6 @@ public class MinecleanerArena { } player.getLocation(tempLoc); double dist = tempLoc.distanceSquared(centerLocation); - // todo: larger for bigger boards switch (widthIndex) { case 0: return dist > 64.0; @@ -512,9 +511,11 @@ public class MinecleanerArena { return BoardSize.boardSizes[widthIndex]; } - // Difficulty + public long getCurrentGameStartTime() { + return currentGameStartTime; + } + public int getWidthIndex() { return widthIndex; - } - + } } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 78e48a0..6d1c89b 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -31,7 +31,7 @@ public class MinecleanerListener implements Listener { @EventHandler(priority = EventPriority.LOWEST) public void onPlayerInteract(PlayerInteractEvent e) { - // wenn (e.getHand != MainHand) return; + 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()); @@ -51,18 +51,14 @@ public class MinecleanerListener implements Listener { if(r2 != null) { Vector hitPos = r2.getHitPosition(); - //Vector hitPos = rayTraceResult.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(); - //player.sendMessage(ChatColor.GRAY + "lx: " + lx + " ,ly: " + ly + " ,lz: " + lz); - double dy = ly + 1.5; // 1.5 - //player.sendMessage(ChatColor.GRAY + "dy: " + dy); - double dz = -d1x * lx - d1z * lz + 1.5; // 1.5 - //player.sendMessage(ChatColor.GRAY + "dz: " + dz); + 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; @@ -72,35 +68,13 @@ public class MinecleanerListener implements Listener { blockx -= blockxInt; blockz -= blockzInt; - /* - if(lx < 0) { - blockxInt = blockxInt - (-blockxInt); - } else { - blockxInt = blockxInt - blockxInt; - } - - if(lz < 0) { - blockzInt = blockzInt - (-blockzInt); - } else { - blockzInt = blockzInt - blockzInt; - } - */ - - player.sendMessage(ChatColor.GRAY + "blockx: " + blockx + " ,blockz: " + blockz); - //player.sendMessage(ChatColor.GRAY + "blockxInt: " + blockxInt + " ,blockzInt: " + blockzInt); - - if (blockx >= 0.1 && blockx <= 0.95 && blockz >= 0.0125 && blockz <= 0.98125) { - //if ((blockx >= 0.13 && blockx <= 0.9825 && blockx <= 0.12) && blockz >= 0.0125 && blockz <= 0.98125) { - boolean hasRightClicked = false; - if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { - hasRightClicked = true; - } - //player.sendMessage("Arena click! " + blockxInt + " " + blockzInt + " Right Clicked: " + hasRightClicked); - plugin.getManager().handleFieldClick(e.getPlayer(), blockxInt, blockzInt, hasRightClicked); + boolean hasRightClicked = false; + if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { + hasRightClicked = true; } + //player.sendMessage("Arena click! " + blockxInt + " " + blockzInt + " Right Clicked: " + hasRightClicked); + plugin.getManager().handleFieldClick(e.getPlayer(), blockxInt, blockzInt, hasRightClicked); } - - } } } else { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index 4725f1d..302708e 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -26,6 +26,7 @@ import de.iani.cubesidestats.api.TimeFrame; 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; public class MinecleanerManager { @@ -34,14 +35,11 @@ public class MinecleanerManager { private final HashMap sizes; // Statistics - private final StatisticKey statisticsGamesTotal; + private final StatisticKey statisticsWonGamesTotal; private final StatisticKey statisticsPointsAcquired; - - // private final HashMap statisticsGames; - - private int prevTick = 0; - + private final HashMap statisticsTimeRecord; + private final HashMap statisticsTotalGamesPlayed; public MinecleanerManager(MinecleanerPlugin plugin) { this.plugin = plugin; @@ -51,29 +49,39 @@ public class MinecleanerManager { this.sizes.put(1, "mittel"); this.sizes.put(2, "groß"); - // Deprecated this.confirmPlayingInventory = plugin.getServer().createInventory(null, InventoryType.HOPPER, "Minecleaner 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"))); - - statisticsGamesTotal = plugin.getCubesideStatistics().getStatisticKey("minecleaner.gamesTotal"); - statisticsGamesTotal.setIsMonthlyStats(true); - statisticsGamesTotal.setDisplayName("Runden gespielt"); + statisticsWonGamesTotal = plugin.getCubesideStatistics().getStatisticKey("minecleaner.wonGamestotal"); + statisticsWonGamesTotal.setIsMonthlyStats(true); + statisticsWonGamesTotal.setDisplayName("Runden gewonnen"); - statisticsPointsAcquired = plugin.getCubesideStatistics().getStatisticKey("minecleaner.pointsTotal"); + statisticsPointsAcquired = plugin.getCubesideStatistics().getStatisticKey("minecleaner.pointstotal"); statisticsPointsAcquired.setIsMonthlyStats(true); statisticsPointsAcquired.setDisplayName("Punkte erspielt"); statisticsGames = new HashMap<>(); + statisticsTimeRecord = new HashMap<>(); + statisticsTotalGamesPlayed = new HashMap<>(); + for(Entry e : this.sizes.entrySet()) { String sizeDisplay = e.getValue(); - StatisticKey s = plugin.getCubesideStatistics().getStatisticKey("minecleaner.games.boardsize." + e.getKey()); + StatisticKey s = plugin.getCubesideStatistics().getStatisticKey("minecleaner.wongames.boardsize." + e.getKey()); s.setIsMonthlyStats(true); - s.setDisplayName("Runden gespielt auf Spielfeldgröße " + sizeDisplay + " gespielt"); + s.setDisplayName("Runden gewonnen auf Spielfeldgröße " + sizeDisplay); statisticsGames.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.setDisplayName("Bestzeit bei Größe " + sizeDisplay); + statisticsTimeRecord.put(e.getKey(), s); } } @@ -112,11 +120,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; + if(!isSuccessfullyCleared) { - // angefangene Spiele zählen world.playSound(player.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.5f, 0.5f); - player.sendMessage(ChatColor.YELLOW + "Game Over! Du konntest das Feld nicht erfolgreich lösen!"); + player.sendMessage(ChatColor.YELLOW + "Game Over! Du konntest das Minecleaner-Feld nicht erfolgreich lösen!"); arena.showMines(); + + sg = statisticsTotalGamesPlayed.get(arena.getWidthIndex()); + + if(sg != null) { + ps.increaseScore(sg, 1); + } Bukkit.getScheduler().runTaskLater(plugin, () -> { if(arena.getCurrentPlayer() == null) { @@ -124,17 +140,24 @@ public class MinecleanerManager { } else { leaveArena(player, false); } - }, 100L); return; } - player.sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das Feld erfolgreich lösen!"); - + int millis = (int) (System.currentTimeMillis() - arena.getCurrentGameStartTime()); + player.sendMessage(ChatColor.YELLOW + "Glückwunsch, du konntest das Minecleaner-Feld in " + ChatColor.RED + MinecleanerStringUtil.timeToString(millis) + ChatColor.YELLOW + " erfolgreich lösen!"); world.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f); - PlayerStatistics ps = plugin.getCubesideStatistics().getStatistics(player.getUniqueId()); - ps.increaseScore(statisticsGamesTotal, 1); + 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); + } int wIndex = arena.getWidthIndex(); switch (wIndex) { @@ -163,7 +186,6 @@ public class MinecleanerManager { leaveArena(player, false); } }, 100L); - } public void clearAllArenas() { @@ -183,21 +205,11 @@ public class MinecleanerManager { Preconditions.checkArgument(arena != null, "player is in no arena"); Preconditions.checkState(arena.getArenaStatus() == ArenaStatus.PLAYING, "not running"); - // Feels like a stupid solution for issue described in the next comment - int currentTick = plugin.getServer().getCurrentTick(); - if(prevTick != currentTick) { - // Fires Twice for Right Click on Same Tick, but only once for left click... stupid :< - if(hasRightClicked) { - // flag - //plugin.getLogger().log(Level.SEVERE, " Right Clicked @ Tick: " + plugin.getServer().getCurrentTick()); - arena.flagCell(x, y); - } else { - // reveal - //plugin.getLogger().log(Level.SEVERE, " Left Clicked @ Tick: " + plugin.getServer().getCurrentTick()); - arena.revealCell(x, y); - } - } - prevTick = currentTick; + if(hasRightClicked) { + arena.flagCell(x, y); + } else { + arena.revealCell(x, y); + } } public void getStatisticsForPlayer(OfflinePlayer player, Consumer callback) { @@ -205,28 +217,35 @@ public class MinecleanerManager { PlayerStatistics pStatistics = plugin.getCubesideStatistics().getStatistics(player.getUniqueId()); PlayerStatisticsQueryKey kMatchesPlayed; - keys.add(kMatchesPlayed = new PlayerStatisticsQueryKey(pStatistics, statisticsGamesTotal, QueryType.SCORE)); + keys.add(kMatchesPlayed = new PlayerStatisticsQueryKey(pStatistics, statisticsWonGamesTotal, QueryType.SCORE)); PlayerStatisticsQueryKey kMatchesPlayedMonth; - keys.add(kMatchesPlayedMonth = new PlayerStatisticsQueryKey(pStatistics, statisticsGamesTotal, QueryType.SCORE, TimeFrame.MONTH)); - - HashMap kgamesPlayedSize = new HashMap<>(); - HashMap kgamesPlayedSizeMonth = new HashMap<>(); - + keys.add(kMatchesPlayedMonth = new PlayerStatisticsQueryKey(pStatistics, statisticsWonGamesTotal, QueryType.SCORE, TimeFrame.MONTH)); + HashMap kWonGamesPlayedSize = new HashMap<>(); + HashMap kWonGamesPlayedSizeMonth = new HashMap<>(); + HashMap kSizeTimeRecord = new HashMap<>(); + HashMap kSizeTotalGamesPlayed = new HashMap<>(); + HashMap kSizeTotalGamesPlayedMonth = new HashMap<>(); for (int i = 0; i < BoardSize.boardSizes.length; i++) { PlayerStatisticsQueryKey qk; StatisticKey statisticKeyGames = statisticsGames.get(i); keys.add(qk = new PlayerStatisticsQueryKey(pStatistics, statisticKeyGames, QueryType.SCORE)); - kgamesPlayedSize.put(i, qk); + kWonGamesPlayedSize.put(i, qk); keys.add(qk = new PlayerStatisticsQueryKey(pStatistics, statisticKeyGames, QueryType.SCORE, TimeFrame.MONTH)); - kgamesPlayedSizeMonth.put(i, qk); + kWonGamesPlayedSizeMonth.put(i, qk); - // todo: - // PlayerTime + StatisticKey statisticKeyTotalGames = statisticsTotalGamesPlayed.get(i); + keys.add(qk = new PlayerStatisticsQueryKey(pStatistics, statisticKeyTotalGames, QueryType.SCORE)); + kSizeTotalGamesPlayed.put(i, qk); + keys.add(qk = new PlayerStatisticsQueryKey(pStatistics, statisticKeyTotalGames, QueryType.SCORE, TimeFrame.MONTH)); + kSizeTotalGamesPlayedMonth.put(i, qk); + + StatisticKey statisticKeyTime = statisticsTimeRecord.get(i); + keys.add(qk = new PlayerStatisticsQueryKey(pStatistics, statisticKeyTime, QueryType.SCORE)); + kSizeTimeRecord.put(i, qk); } - PlayerStatisticsQueryKey kPointsAcquired; keys.add(kPointsAcquired = new PlayerStatisticsQueryKey(pStatistics, statisticsPointsAcquired, QueryType.SCORE)); PlayerStatisticsQueryKey kPointsAcquiredMonth; @@ -238,17 +257,30 @@ public class MinecleanerManager { int pointsAcquiredTotal = c.getOrDefault(kPointsAcquired, 0); int pointsAcquiredMonth = c.getOrDefault(kPointsAcquiredMonth, 0); - HashMap sizeGames = new HashMap<>(); - HashMap sizeGamesMonth = new HashMap<>(); + HashMap sizeWonGames = new HashMap<>(); + HashMap sizeWonGamesMonth = new HashMap<>(); + HashMap sizeTimeRecord = new HashMap<>(); + HashMap sizeTotalGamesPlayed = new HashMap<>(); + HashMap sizeTotalGamesPlayedMonth = new HashMap<>(); for(int i = 0; i < BoardSize.boardSizes.length; i++) { - sizeGames.put(i, c.getOrDefault(kgamesPlayedSize.get(i), 0)); - sizeGames.put(i, c.getOrDefault(kgamesPlayedSizeMonth.get(i), 0)); + sizeWonGames.put(i, c.getOrDefault(kWonGamesPlayedSize.get(i), 0)); + sizeWonGamesMonth.put(i, c.getOrDefault(kWonGamesPlayedSizeMonth.get(i), 0)); + sizeTimeRecord.put(i, c.getOrDefault(kSizeTimeRecord.get(i), null)); + sizeTotalGamesPlayed.put(i, c.getOrDefault(kSizeTotalGamesPlayed.get(i), 0)); + sizeTotalGamesPlayedMonth.put(i, c.getOrDefault(kSizeTotalGamesPlayedMonth.get(i), 0)); } - callback.accept(new PlayerStatisticsData(player.getUniqueId(), player.getName(), matchesPlayed, matchesPlayedMonth, - sizeGames, sizeGamesMonth, - pointsAcquiredTotal, pointsAcquiredMonth)); + callback.accept(new PlayerStatisticsData(player.getUniqueId(), player.getName(), + sizeTotalGamesPlayed, + sizeTotalGamesPlayedMonth, + matchesPlayed, + matchesPlayedMonth, + sizeWonGames, + sizeWonGamesMonth, + pointsAcquiredTotal, + pointsAcquiredMonth, + sizeTimeRecord)); }); } @@ -263,7 +295,7 @@ public class MinecleanerManager { public void deleteScores(UUID playerId) { PlayerStatistics statsPlayer = plugin.getCubesideStatistics().getStatistics(playerId); - statsPlayer.deleteScore(statisticsGamesTotal); + statsPlayer.deleteScore(statisticsWonGamesTotal); statsPlayer.deleteScore(statisticsPointsAcquired); } } diff --git a/src/main/java/de/lunarakai/minecleaner/PlayerStatisticsData.java b/src/main/java/de/lunarakai/minecleaner/PlayerStatisticsData.java index 6c21b7a..a111357 100644 --- a/src/main/java/de/lunarakai/minecleaner/PlayerStatisticsData.java +++ b/src/main/java/de/lunarakai/minecleaner/PlayerStatisticsData.java @@ -6,19 +6,32 @@ import java.util.UUID; public class PlayerStatisticsData { private UUID playerUUID; private String playerName; + private HashMap totalGamesPlayedSize; + private HashMap totalGamesPlayedSizeThisMonth; private int gamesPlayed; private int gamesPlayedThisMonth; private HashMap gamesPlayedSize; private HashMap gamesPlayedSizeThisMonth; private int pointsAcquiredTotal; private int pointsAcquiredMonth; + private HashMap bestTime; - public PlayerStatisticsData(UUID playerUUID, String playerName, int gamesPlayed, int gamesPlayedThisMonth, - HashMap gamesPlayedSize, HashMap gamesPlayedSizeThisMonth, - int pointsAcquiredTotal, int pointsAcquiredMonth) { + public PlayerStatisticsData(UUID playerUUID, String playerName, + HashMap totalGamesPlayedSize, + HashMap totalGamesPlayedSizeThisMonth, + int gamesPlayed, + int gamesPlayedThisMonth, + HashMap gamesPlayedSize, + HashMap gamesPlayedSizeThisMonth, + int pointsAcquiredTotal, + int pointsAcquiredMonth, + HashMap bestTime) { this.playerUUID = playerUUID; this.playerName = playerName; + this.totalGamesPlayedSize = totalGamesPlayedSize; + this.totalGamesPlayedSizeThisMonth = totalGamesPlayedSizeThisMonth; + this.gamesPlayed = gamesPlayed; this.gamesPlayedThisMonth = gamesPlayedThisMonth; @@ -27,6 +40,8 @@ public class PlayerStatisticsData { this.pointsAcquiredTotal = pointsAcquiredTotal; this.pointsAcquiredMonth = pointsAcquiredMonth; + + this.bestTime = bestTime; } public UUID getPlayerID() { @@ -37,11 +52,21 @@ public class PlayerStatisticsData { return playerName; } - public int getGamesPlayed() { + public int getTotalGamesPlayedSize(Integer widthIndex) { + Integer value = totalGamesPlayedSize.get(widthIndex); + return value == null ? 0 : value; + } + + public int getTotalGamesPlayedSizeThisMonth(Integer widthIndex) { + Integer value = totalGamesPlayedSizeThisMonth.get(widthIndex); + return value == null ? 0 : value; + } + + public int getWonGamesPlayed() { return gamesPlayed; } - public int getGamesPlayedThisMonth() { + public int getWonGamesPlayedThisMonth() { return gamesPlayedThisMonth; } @@ -62,5 +87,8 @@ public class PlayerStatisticsData { public int getPointsAquiredMonth() { return pointsAcquiredMonth; } - + + public Integer getBestTime(Integer widthIndex) { + return bestTime.get(widthIndex); + } } diff --git a/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java index 1f66b4e..b32b7a5 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java @@ -31,7 +31,6 @@ public class CreateCommand extends SubCommand { this.plugin = plugin; } - @Override public String getUsage() { return " [noblocks] [widthindex]"; diff --git a/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/StatsCommand.java index 355856e..e249efd 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 org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -16,6 +15,8 @@ import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException; 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; public class StatsCommand extends SubCommand { private final MinecleanerPlugin plugin; @@ -56,16 +57,22 @@ public class StatsCommand extends SubCommand { sender.sendMessage(ChatColor.GREEN + "Minecleaner-Statitik von " + data.getPlayerName() + ":"); } sender.sendMessage(ChatColor.BLUE + " Punkte erspielt: " + ChatColor.GREEN + data.getPointsAcquiredTotal() + " (Dieser Monat: " + data.getPointsAquiredMonth() + ")"); - sender.sendMessage(ChatColor.BLUE + " Runden gespielt: " + ChatColor.GREEN + data.getGamesPlayed() + " (Dieser Monat: " + data.getGamesPlayedThisMonth() + ")"); + sender.sendMessage(ChatColor.BLUE + " Runden gewonnen: " + ChatColor.GREEN + data.getWonGamesPlayed() + " (Dieser Monat: " + data.getWonGamesPlayedThisMonth() + ")"); for(Entry e : plugin.getManager().getSizes().entrySet()) { - int totalSize = data.getGamesPlayedSize(e.getKey()); + int totalWonSize = data.getGamesPlayedSize(e.getKey()); + int totalWonMonth = data.getGamesPlayedSizeThisMonth(e.getKey()); + int totalSize = data.getTotalGamesPlayedSize(e.getKey()); + int totalSizeMonth = data.getTotalGamesPlayedSizeThisMonth(e.getKey()); + if(totalSize > 0) { String sizeName = StringUtil.capitalizeFirstLetter(e.getValue(), false); sender.sendMessage(ChatColor.GREEN + " " + sizeName + ":"); - sender.sendMessage(ChatColor.BLUE + " Runden gespielt: " + ChatColor.GREEN + totalSize + " (Dieser Monat: " + data.getGamesPlayedSizeThisMonth(e.getKey()) + ")"); + sender.sendMessage(ChatColor.BLUE + " Runden gewonnen: " + ChatColor.GREEN + totalWonSize + " von " + totalSize + " (Dieser Monat: " + totalWonMonth + " von " + totalSizeMonth + ")"); + Integer time = data.getBestTime(e.getKey()); + sender.sendMessage(ChatColor.BLUE + " Bestzeit: " + ChatColor.GREEN + (time == null ? "-": MinecleanerStringUtil.timeToString(time))); } - } + } } }; if(playerName == null) { diff --git a/src/main/java/de/lunarakai/minecleaner/game/BoardSize.java b/src/main/java/de/lunarakai/minecleaner/game/BoardSize.java index 5c95d11..d148622 100644 --- a/src/main/java/de/lunarakai/minecleaner/game/BoardSize.java +++ b/src/main/java/de/lunarakai/minecleaner/game/BoardSize.java @@ -4,7 +4,7 @@ public class BoardSize { public static int[] boardSizes = { 9, 12, - 15, // nicht größer als 24 + 15, }; public static int[] mineCounter = { diff --git a/src/main/java/de/lunarakai/minecleaner/game/Cell.java b/src/main/java/de/lunarakai/minecleaner/game/Cell.java index bf7de12..1c48c67 100644 --- a/src/main/java/de/lunarakai/minecleaner/game/Cell.java +++ b/src/main/java/de/lunarakai/minecleaner/game/Cell.java @@ -10,7 +10,6 @@ public class Cell { Number, } - public Vector2i position; public CellType type; public int number; @@ -47,6 +46,4 @@ public class Cell { public boolean isExploded() { return exploded; } - - } diff --git a/src/main/java/de/lunarakai/minecleaner/game/Game.java b/src/main/java/de/lunarakai/minecleaner/game/Game.java index 588b1c6..de598d5 100644 --- a/src/main/java/de/lunarakai/minecleaner/game/Game.java +++ b/src/main/java/de/lunarakai/minecleaner/game/Game.java @@ -7,7 +7,6 @@ import de.lunarakai.minecleaner.MinecleanerPlugin; public class Game { public boolean gameover; - @SuppressWarnings("unused") private MinecleanerPlugin plugin; private int width; private int height; diff --git a/src/main/java/de/lunarakai/minecleaner/game/Tilemap.java b/src/main/java/de/lunarakai/minecleaner/game/Tilemap.java index cf4f79e..42b4bde 100644 --- a/src/main/java/de/lunarakai/minecleaner/game/Tilemap.java +++ b/src/main/java/de/lunarakai/minecleaner/game/Tilemap.java @@ -25,7 +25,7 @@ public class Tilemap { throw new IllegalArgumentException("Invalid coordinates"); } } - // Set method + public void setTile(Vector2i pos, Tile.TileType tileType) { int x = pos.x(); int y = pos.y(); diff --git a/src/main/java/de/lunarakai/minecleaner/utils/BoardUtils.java b/src/main/java/de/lunarakai/minecleaner/utils/BoardUtils.java deleted file mode 100644 index a7bc4d2..0000000 --- a/src/main/java/de/lunarakai/minecleaner/utils/BoardUtils.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.lunarakai.minecleaner.utils; - -import org.bukkit.entity.Display; -import de.lunarakai.minecleaner.game.Tile; - -public class BoardUtils { - public static Display matchTileToBlockDisplay(Tile tile) { - - switch (tile.getTileType()) { - case TileEmpty: - } - return null; - } -} diff --git a/src/main/java/de/lunarakai/minecleaner/utils/MathUtils.java b/src/main/java/de/lunarakai/minecleaner/utils/MathUtils.java deleted file mode 100644 index 69ccdcf..0000000 --- a/src/main/java/de/lunarakai/minecleaner/utils/MathUtils.java +++ /dev/null @@ -1,7 +0,0 @@ -package de.lunarakai.minecleaner.utils; - -public class MathUtils { - public static int clamp(int value, int min, int max) { - return Math.max(min, Math.min(max, value)); - } -} diff --git a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java new file mode 100644 index 0000000..42c4cd9 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerStringUtil.java @@ -0,0 +1,32 @@ +package de.lunarakai.minecleaner.utils; + +public class MinecleanerStringUtil { + private MinecleanerStringUtil() { + } + + public static String timeToString(long millis) { + int sec = (int) (millis / 1000); + int min = sec / 60; + int hours = min / 60; + sec = sec % 60; + min = min % 60; + StringBuilder timeString = new StringBuilder(); + if (hours > 0) { + timeString.append(hours).append(" Stunden"); + } + if (min > 0 || !timeString.isEmpty()) { + if (!timeString.isEmpty()) { + timeString.append(", "); + } + timeString.append(min).append(" Minuten"); + } + if (sec > 0 || !timeString.isEmpty()) { + if (!timeString.isEmpty()) { + timeString.append(" und "); + } + timeString.append(sec).append(" Sekunden"); + } + return timeString.toString(); + } + +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 0a4a2f8..62ca736 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -5,7 +5,7 @@ api-version: '1.20' commands: minecleaner: description: main command - aliases: "mcl" + aliases: ["mcl", "minesweeper"] permissions: