diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java index edb6d1f3d..707d0f8c3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java @@ -1468,7 +1468,7 @@ public enum Achievement CAKE_WARS_FLOOR_IS_LAVA("The Floor Is Lava", 15000, new String[]{"Cake Wars Rumble.FloorIsLava", "Cake Wars Duos.FloorIsLava"}, - new String[]{"After the first 30 seconds of the game", "Only stand on player placed blocks", "", "Includes Deploy Platforms and", "near Shops"}, + new String[]{"Win a game of Cake Wars while", "after the first 30 seconds of the game,", "only stand on player placed blocks", "", "Includes Deploy Platforms and", "near Shops"}, new int[]{1}, AchievementCategory.CAKE_WARS), diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java index ca71474d3..e12f59fc1 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java @@ -247,17 +247,19 @@ public enum AchievementCategory CAKE_WARS("Cake Wars", null, new StatDisplay[] { - new StatDisplay("Rumble", true), + new StatDisplay(C.Bold + "Rumble", true), StatDisplay.fromGame("Wins", GameDisplay.CakeWars4, "Wins"), StatDisplay.fromGame("Games Play", GameDisplay.CakeWars4, "Wins", "Losses"), + StatDisplay.fromGame("Best Win Streak", GameDisplay.CakeWars4, "BestWinStreak"), StatDisplay.fromGame("Kills", GameDisplay.CakeWars4, "Kills"), StatDisplay.fromGame("Deaths", GameDisplay.CakeWars4, "Deaths"), StatDisplay.fromGame("Cake Bites", GameDisplay.CakeWars4, "Bites"), StatDisplay.fromGame("Whole Cakes", GameDisplay.CakeWars4, "EatWholeCake"), null, - new StatDisplay("Duos", true), + new StatDisplay(C.Bold + "Duos", true), StatDisplay.fromGame("Wins", GameDisplay.CakeWarsDuos, "Wins"), StatDisplay.fromGame("Games Play", GameDisplay.CakeWarsDuos, "Wins", "Losses"), + StatDisplay.fromGame("Best Win Streak", GameDisplay.CakeWarsDuos, "BestWinStreak"), StatDisplay.fromGame("Kills", GameDisplay.CakeWarsDuos, "Kills"), StatDisplay.fromGame("Deaths", GameDisplay.CakeWarsDuos, "Deaths"), StatDisplay.fromGame("Cake Bites", GameDisplay.CakeWarsDuos, "Bites"), diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemPaintballGun.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemPaintballGun.java index fc22d8c89..a524910f9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemPaintballGun.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemPaintballGun.java @@ -91,7 +91,7 @@ public class ItemPaintballGun extends ItemGadget @EventHandler public void enderPearlTeleport(PlayerTeleportEvent event) { - if (event.getCause() != TeleportCause.ENDER_PEARL) + if (event.getCause() != TeleportCause.ENDER_PEARL && !isActive(event.getPlayer())) { return; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/Leaderboard.java b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/Leaderboard.java index ace9de0a7..201d8790b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/Leaderboard.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/Leaderboard.java @@ -1,9 +1,9 @@ package mineplex.core.leaderboard; -import java.util.LinkedHashMap; +import java.util.Collections; import java.util.LinkedList; import java.util.Map; -import java.util.Map.Entry; +import java.util.concurrent.atomic.AtomicInteger; import org.bukkit.Location; @@ -11,10 +11,13 @@ import mineplex.core.Managers; import mineplex.core.common.Pair; import mineplex.core.common.util.C; import mineplex.core.hologram.Hologram; +import mineplex.core.hologram.HologramManager; import mineplex.core.leaderboard.LeaderboardRepository.LeaderboardSQLType; public class Leaderboard { + private static final HologramManager HOLOGRAM_MANAGER = Managers.get(HologramManager.class); + private final String _display; private final Pair _statDisplay; private final String[] _statNames; @@ -28,7 +31,8 @@ public class Leaderboard { this(display, statDisplayNames, statNames, type, displayLoc, size, 0); } - + + @SuppressWarnings("unchecked") public Leaderboard(String display, Pair statDisplayNames, String[] statNames, LeaderboardSQLType type, Location displayLoc, int size, int start) { _display = display; @@ -39,8 +43,8 @@ public class Leaderboard _size = size; _start = start; _loc = displayLoc; - - update(new LinkedHashMap<>()); + + update(Collections.EMPTY_MAP); } public int getSize() @@ -76,29 +80,17 @@ public class Leaderboard deconstruct(); LinkedList display = new LinkedList<>(); display.add(C.cAqua + _display); - display.add(C.cRed + " "); - int place = _start + 1; - for (Entry entry : names.entrySet()) + display.add(C.blankLine); + AtomicInteger place = new AtomicInteger(_start + 1); + + names.forEach((name, value) -> { - if (entry.getValue() == 1) - { - display.add(C.cGreen + "#" + place + " " + entry.getKey() + C.cRed + " " + entry.getValue() + " " + _statDisplay.getLeft()); - } - else - { - display.add(C.cGreen + "#" + place + " " + entry.getKey() + C.cRed + " " + entry.getValue() + " " + _statDisplay.getRight()); - } - place++; - } - - //TEMP FOR CONVERSION - display.clear(); - display.add(C.cAqua + _display); - display.add(C.cRed + " "); - display.add(C.cRed + "Disabled for stat conversion"); - //TEMP FOR CONVERSION - - _holo = new Hologram(Managers.get(LeaderboardManager.class).getHologramManager(), _loc, display.toArray(new String[display.size()])).start(); + display.add(C.cGreen + "#" + place + " " + name + C.cRed + " " + value + " " + (value == 1 ? _statDisplay.getLeft() : _statDisplay.getRight())); + place.getAndIncrement(); + }); + + _holo = new Hologram(HOLOGRAM_MANAGER, _loc, display.toArray(new String[0])) + .start(); } public synchronized void setStatId(int index, int id) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardManager.java b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardManager.java index 08094511b..e7d274a1b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardManager.java @@ -28,7 +28,6 @@ public class LeaderboardManager extends MiniPlugin } private final Map _leaderboards = new HashMap<>(); - private final long REFRESH_RATE; private final LeaderboardRepository _repo; private final Map _loading = new HashMap<>(); @@ -47,10 +46,10 @@ public class LeaderboardManager extends MiniPlugin refreshBoards(); } }); + + long refreshRate = 5 * 60 * 20 + ((UtilMath.r(5) + 1) * 60 * 20); - REFRESH_RATE = 5 * 60 * 20 + ((UtilMath.r(5) + 1) * 60 * 20); - - runSyncTimer(() -> refreshBoards(), 0, REFRESH_RATE); + runSyncTimer(this::refreshBoards, 0, refreshRate); runSyncTimer(() -> { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/cakewars/CakeWars.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/cakewars/CakeWars.java index 1facb47b5..e7104e1fa 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/cakewars/CakeWars.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/cakewars/CakeWars.java @@ -51,6 +51,7 @@ import nautilus.game.arcade.game.modules.capturepoint.CapturePointModule; import nautilus.game.arcade.game.modules.chest.ChestLootModule; import nautilus.game.arcade.game.modules.chest.ChestLootPool; import nautilus.game.arcade.game.modules.compass.CompassModule; +import nautilus.game.arcade.game.modules.winstreak.WinStreakModule; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.managers.lobby.GameLobbyConfig; import nautilus.game.arcade.managers.lobby.current.NewGameLobbyManager; @@ -141,6 +142,9 @@ public class CakeWars extends TeamGame new CompassModule() .register(this); + new WinStreakModule() + .register(this); + _cakeTeamModule = new CakeTeamModule(this); _cakeTeamModule.register(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/cakewars/trackers/FloorIsLavaTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/cakewars/trackers/FloorIsLavaTracker.java index 2e949fa00..ed2f8ee7d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/cakewars/trackers/FloorIsLavaTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/cakewars/trackers/FloorIsLavaTracker.java @@ -1,6 +1,7 @@ package nautilus.game.arcade.game.games.cakewars.trackers; import java.util.HashSet; +import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -42,6 +43,9 @@ public class FloorIsLavaTracker extends StatTracker } else if (event.GetState() == GameState.End) { + List winners = getGame().getWinners(); + + _successful.removeIf(player -> !winners.contains(player)); _successful.forEach(player -> addStat(player, "FloorIsLava", 1, true, false)); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/EnderPearlModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/EnderPearlModule.java index c157210fb..edd3fc6b5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/EnderPearlModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/EnderPearlModule.java @@ -47,7 +47,7 @@ public class EnderPearlModule extends Module @EventHandler public void interactEnderPearl(PlayerInteractEvent event) { - if (!UtilEvent.isAction(event, ActionType.R)) + if (!UtilEvent.isAction(event, ActionType.R) || !getGame().IsLive()) { return; } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/capturepoint/CapturePoint.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/capturepoint/CapturePoint.java index baaf0fd01..164a34ccc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/capturepoint/CapturePoint.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/capturepoint/CapturePoint.java @@ -8,7 +8,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.TimeUnit; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Effect; import org.bukkit.FireworkEffect.Type; @@ -150,13 +149,14 @@ public class CapturePoint { _lastInform = System.currentTimeMillis(); - for (Player player : Bukkit.getOnlinePlayers()) - { - player.playSound(player.getLocation(), Sound.GHAST_SCREAM2, 1, 1.0F); - } + String message = F.main("Game", "Team " + highest.GetFormattedName() + C.mBody + " is capturing the " + _colour + _name + C.mBody + " Beacon!"); - _host.Announce(F.main("Game", "Team " + highest.GetFormattedName() + C.mBody + " is capturing the " + _colour + _name + C.mBody + " Beacon!"), false); - //UtilTextMiddle.display("", "Team " + highest.GetFormattedName() + C.cWhite + " is capturing beacon " + _colour + _name, 0, 30, 10); + sendMessage(highest, message); + + if (_owner != null) + { + sendMessage(_owner, message); + } } // If it has just reached the maximum progress, set the owner. @@ -168,6 +168,15 @@ public class CapturePoint capture(highest); } + private void sendMessage(GameTeam team, String message) + { + team.GetPlayers(true).forEach(player -> + { + player.playSound(player.getLocation(), Sound.GHAST_SCREAM2, 1, 1); + player.sendMessage(message); + }); + } + private void capture(GameTeam team) { // No player has ever stood on the point @@ -211,13 +220,10 @@ public class CapturePoint { setBeaconColour(team); - if (_owner != null) + // Same team no need to inform + if (_owner != null && _owner.equals(team)) { - // Same team no need to inform - if (_owner.equals(team)) - { - return; - } + return; } else { @@ -227,10 +233,15 @@ public class CapturePoint _progress = MAX_PROGRESS; } - _owner = team; + String message = F.main("Game", "Team " + team.GetFormattedName() + C.mBody + " captured the " + _colour + _name + C.mBody + " Beacon!"); - _host.Announce(F.main("Game", "Team " + team.GetFormattedName() + C.mBody + " captured the " + _colour + _name + C.mBody + " Beacon!")); - //UtilTextMiddle.display("", "Team " + team.GetFormattedName() + C.cWhite + " captured beacon " + _colour + _name, 0, 30, 10); + if (_owner != null) + { + sendMessage(_owner, message); + } + sendMessage(team, message); + + _owner = team; UtilFirework.playFirework(_center, Type.BURST, team.GetColorBase(), false, false); UtilServer.CallEvent(new CapturePointCaptureEvent(this)); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/winstreak/WinStreakSummaryComponent.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/winstreak/WinStreakSummaryComponent.java index b5fa0556a..9052c62f5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/winstreak/WinStreakSummaryComponent.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/winstreak/WinStreakSummaryComponent.java @@ -59,7 +59,7 @@ public class WinStreakSummaryComponent extends GameSummaryComponent