From 005332b48a132b2810bda472e5c7a97ce7b5cd47 Mon Sep 17 00:00:00 2001 From: Matheus Date: Thu, 13 Jun 2024 21:24:06 -0400 Subject: [PATCH] upload v3 --- lib/Scandium.jar | Bin 1277416 -> 1279125 bytes .../java/land/battle/practice/Practice.java | 78 +-- .../battle/practice/board/BoardAdapter.java | 4 +- .../{commands => }/comphenix/EntityHider.java | 5 +- .../practice/config/PracticeConfig.java | 2 +- .../practice/listeners/MatchListener.java | 1 - .../practice/listeners/PlayerListener.java | 570 ++++++++++++------ .../battle/practice/managers/ItemManager.java | 24 +- .../practice/managers/MongoManager.java | 2 +- .../practice/managers/PlayerManager.java | 2 +- .../battle/practice/menu/JoinQueueMenu.java | 57 +- .../practice/runnable/cache/StatusCache.java | 2 + .../settings/PracticeSettingsImpl.java | 18 + .../settings/PracticeSettingsMenu.java | 46 ++ .../state/impl/MatchBoardAdapter.java | 4 - .../state/impl/QueueBoardAdapter.java | 49 +- .../state/impl/SpawnBoardAdapter.java | 14 +- .../land/battle/practice/util/TimeUtil.java | 19 + .../battle/practice/vote/VoteManager.java | 1 - .../practice/vote/commands/RateCommand.java | 23 +- 20 files changed, 631 insertions(+), 290 deletions(-) rename src/main/java/land/battle/practice/{commands => }/comphenix/EntityHider.java (98%) rename src/main/java/{com/solexgames => land/battle}/practice/config/PracticeConfig.java (83%) create mode 100644 src/main/java/land/battle/practice/settings/PracticeSettingsMenu.java diff --git a/lib/Scandium.jar b/lib/Scandium.jar index a1f159caf5823755613dd3dcf727ffc9c70bc5ce..a78f4e495c4240e95eec25ced364ec6aa0bf75ef 100644 GIT binary patch delta 56130 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 F`ai>Og=GK$ delta 54648 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 diff --git a/src/main/java/land/battle/practice/Practice.java b/src/main/java/land/battle/practice/Practice.java index 0856ad0..b956d36 100644 --- a/src/main/java/land/battle/practice/Practice.java +++ b/src/main/java/land/battle/practice/Practice.java @@ -1,46 +1,47 @@ -package com.solexgames.practice; +package land.battle.practice; import com.solexgames.core.CorePlugin; import com.solexgames.lib.acf.ConditionFailedException; import com.solexgames.lib.acf.PaperCommandManager; import com.solexgames.lib.commons.command.context.CommonsPlayer; import com.solexgames.lib.processor.config.ConfigFactory; -import com.solexgames.practice.arena.Arena; -import com.solexgames.practice.board.BoardAdapter; -import com.solexgames.practice.commands.*; -import com.solexgames.practice.commands.administration.*; -import com.solexgames.practice.commands.duel.AcceptCommand; -import com.solexgames.practice.commands.duel.DuelCommand; -import com.solexgames.practice.commands.duel.SpectateCommand; -import com.solexgames.practice.commands.spawn.SpawnCommand; -import com.solexgames.practice.commands.time.TimeCommand; -import com.solexgames.practice.comphenix.EntityHider; -import com.solexgames.practice.config.PracticeConfig; -import com.solexgames.practice.ffa.FFAManager; -import com.solexgames.practice.kit.Kit; -import com.solexgames.practice.listeners.*; -import com.solexgames.practice.managers.*; -import com.solexgames.practice.runnable.ExpBarRunnable; -import com.solexgames.practice.runnable.LeaderboardUpdateRunnable; -import com.solexgames.practice.runnable.SaveDataRunnable; -import com.solexgames.practice.runnable.cache.StatusCache; -import com.solexgames.practice.settings.PracticeSettingsImpl; -import com.solexgames.practice.shop.category.KillMessageShopCategory; -import com.solexgames.practice.shop.category.MiscellaneousShopCategory; -import com.solexgames.practice.shop.data.KillMessageDataType; -import com.solexgames.practice.shop.data.NameColorDataType; -import com.solexgames.practice.shop.data.StatsResetDataType; -import com.solexgames.practice.shop.item.EffectShopItem; -import com.solexgames.practice.shop.data.EffectDataType; -import com.solexgames.practice.shop.item.message.KillMessageItem; -import com.solexgames.practice.shop.item.statreset.NameColorItem; -import com.solexgames.practice.shop.item.statreset.StatisticResetItem; -import com.solexgames.practice.util.CC; -import com.solexgames.practice.util.timer.TimerManager; -import com.solexgames.practice.util.timer.impl.EnderpearlTimer; import com.solexgames.shop.Shop; import com.solexgames.shop.category.impl.configurable.KillEffectShopCategory; import io.github.nosequel.scoreboard.ScoreboardHandler; +import land.battle.practice.arena.Arena; +import land.battle.practice.board.BoardAdapter; +import land.battle.practice.commands.*; +import land.battle.practice.commands.administration.*; +import land.battle.practice.commands.duel.AcceptCommand; +import land.battle.practice.commands.duel.DuelCommand; +import land.battle.practice.commands.duel.SpectateCommand; +import land.battle.practice.commands.spawn.SpawnCommand; +import land.battle.practice.commands.time.TimeCommand; +import land.battle.practice.comphenix.EntityHider; +import land.battle.practice.config.PracticeConfig; +import land.battle.practice.ffa.FFAManager; +import land.battle.practice.kit.Kit; +import land.battle.practice.listeners.*; +import land.battle.practice.managers.*; +import land.battle.practice.runnable.ExpBarRunnable; +import land.battle.practice.runnable.LeaderboardUpdateRunnable; +import land.battle.practice.runnable.SaveDataRunnable; +import land.battle.practice.runnable.cache.StatusCache; +import land.battle.practice.settings.PracticeSettingsImpl; +import land.battle.practice.shop.category.KillMessageShopCategory; +import land.battle.practice.shop.category.MiscellaneousShopCategory; +import land.battle.practice.shop.data.EffectDataType; +import land.battle.practice.shop.data.KillMessageDataType; +import land.battle.practice.shop.data.NameColorDataType; +import land.battle.practice.shop.data.StatsResetDataType; +import land.battle.practice.shop.item.EffectShopItem; +import land.battle.practice.shop.item.message.KillMessageItem; +import land.battle.practice.shop.item.statreset.NameColorItem; +import land.battle.practice.shop.item.statreset.StatisticResetItem; +import land.battle.practice.util.CC; +import land.battle.practice.util.timer.TimerManager; +import land.battle.practice.util.timer.impl.EnderpearlTimer; +import land.battle.practice.vote.VoteManager; import lombok.Getter; import lombok.Setter; import me.lucko.helper.Commands; @@ -75,14 +76,14 @@ public class Practice extends ExtendedJavaPlugin { private PartyManager partyManager; private QueueManager queueManager; private FunManager effectManager; - private ItemManager itemManager; + private land.battle.practice.managers.ItemManager itemManager; private KitManager kitManager; private SpawnManager spawnManager; private TournamentManager tournamentManager; private ChunkManager chunkManager; private TimerManager timerManager; private FFAManager ffaManager; - + private VoteManager voteManager; private EntityHider entityHider; private boolean rankedEnabled = true; @@ -112,7 +113,7 @@ public class Practice extends ExtendedJavaPlugin { this.loadingString.equals(".") ? ".." : this.loadingString.equals("..") ? "..." : ".", 10L, 10L); - new ScoreboardHandler(this, new BoardAdapter(), 10L); + new ScoreboardHandler(this, new BoardAdapter(), 2L); CorePlugin.getInstance().addNewSettingHandler(new PracticeSettingsImpl()); @@ -305,7 +306,8 @@ public class Practice extends ExtendedJavaPlugin { this.followManager = new FollowManager(); this.chunkManager = new ChunkManager(); this.editorManager = new EditorManager(); - this.itemManager = new ItemManager(); + this.itemManager = new land.battle.practice.managers.ItemManager(); + this.voteManager = new VoteManager(this); this.kitManager = new KitManager(); this.matchManager = new MatchManager(); diff --git a/src/main/java/land/battle/practice/board/BoardAdapter.java b/src/main/java/land/battle/practice/board/BoardAdapter.java index 41b2f78..1281d15 100644 --- a/src/main/java/land/battle/practice/board/BoardAdapter.java +++ b/src/main/java/land/battle/practice/board/BoardAdapter.java @@ -27,7 +27,7 @@ public class BoardAdapter implements ScoreboardElementHandler { final PlayerData playerData = Practice.getInstance().getPlayerManager() .getPlayerData(player.getUniqueId()); - element.setTitle(CC.GOLD + CC.BOLD + "Battle " + CC.GRAY + "⏐" + CC.WHITE + " Practice"); + element.setTitle(CC.GOLD + CC.BOLD + (!Practice.getInstance().isHolanda() ? "Battle " + CC.GRAY + "⏐" + CC.WHITE + " Practice" : "Practice")); if (playerData == null || !playerData.getOptions().isScoreboardEnabled()) { return element; @@ -58,7 +58,7 @@ public class BoardAdapter implements ScoreboardElementHandler { } element.add(" "); - element.add(CC.GOLD + (Practice.getInstance().isHolanda() ? "www.wtap.gg" : "battle.land")); + element.add(CC.GOLD + (Practice.getInstance().isHolanda() ? "wtap.gg" : "battle.land")); element.add(CC.SB_LINE); return element; diff --git a/src/main/java/land/battle/practice/commands/comphenix/EntityHider.java b/src/main/java/land/battle/practice/comphenix/EntityHider.java similarity index 98% rename from src/main/java/land/battle/practice/commands/comphenix/EntityHider.java rename to src/main/java/land/battle/practice/comphenix/EntityHider.java index 3058aca..6670428 100644 --- a/src/main/java/land/battle/practice/commands/comphenix/EntityHider.java +++ b/src/main/java/land/battle/practice/comphenix/EntityHider.java @@ -2,8 +2,6 @@ package land.battle.practice.comphenix; import static com.comphenix.protocol.PacketType.Play.Server.*; -import java.lang.reflect.InvocationTargetException; -import java.util.Arrays; import java.util.Map; import org.bukkit.entity.Entity; @@ -20,7 +18,6 @@ import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolManager; import com.comphenix.protocol.events.PacketAdapter; -import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketEvent; import com.google.common.base.Preconditions; import com.google.common.collect.HashBasedTable; @@ -92,7 +89,7 @@ public class EntityHider implements Listener { /** * Set the visibility status of a given entity for a particular observer. * @param observer - the observer player. - * @param entity - ID of the entity that will be hidden or made visible. + * @param entityID - ID of the entity that will be hidden or made visible. * @param visible - TRUE if the entity should be made visible, FALSE if not. * @return TRUE if the entity was visible before this method call, FALSE otherwise. */ diff --git a/src/main/java/com/solexgames/practice/config/PracticeConfig.java b/src/main/java/land/battle/practice/config/PracticeConfig.java similarity index 83% rename from src/main/java/com/solexgames/practice/config/PracticeConfig.java rename to src/main/java/land/battle/practice/config/PracticeConfig.java index f1044f5..4f39fa6 100644 --- a/src/main/java/com/solexgames/practice/config/PracticeConfig.java +++ b/src/main/java/land/battle/practice/config/PracticeConfig.java @@ -1,4 +1,4 @@ -package com.solexgames.practice.config; +package land.battle.practice.config; import com.solexgames.lib.processor.config.comment.Comment; import lombok.Data; diff --git a/src/main/java/land/battle/practice/listeners/MatchListener.java b/src/main/java/land/battle/practice/listeners/MatchListener.java index 606e5ac..3c342bc 100644 --- a/src/main/java/land/battle/practice/listeners/MatchListener.java +++ b/src/main/java/land/battle/practice/listeners/MatchListener.java @@ -418,7 +418,6 @@ public class MatchListener implements Listener { TaskUtil.runAsync(() -> this.plugin.getVoteManager().sendVoteMessage(player, match.getArena())); - if (!playerData.canPlayRanked() && !player.hasPermission("practice.ranked.bypass")) { player.sendMessage(Color.SECONDARY_COLOR + "You need to win " + Color.MAIN_COLOR + playerData.winsUntilRankedUnlocked() + Color.SECONDARY_COLOR + " more matches to play ranked."); } diff --git a/src/main/java/land/battle/practice/listeners/PlayerListener.java b/src/main/java/land/battle/practice/listeners/PlayerListener.java index 17b30ad..94f9c30 100644 --- a/src/main/java/land/battle/practice/listeners/PlayerListener.java +++ b/src/main/java/land/battle/practice/listeners/PlayerListener.java @@ -1,4 +1,4 @@ -package com.solexgames.practice.listeners; +package land.battle.practice.listeners; import com.solexgames.core.CorePlugin; import com.solexgames.core.menu.impl.SettingsMenu; @@ -6,28 +6,28 @@ import com.solexgames.core.player.PotPlayer; import com.solexgames.core.player.prefixes.Prefix; import com.solexgames.core.util.Color; import com.solexgames.core.util.StringUtil; -import com.solexgames.practice.Practice; -import com.solexgames.practice.PracticeConstants; -import com.solexgames.practice.PracticeServerType; -import com.solexgames.practice.ffa.killstreak.KillStreak; -import com.solexgames.practice.flags.Flag; -import com.solexgames.practice.kit.Kit; -import com.solexgames.practice.kit.PlayerKit; -import com.solexgames.practice.match.Match; -import com.solexgames.practice.match.MatchState; -import com.solexgames.practice.menu.EventHostMenu; -import com.solexgames.practice.menu.JoinQueueMenu; -import com.solexgames.practice.menu.LeaderboardsMenu; -import com.solexgames.practice.menu.SpectateMenu; -import com.solexgames.practice.menu.editor.KitEditorMainMenu; -import com.solexgames.practice.menu.editor.KitEditorMenu; -import com.solexgames.practice.menu.party.PartyEventsMenu; -import com.solexgames.practice.party.Party; -import com.solexgames.practice.player.PlayerData; -import com.solexgames.practice.player.PlayerState; -import com.solexgames.practice.queue.QueueType; -import com.solexgames.practice.util.CC; -import com.solexgames.practice.util.PlayerUtil; +import land.battle.practice.Practice; +import land.battle.practice.PracticeConstants; +import land.battle.practice.PracticeServerType; +import land.battle.practice.ffa.killstreak.KillStreak; +import land.battle.practice.flags.Flag; +import land.battle.practice.kit.Kit; +import land.battle.practice.kit.PlayerKit; +import land.battle.practice.match.Match; +import land.battle.practice.match.MatchState; +import land.battle.practice.menu.EventHostMenu; +import land.battle.practice.menu.JoinQueueMenu; +import land.battle.practice.menu.LeaderboardsMenu; +import land.battle.practice.menu.SpectateMenu; +import land.battle.practice.menu.editor.KitEditorMainMenu; +import land.battle.practice.menu.editor.KitEditorMenu; +import land.battle.practice.menu.party.PartyEventsMenu; +import land.battle.practice.party.Party; +import land.battle.practice.player.PlayerData; +import land.battle.practice.player.PlayerState; +import land.battle.practice.queue.QueueType; +import land.battle.practice.util.CC; +import land.battle.practice.util.PlayerUtil; import com.solexgames.shop.menu.ShopCategoryMenu; import io.papermc.lib.PaperLib; import org.bukkit.Bukkit; @@ -306,196 +306,388 @@ public class PlayerListener implements Listener { if (event.getAction().name().startsWith("RIGHT_")) { final ItemStack item = event.getItem(); final Party party = this.plugin.getPartyManager().getParty(player.getUniqueId()); + if (Practice.getInstance().isHolanda()) { + switch (playerData.getPlayerState()) { + case LOADING: + player.sendMessage(CC.RED + "Please wait until your player data is loaded."); + break; + case FIGHTING: + if (item == null) { + return; + } + Match match = this.plugin.getMatchManager().getMatch(playerData); - switch (playerData.getPlayerState()) { - case LOADING: - player.sendMessage(CC.RED + "Please wait until your player data is loaded."); - break; - case FIGHTING: - if (item == null) { - return; - } - Match match = this.plugin.getMatchManager().getMatch(playerData); - - switch (item.getType()) { - case ENDER_PEARL: - if (match.getMatchState() == MatchState.STARTING) { - event.setCancelled(true); - player.sendMessage(CC.RED + "You cannot throw enderpearls right now."); - player.updateInventory(); - } - break; - case ENCHANTED_BOOK: - Kit kit = match.getKit(); - PlayerInventory inventory = player.getInventory(); - - int kitIndex = inventory.getHeldItemSlot(); - - if (kitIndex == 8) { - kit.applyToPlayer(player); - player.sendMessage(CC.GREEN + "You've equipped the default " + CC.YELLOW + kit.getName() + CC.GREEN + " loadout."); - } else { - Map kits = playerData.getPlayerKits(kit.getName()); - PlayerKit playerKit = kits.get(kitIndex + 1); - - if (playerKit != null) { - playerKit.applyToPlayer(player); - player.sendMessage(CC.GREEN + "You've equipped the default " + CC.YELLOW + playerKit.getDisplayName() + CC.GREEN + " loadout."); + switch (item.getType()) { + case ENDER_PEARL: + if (match.getMatchState() == MatchState.STARTING) { + event.setCancelled(true); + player.sendMessage(CC.RED + "You cannot throw enderpearls right now."); + player.updateInventory(); } - } - break; - } - break; - case SPAWN: - if (item == null) { - return; - } - - switch (item.getType()) { - case DIAMOND_SWORD: - if (!Practice.getInstance().isRankedEnabled()) { - player.sendMessage(CC.RED + "Ranked queues are currently disabled."); - return; - } - - if (!playerData.canPlayRanked() && !player.hasPermission("practice.ranked.bypass")) { - player.sendMessage(ChatColor.RED + "You need " + playerData.winsUntilRankedUnlocked() + " more wins to join ranked queues."); - return; - } - - new JoinQueueMenu(QueueType.RANKED).openMenu(player); - break; - case IRON_SWORD: - new JoinQueueMenu(QueueType.UNRANKED).openMenu(player); - break; - case BLAZE_POWDER: - final UUID rematching = this.plugin.getMatchManager().getRematcher(player.getUniqueId()); - - if (rematching == null) { - player.sendMessage(CC.RED + "The rematch request has expired."); break; - } + case ENCHANTED_BOOK: + Kit kit = match.getKit(); + PlayerInventory inventory = player.getInventory(); - final Player toRematch = this.plugin.getServer().getPlayer(rematching); + int kitIndex = inventory.getHeldItemSlot(); - if (toRematch != null) { - if (this.plugin.getMatchManager().getMatchRequest(toRematch.getUniqueId(), player.getUniqueId()) != null) { - this.plugin.getServer().dispatchCommand(player, "accept " + toRematch.getName()); + if (kitIndex == 8) { + kit.applyToPlayer(player); + player.sendMessage(CC.GREEN + "You've equipped the default " + CC.YELLOW + kit.getName() + CC.GREEN + " loadout."); } else { - this.plugin.getServer().dispatchCommand(player, "duel " + toRematch.getName()); - } - } else { - player.sendMessage(CC.RED + "That player is now offline."); - } - break; - case GOLD_INGOT: - new ShopCategoryMenu().openMenu(player); - break; - case PAINTING: - new LeaderboardsMenu().openMenu(player); - break; - case SKULL_ITEM: - player.performCommand("party info"); - break; - case BOOK: - new KitEditorMainMenu().openMenu(player); - break; - case EMERALD: - new SettingsMenu(player).openMenu(player); - break; - case GOLD_AXE: - if (party != null && !this.plugin.getPartyManager().isLeader(player.getUniqueId())) { - player.sendMessage(CC.RED + "You're not the leader of this party."); - return; - } + Map kits = playerData.getPlayerKits(kit.getName()); + PlayerKit playerKit = kits.get(kitIndex + 1); - new PartyEventsMenu().openMenu(player); - break; - case NETHER_STAR: - if (this.plugin.getPartyManager().getParty(player.getUniqueId()) == null) { - this.plugin.getPartyManager().createParty(player); + if (playerKit != null) { + playerKit.applyToPlayer(player); + player.sendMessage(CC.GREEN + "You've equipped the default " + CC.YELLOW + playerKit.getDisplayName() + CC.GREEN + " loadout."); + } + } + break; + } + break; + case SPAWN: + if (item == null) { + return; + } + + switch (item.getType()) { + case DIAMOND_SWORD: + if (!Practice.getInstance().isRankedEnabled()) { + player.sendMessage(CC.RED + "Ranked queues are currently disabled."); + return; + } + + if (!playerData.canPlayRanked() && !player.hasPermission("practice.ranked.bypass")) { + player.sendMessage(ChatColor.RED + "You need " + playerData.winsUntilRankedUnlocked() + " more wins to join ranked queues."); + return; + } + + new JoinQueueMenu(QueueType.RANKED).openMenu(player); + break; + case IRON_SWORD: + new JoinQueueMenu(QueueType.UNRANKED).openMenu(player); + break; + case BLAZE_POWDER: + final UUID rematching = this.plugin.getMatchManager().getRematcher(player.getUniqueId()); + + if (rematching == null) { + player.sendMessage(CC.RED + "The rematch request has expired."); + break; + } + + final Player toRematch = this.plugin.getServer().getPlayer(rematching); + + if (toRematch != null) { + if (this.plugin.getMatchManager().getMatchRequest(toRematch.getUniqueId(), player.getUniqueId()) != null) { + this.plugin.getServer().dispatchCommand(player, "accept " + toRematch.getName()); + } else { + this.plugin.getServer().dispatchCommand(player, "duel " + toRematch.getName()); + } + } else { + player.sendMessage(CC.RED + "That player is now offline."); + } + break; + case GOLD_INGOT: + new ShopCategoryMenu().openMenu(player); + break; + case PAINTING: + new LeaderboardsMenu().openMenu(player); + break; + case SKULL_ITEM: + player.performCommand("party info"); + break; + case BOOK: + new KitEditorMainMenu().openMenu(player); + break; + case EMERALD: + new SettingsMenu(player).openMenu(player); + break; + case GOLD_AXE: + if (party != null && !this.plugin.getPartyManager().isLeader(player.getUniqueId())) { + player.sendMessage(CC.RED + "You're not the leader of this party."); + return; + } + + new PartyEventsMenu().openMenu(player); + break; + case NETHER_STAR: + if (this.plugin.getPartyManager().getParty(player.getUniqueId()) == null) { + this.plugin.getPartyManager().createParty(player); + } else { + this.plugin.getPartyManager().leaveParty(player); + } + + this.plugin.getFollowManager().stopFollowing(player); + this.plugin.getTournamentManager().leaveTournament(player); + break; + } + break; + case QUEUE: + if (item == null) { + return; + } + + if (item.getType() == Material.INK_SACK) { + if (party == null) { + this.plugin.getQueueManager().removePlayerFromQueue(player); + } else { + this.plugin.getQueueManager().removePartyFromQueue(party); + } + } + break; + case SPECTATING: + if (item == null) { + return; + } + + if (item.getType() == Material.NETHER_STAR) { + if (party == null) { + this.plugin.getMatchManager().removeSpectator(player, false); } else { this.plugin.getPartyManager().leaveParty(player); } - - this.plugin.getFollowManager().stopFollowing(player); - this.plugin.getTournamentManager().leaveTournament(player); - break; - } - break; - case QUEUE: - if (item == null) { - return; - } - - if (item.getType() == Material.INK_SACK) { - if (party == null) { - this.plugin.getQueueManager().removePlayerFromQueue(player); - } else { - this.plugin.getQueueManager().removePartyFromQueue(party); } - } - break; - case SPECTATING: - if (item == null) { - return; - } - if (item.getType() == Material.NETHER_STAR) { - if (party == null) { - this.plugin.getMatchManager().removeSpectator(player, false); - } else { - this.plugin.getPartyManager().leaveParty(player); + if (item.getType() == Material.COMPASS) { + new SpectateMenu().openMenu(player); } - } - if (item.getType() == Material.COMPASS) { - new SpectateMenu().openMenu(player); - } + if (item.getType() == Material.EMERALD) { + final Match spectating = this.plugin.getMatchManager() + .getSpectatingMatch(player.getUniqueId()); - if (item.getType() == Material.EMERALD) { - final Match spectating = this.plugin.getMatchManager() - .getSpectatingMatch(player.getUniqueId()); + if (spectating != null) { + final Player pvp = Bukkit.getPlayer(spectating.getTeams().get(0).getLeader()); - if (spectating != null) { - final Player pvp = Bukkit.getPlayer(spectating.getTeams().get(0).getLeader()); - - if (pvp != null) { - PaperLib.teleportAsync(player, pvp.getLocation()); + if (pvp != null) { + PaperLib.teleportAsync(player, pvp.getLocation()); + } } } - } - case EDITING: - if (event.getClickedBlock() == null) { - return; - } + case EDITING: + if (event.getClickedBlock() == null) { + return; + } - switch (event.getClickedBlock().getType()) { - case WALL_SIGN: - case SIGN: - case SIGN_POST: - this.plugin.getEditorManager().removeEditor(player.getUniqueId()); - this.plugin.getPlayerManager().sendToSpawnAndReset(player); - break; - case CHEST: - final Kit kit = this.plugin.getEditorManager().getEditingKit(player.getUniqueId()); + switch (event.getClickedBlock().getType()) { + case WALL_SIGN: + case SIGN: + case SIGN_POST: + this.plugin.getEditorManager().removeEditor(player.getUniqueId()); + this.plugin.getPlayerManager().sendToSpawnAndReset(player); + break; + case CHEST: + final Kit kit = this.plugin.getEditorManager().getEditingKit(player.getUniqueId()); - if (kit.getKitEditContents()[0] != null) { - final Inventory editorInventory = this.plugin.getServer().createInventory(null, 36); + if (kit.getKitEditContents()[0] != null) { + final Inventory editorInventory = this.plugin.getServer().createInventory(null, 36); - editorInventory.setContents(kit.getContents()); - player.openInventory(editorInventory); + editorInventory.setContents(kit.getContents()); + player.openInventory(editorInventory); + event.setCancelled(true); + } + break; + case ANVIL: + new KitEditorMenu(Practice.getInstance().getEditorManager().getEditingKit(player.getUniqueId())).openMenu(player); event.setCancelled(true); - } - break; - case ANVIL: - new KitEditorMenu(Practice.getInstance().getEditorManager().getEditingKit(player.getUniqueId())).openMenu(player); - event.setCancelled(true); - break; - } + break; + } - break; + break; + } + } else { + switch (playerData.getPlayerState()) { + case LOADING: + player.sendMessage(CC.RED + "Please wait until your player data is loaded."); + break; + case FIGHTING: + if (item == null) { + return; + } + Match match = this.plugin.getMatchManager().getMatch(playerData); + + switch (item.getType()) { + case ENDER_PEARL: + if (match.getMatchState() == MatchState.STARTING) { + event.setCancelled(true); + player.sendMessage(CC.RED + "You cannot throw enderpearls right now."); + player.updateInventory(); + } + break; + case ENCHANTED_BOOK: + Kit kit = match.getKit(); + PlayerInventory inventory = player.getInventory(); + + int kitIndex = inventory.getHeldItemSlot(); + + if (kitIndex == 8) { + kit.applyToPlayer(player); + player.sendMessage(CC.GREEN + "You've equipped the default " + CC.YELLOW + kit.getName() + CC.GREEN + " loadout."); + } else { + Map kits = playerData.getPlayerKits(kit.getName()); + PlayerKit playerKit = kits.get(kitIndex + 1); + + if (playerKit != null) { + playerKit.applyToPlayer(player); + player.sendMessage(CC.GREEN + "You've equipped the default " + CC.YELLOW + playerKit.getDisplayName() + CC.GREEN + " loadout."); + } + } + break; + } + break; + case SPAWN: + if (item == null) { + return; + } + + switch (item.getType()) { + case DIAMOND_SWORD: + if (!Practice.getInstance().isRankedEnabled()) { + player.sendMessage(CC.RED + "Ranked queues are currently disabled."); + return; + } + + if (!playerData.canPlayRanked() && !player.hasPermission("practice.ranked.bypass")) { + player.sendMessage(ChatColor.RED + "You need " + playerData.winsUntilRankedUnlocked() + " more wins to join ranked queues."); + return; + } + + new JoinQueueMenu(QueueType.RANKED).openMenu(player); + break; + case IRON_SWORD: + new JoinQueueMenu(QueueType.UNRANKED).openMenu(player); + break; + case BLAZE_POWDER: + final UUID rematching = this.plugin.getMatchManager().getRematcher(player.getUniqueId()); + + if (rematching == null) { + player.sendMessage(CC.RED + "The rematch request has expired."); + break; + } + + final Player toRematch = this.plugin.getServer().getPlayer(rematching); + + if (toRematch != null) { + if (this.plugin.getMatchManager().getMatchRequest(toRematch.getUniqueId(), player.getUniqueId()) != null) { + this.plugin.getServer().dispatchCommand(player, "accept " + toRematch.getName()); + } else { + this.plugin.getServer().dispatchCommand(player, "duel " + toRematch.getName()); + } + } else { + player.sendMessage(CC.RED + "That player is now offline."); + } + break; + case GOLD_INGOT: + new ShopCategoryMenu().openMenu(player); + break; + case EMERALD: + new LeaderboardsMenu().openMenu(player); + break; + case SKULL_ITEM: + player.performCommand("party info"); + break; + case BOOK: + new KitEditorMainMenu().openMenu(player); + break; + case REDSTONE_COMPARATOR: + new SettingsMenu(player).openMenu(player); + break; + case GOLD_AXE: + if (party != null && !this.plugin.getPartyManager().isLeader(player.getUniqueId())) { + player.sendMessage(CC.RED + "You're not the leader of this party."); + return; + } + + new PartyEventsMenu().openMenu(player); + break; + case NETHER_STAR: + if (this.plugin.getPartyManager().getParty(player.getUniqueId()) == null) { + this.plugin.getPartyManager().createParty(player); + } else { + this.plugin.getPartyManager().leaveParty(player); + } + + this.plugin.getFollowManager().stopFollowing(player); + this.plugin.getTournamentManager().leaveTournament(player); + break; + } + break; + case QUEUE: + if (item == null) { + return; + } + + if (item.getType() == Material.INK_SACK) { + if (party == null) { + this.plugin.getQueueManager().removePlayerFromQueue(player); + } else { + this.plugin.getQueueManager().removePartyFromQueue(party); + } + } + break; + case SPECTATING: + if (item == null) { + return; + } + + if (item.getType() == Material.NETHER_STAR) { + if (party == null) { + this.plugin.getMatchManager().removeSpectator(player, false); + } else { + this.plugin.getPartyManager().leaveParty(player); + } + } + + if (item.getType() == Material.COMPASS) { + new SpectateMenu().openMenu(player); + } + + if (item.getType() == Material.EMERALD) { + final Match spectating = this.plugin.getMatchManager() + .getSpectatingMatch(player.getUniqueId()); + + if (spectating != null) { + final Player pvp = Bukkit.getPlayer(spectating.getTeams().get(0).getLeader()); + + if (pvp != null) { + PaperLib.teleportAsync(player, pvp.getLocation()); + } + } + } + case EDITING: + if (event.getClickedBlock() == null) { + return; + } + + switch (event.getClickedBlock().getType()) { + case WALL_SIGN: + case SIGN: + case SIGN_POST: + this.plugin.getEditorManager().removeEditor(player.getUniqueId()); + this.plugin.getPlayerManager().sendToSpawnAndReset(player); + break; + case CHEST: + final Kit kit = this.plugin.getEditorManager().getEditingKit(player.getUniqueId()); + + if (kit.getKitEditContents()[0] != null) { + final Inventory editorInventory = this.plugin.getServer().createInventory(null, 36); + + editorInventory.setContents(kit.getContents()); + player.openInventory(editorInventory); + + event.setCancelled(true); + } + break; + case ANVIL: + new KitEditorMenu(Practice.getInstance().getEditorManager().getEditingKit(player.getUniqueId())).openMenu(player); + event.setCancelled(true); + break; + } + + break; + } } } } diff --git a/src/main/java/land/battle/practice/managers/ItemManager.java b/src/main/java/land/battle/practice/managers/ItemManager.java index c189239..158bc17 100644 --- a/src/main/java/land/battle/practice/managers/ItemManager.java +++ b/src/main/java/land/battle/practice/managers/ItemManager.java @@ -1,9 +1,10 @@ -package com.solexgames.practice.managers; +package land.battle.practice.managers; import com.solexgames.core.util.Color; import com.solexgames.core.util.builder.ItemBuilder; -import com.solexgames.practice.util.CC; -import com.solexgames.practice.util.ItemUtil; +import land.battle.practice.Practice; +import land.battle.practice.util.CC; +import land.battle.practice.util.ItemUtil; import lombok.Getter; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; @@ -17,6 +18,7 @@ public class ItemManager { public static final ItemStack SHOP_ITEM = ItemUtil.createItem(Material.GOLD_INGOT, CC.GOLD + "Shop" + CC.GRAY + " (Right Click)"); private final ItemStack[] spawnItems; + private final ItemStack[] holandaItems; private final ItemStack[] queueItems; private final ItemStack[] partyItems; private final ItemStack[] partyNonLeaderItems; @@ -30,7 +32,19 @@ public class ItemManager { private final ItemStack defaultBook; public ItemManager() { - this.spawnItems = new ItemStack[]{ + this.spawnItems = + new ItemStack[] { + ItemUtil.createItem(Material.IRON_SWORD, CC.GOLD + "Join Unranked Matchmaking" + CC.GRAY + " (Right Click)"), + ItemUtil.createItem(Material.DIAMOND_SWORD, CC.GOLD + "Join Ranked Matchmaking" + CC.GRAY + " (Right Click)"), + ItemUtil.createItem(Material.NETHER_STAR, CC.GOLD + "Create a Party" + CC.GRAY + " (Right Click)"), + null, + ItemUtil.createItem(Material.GOLD_INGOT, CC.GOLD + "Shop" + CC.GRAY + " (Right Click)"), + null, + ItemUtil.createItem(Material.EMERALD, CC.GOLD + "Open Leaderboards" + CC.GRAY + " (Right Click)"), + ItemUtil.createItem(Material.BOOK, CC.GOLD + "Kit Editor" + CC.GRAY + " (Right Click)"), + ItemUtil.createItem(Material.REDSTONE_COMPARATOR, CC.GOLD + "Settings" + CC.GRAY + " (Right Click)") + }; + this.holandaItems = new ItemStack[] { ItemUtil.createItem(Material.IRON_SWORD, CC.GOLD + "Join Unranked Matchmaking" + CC.GRAY + " (Right Click)"), ItemUtil.createItem(Material.DIAMOND_SWORD, CC.GOLD + "Join Ranked Matchmaking" + CC.GRAY + " (Right Click)"), null, @@ -137,7 +151,7 @@ public class ItemManager { null, }; this.stickFightItems = new ItemStack[]{ - new com.solexgames.practice.util.ItemBuilder(Material.STICK) + new land.battle.practice.util.ItemBuilder(Material.STICK) .enchantment(Enchantment.KNOCKBACK, 1) .unbreakable() .build(), diff --git a/src/main/java/land/battle/practice/managers/MongoManager.java b/src/main/java/land/battle/practice/managers/MongoManager.java index a38fffc..afa2b20 100644 --- a/src/main/java/land/battle/practice/managers/MongoManager.java +++ b/src/main/java/land/battle/practice/managers/MongoManager.java @@ -28,7 +28,7 @@ public class MongoManager { instance = this; this.client = CorePlugin.getInstance().getCoreDatabase().getClient(); - this.database = this.client.getDatabase("Practice"); + this.database = this.client.getDatabase("SGSoftware"); this.players = this.database.getCollection("practice_profiles"); this.matchOverviews = this.database.getCollection("practice_matches"); diff --git a/src/main/java/land/battle/practice/managers/PlayerManager.java b/src/main/java/land/battle/practice/managers/PlayerManager.java index 7739e2f..f6eed95 100644 --- a/src/main/java/land/battle/practice/managers/PlayerManager.java +++ b/src/main/java/land/battle/practice/managers/PlayerManager.java @@ -225,7 +225,7 @@ public class PlayerManager { final PotPlayer potPlayer = CorePlugin.getInstance().getPlayerManager().getPlayer(player); final boolean isModMode = potPlayer != null && potPlayer.isStaffMode(); - ItemStack[] items = this.plugin.getItemManager().getSpawnItems(); + ItemStack[] items = !Practice.getInstance().isHolanda() ? this.plugin.getItemManager().getSpawnItems() : plugin.getItemManager().getHolandaItems(); if (inTournament) { items = this.plugin.getItemManager().getTournamentItems(); diff --git a/src/main/java/land/battle/practice/menu/JoinQueueMenu.java b/src/main/java/land/battle/practice/menu/JoinQueueMenu.java index e4247a3..6722c45 100644 --- a/src/main/java/land/battle/practice/menu/JoinQueueMenu.java +++ b/src/main/java/land/battle/practice/menu/JoinQueueMenu.java @@ -1,5 +1,6 @@ package land.battle.practice.menu; +import com.cryptomorin.xseries.XMaterial; import com.solexgames.core.util.Color; import com.solexgames.core.util.builder.ItemBuilder; import com.solexgames.core.util.external.Button; @@ -15,6 +16,7 @@ import land.battle.practice.runnable.cache.StatusCache; import land.battle.practice.util.CC; import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -45,17 +47,30 @@ public class JoinQueueMenu extends Menu { final Map buttonMap = new HashMap<>(); final PlayerData data = Practice.getInstance().getPlayerManager().getPlayerData(player.getUniqueId()); + for (int i = 9; i < 18; i++) { + buttonMap.put(i, new ItemBuilder(XMaterial.GRAY_STAINED_GLASS_PANE.parseMaterial()).setDurability(15).setDisplayName(" ").toButton()); + } + + buttonMap.put(2, new Button() { + @Override + public ItemStack getButtonItem(Player player) { + return new ItemBuilder(XMaterial.EMERALD.parseMaterial()).setDisplayName("&eAll Kits").addLore(Arrays.asList("&7View all of our kits!", "", "&aClick to view!")).create(); + } + }); + buttonMap.put(11, new ItemBuilder(XMaterial.GREEN_STAINED_GLASS_PANE.parseMaterial()).setDurability(5).setDisplayName(" ").toButton()); + + if (this.queueType.isRanked()) { Practice.getInstance().getKitManager().getKits().stream() .filter(Objects::nonNull) .filter(Kit::isRanked) .filter(Kit::isEnabled) - .forEachOrdered(kit -> buttonMap.put(kit.getQueueMenu() + 10, new KitButton(kit, data))); + .forEachOrdered(kit -> buttonMap.put(kit.getQueueMenu() + 19, new KitButton(kit, data))); } else { Practice.getInstance().getKitManager().getKits().stream() .filter(Objects::nonNull) .filter(Kit::isEnabled) - .forEachOrdered(kit -> buttonMap.put(kit.getQueueMenu() + 10, new KitButton(kit, data))); + .forEachOrdered(kit -> buttonMap.put(kit.getQueueMenu() + 19, new KitButton(kit, data))); } return buttonMap; @@ -72,8 +87,8 @@ public class JoinQueueMenu extends Menu { final List lore = new ArrayList<>(); final int playing = StatusCache.getInstance().getFightingKits().get(this.queue); - lore.add("&7In Queue: &f" + Practice.getInstance().getQueueManager().getQueueSize(this.queue.getName(), JoinQueueMenu.this.queueType)); - lore.add("&7In Fights: &f" + playing); + lore.add("&7In Queue: &f" + getQueued(queue)); + lore.add("&7In Fights: &f" + getFighting(queue)); lore.add(" "); lore.add("&6&lDaily Winstreaks:"); lore.addAll(LeaderboardUpdateRunnable.KIT_SPECIFIC_WIN_STREAK_LORE_SHORT.getOrDefault(this.queue, Collections.emptyList())); @@ -88,6 +103,38 @@ public class JoinQueueMenu extends Menu { .create(); } + public int getQueued(Kit kit) { + int i = 0; + for (Player player : Bukkit.getOnlinePlayers()) { + PlayerData data = Practice.getInstance().getPlayerManager().getPlayerData(player.getUniqueId()); + if (data.getPlayerState() == PlayerState.QUEUE) { + if (Objects.equals(Practice.getInstance().getQueueManager().getQueueEntry(player.getUniqueId()).getKitName(), kit.getName()) && Practice.getInstance().getQueueManager().getQueueEntry(player.getUniqueId()).getQueueType() == queueType) { + i++; + continue; + } + } else { + continue; + } + } + return i; + } + + public int getFighting(Kit kit) { + int i = 0; + for (Player player : Bukkit.getOnlinePlayers()) { + PlayerData data = Practice.getInstance().getPlayerManager().getPlayerData(player.getUniqueId()); + if (data.getPlayerState() == PlayerState.FIGHTING) { + if (Objects.equals(Practice.getInstance().getMatchManager().getMatch(data.getCurrentMatchID()).getKit().getName(), kit.getName()) && Practice.getInstance().getMatchManager().getMatch(data.getCurrentMatchID()).getType() == queueType) { + i++; + continue; + } + } else { + continue; + } + } + return i; + } + @Override public void clicked(Player player, ClickType clickType) { final Party party = Practice.getInstance().getPartyManager().getParty(player.getUniqueId()); @@ -111,7 +158,7 @@ public class JoinQueueMenu extends Menu { @Override public int getSize() { - return 36; + return 45; } @Override diff --git a/src/main/java/land/battle/practice/runnable/cache/StatusCache.java b/src/main/java/land/battle/practice/runnable/cache/StatusCache.java index 6d6508b..0bb0953 100644 --- a/src/main/java/land/battle/practice/runnable/cache/StatusCache.java +++ b/src/main/java/land/battle/practice/runnable/cache/StatusCache.java @@ -79,4 +79,6 @@ public class StatusCache extends Thread { } } } + + } diff --git a/src/main/java/land/battle/practice/settings/PracticeSettingsImpl.java b/src/main/java/land/battle/practice/settings/PracticeSettingsImpl.java index 0c4eead..d2d6395 100644 --- a/src/main/java/land/battle/practice/settings/PracticeSettingsImpl.java +++ b/src/main/java/land/battle/practice/settings/PracticeSettingsImpl.java @@ -13,8 +13,11 @@ import land.battle.practice.settings.item.ProfileOptionsItemState; import land.battle.practice.util.CC; import org.bukkit.Material; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemStack; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -173,4 +176,19 @@ public class PracticeSettingsImpl implements ISettings { return buttonList; } + + @Override + public Button getCategoryButton() { + return new Button() { + @Override + public ItemStack getButtonItem(Player player) { + return new ItemBuilder(Material.STAINED_GLASS_PANE).setDurability(1).setDisplayName("&6Practice Settings").addLore(Arrays.asList("&7The settings for the Practice.", "", "&aClick to browse!")).create(); + } + + @Override + public void clicked(Player player, int slot, ClickType clickType, int hotbarSlot) { + new PracticeSettingsMenu().openMenu(player); + } + }; + } } diff --git a/src/main/java/land/battle/practice/settings/PracticeSettingsMenu.java b/src/main/java/land/battle/practice/settings/PracticeSettingsMenu.java new file mode 100644 index 0000000..97e4142 --- /dev/null +++ b/src/main/java/land/battle/practice/settings/PracticeSettingsMenu.java @@ -0,0 +1,46 @@ +package land.battle.practice.settings; + +import com.cryptomorin.xseries.XMaterial; +import com.solexgames.core.CorePlugin; +import com.solexgames.core.player.PotPlayer; +import com.solexgames.core.util.Color; +import com.solexgames.core.util.builder.ItemBuilder; +import com.solexgames.core.util.external.Button; +import com.solexgames.core.util.external.Menu; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; + +public class PracticeSettingsMenu extends Menu { + @Override + public String getTitle(Player var1) { + return "Settings "; + } + + @Override + public Map getButtons(Player player) { + Map buttonMap = new HashMap(); + PotPlayer potPlayer = CorePlugin.getInstance().getPlayerManager().getPlayer(player); + + for(int i = 0; i < 9; ++i) { + buttonMap.put(i, (new ItemBuilder(XMaterial.GRAY_STAINED_GLASS_PANE.parseMaterial())).setDurability(15).setDisplayName(" ").toButton()); + } + + AtomicInteger integer2 = new AtomicInteger(9); + AtomicInteger integer = new AtomicInteger(0); + CorePlugin.getInstance().getSettingsList().forEach((settings -> buttonMap.put(integer.getAndIncrement(), settings.getCategoryButton()))); + for (com.solexgames.core.util.external.Button button : new PracticeSettingsImpl().getButtons(player)) buttonMap.put(integer2.getAndIncrement(), button); + + return buttonMap; + } + + +} diff --git a/src/main/java/land/battle/practice/state/impl/MatchBoardAdapter.java b/src/main/java/land/battle/practice/state/impl/MatchBoardAdapter.java index 7332521..387989a 100644 --- a/src/main/java/land/battle/practice/state/impl/MatchBoardAdapter.java +++ b/src/main/java/land/battle/practice/state/impl/MatchBoardAdapter.java @@ -29,12 +29,8 @@ public class MatchBoardAdapter implements PlayerStateAdapter { public List handleBoard(Player player, PlayerData playerData, Party party) { final List stringList = new ArrayList<>(); - - final Match match = this.plugin.getMatchManager().getMatch(player.getUniqueId()); - - if (match == null) { return stringList; } diff --git a/src/main/java/land/battle/practice/state/impl/QueueBoardAdapter.java b/src/main/java/land/battle/practice/state/impl/QueueBoardAdapter.java index 3795bed..115b8e4 100644 --- a/src/main/java/land/battle/practice/state/impl/QueueBoardAdapter.java +++ b/src/main/java/land/battle/practice/state/impl/QueueBoardAdapter.java @@ -7,6 +7,7 @@ import land.battle.practice.queue.QueueEntry; import land.battle.practice.queue.QueueType; import land.battle.practice.state.PlayerStateAdapter; import land.battle.practice.util.CC; +import land.battle.practice.util.TimeUtil; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -29,32 +30,44 @@ public class QueueBoardAdapter implements PlayerStateAdapter { this.plugin.getQueueManager().getQueueEntry(party.getLeader()); stringList.add(" "); - stringList.add(CC.GOLD + "Queued for:"); - stringList.add(" " + queueEntry.getQueueType().getName() + " " + queueEntry.getKitName()); + if (!Practice.getInstance().isHolanda()) { + stringList.add(CC.GOLD + "Queued for:"); + stringList.add(" " + queueEntry.getQueueType().getName() + " " + queueEntry.getKitName()); - if (queueEntry.getQueueType() != QueueType.UNRANKED) { - final double queueTime = System.currentTimeMillis() - - (party == null ? this.plugin.getQueueManager().getPlayerQueueTime(player - .getUniqueId()) - : this.plugin.getQueueManager().getPlayerQueueTime(party.getLeader())); + if (queueEntry.getQueueType() != QueueType.UNRANKED) { + final double queueTime = System.currentTimeMillis() - + (party == null ? this.plugin.getQueueManager().getPlayerQueueTime(player + .getUniqueId()) + : this.plugin.getQueueManager().getPlayerQueueTime(party.getLeader())); - double eloRange = playerData.getEloRange(); - double seconds = Math.round(queueTime / 1000L); + double eloRange = playerData.getEloRange(); + double seconds = Math.round(queueTime / 1000L); - if (seconds > 5) { - if (eloRange != -1) { - eloRange += seconds * 50; + if (seconds > 5) { + if (eloRange != -1) { + eloRange += seconds * 50; - if (eloRange >= 3000) { - eloRange = 3000; + if (eloRange >= 3000) { + eloRange = 3000; + } } } + + final int elo = playerData.getElo(queueEntry.getKitName()); + final String eloRangeString = "[" + Math.max(elo - eloRange / 2, 0) + " -> " + Math.max(elo + eloRange / 2, 0) + "]"; + + stringList.add(" " + eloRangeString); } + } else { + stringList.add(CC.GOLD + "Queue:"); + stringList.add(queueEntry.getQueueType().getName() + " " + queueEntry.getKitName()); + final long queueTime = System.currentTimeMillis() - + (party == null ? this.plugin.getQueueManager().getPlayerQueueTime(player + .getUniqueId()) + : this.plugin.getQueueManager().getPlayerQueueTime(party.getLeader())); - final int elo = playerData.getElo(queueEntry.getKitName()); - final String eloRangeString = "[" + Math.max(elo - eloRange / 2, 0) + " -> " + Math.max(elo + eloRange / 2, 0) + "]"; - - stringList.add(" " + eloRangeString); + int seconds = Math.round((float) queueTime / 1000L); + stringList.add("Time: " + CC.GOLD + TimeUtil.formatIntoSimpleString(seconds)); } return stringList; diff --git a/src/main/java/land/battle/practice/state/impl/SpawnBoardAdapter.java b/src/main/java/land/battle/practice/state/impl/SpawnBoardAdapter.java index 3ec5618..b0bb464 100644 --- a/src/main/java/land/battle/practice/state/impl/SpawnBoardAdapter.java +++ b/src/main/java/land/battle/practice/state/impl/SpawnBoardAdapter.java @@ -2,6 +2,7 @@ package land.battle.practice.state.impl; import com.solexgames.core.CorePlugin; import com.solexgames.core.player.PotPlayer; +import land.battle.practice.Practice; import land.battle.practice.party.Party; import land.battle.practice.player.PlayerData; import land.battle.practice.runnable.cache.StatusCache; @@ -26,11 +27,14 @@ public class SpawnBoardAdapter implements PlayerStateAdapter { final List stringList = new ArrayList<>(); final PotPlayer potPlayer = CorePlugin.getInstance().getPlayerManager().getPlayer(player); final RankedDivision rankedDivision = RankedDivision.getByGlobalElo(playerData.getGlobalElo()); - - stringList.add(CC.GRAY + "Online: " + CC.AQUA + Bukkit.getOnlinePlayers().size()); - stringList.add(CC.GRAY + "In Fights: " + CC.AQUA + StatusCache.getInstance().getFighting()); - stringList.add(CC.GRAY + "Division: " + CC.BLUE + rankedDivision.getFancyName()); - + if (!Practice.getInstance().isHolanda()) { + stringList.add(CC.GRAY + "Online: " + CC.AQUA + Bukkit.getOnlinePlayers().size()); + stringList.add(CC.GRAY + "In Fights: " + CC.AQUA + StatusCache.getInstance().getFighting()); + stringList.add(CC.GRAY + "Division: " + CC.BLUE + rankedDivision.getFancyName()); + } else { + stringList.add(CC.WHITE + "Online: " + CC.GOLD + Bukkit.getOnlinePlayers().size()); + stringList.add(CC.WHITE + "In Fights: " + CC.GOLD + StatusCache.getInstance().getFighting()); + } return stringList; } diff --git a/src/main/java/land/battle/practice/util/TimeUtil.java b/src/main/java/land/battle/practice/util/TimeUtil.java index 766f6df..7a0c3ea 100644 --- a/src/main/java/land/battle/practice/util/TimeUtil.java +++ b/src/main/java/land/battle/practice/util/TimeUtil.java @@ -21,4 +21,23 @@ public class TimeUtil { return ((hr > 0) ? String.format("%02d:", hr) : "") + String.format("%02d:%02d", min, sec); } + + public static String formatIntoSimpleString(int secs) { + if (secs == 0) { + return "0s"; + } + int remainder = secs % 86400; + + int days = secs / 86400; + int hours = remainder / 3600; + int minutes = (remainder / 60) - (hours * 60); + int seconds = (remainder % 3600) - (minutes * 60); + + String fDays = (days > 0 ? " " + days + "d" : ""); + String fHours = (hours > 0 ? " " + hours + "h" : ""); + String fMinutes = (minutes > 0 ? " " + minutes + "m" : ""); + String fSeconds = (seconds > 0 ? " " + seconds + "s" : ""); + + return ((fDays + fHours + fMinutes + fSeconds).trim()); + } } diff --git a/src/main/java/land/battle/practice/vote/VoteManager.java b/src/main/java/land/battle/practice/vote/VoteManager.java index 04b9b18..0966f62 100644 --- a/src/main/java/land/battle/practice/vote/VoteManager.java +++ b/src/main/java/land/battle/practice/vote/VoteManager.java @@ -28,7 +28,6 @@ public class VoteManager { private final Practice plugin; private final List pendingVotes = new ArrayList<>(); - public void sendVoteMessage(Player player, Arena arena) { ChatComponentBuilder builder = new ChatComponentBuilder(""); diff --git a/src/main/java/land/battle/practice/vote/commands/RateCommand.java b/src/main/java/land/battle/practice/vote/commands/RateCommand.java index 50e2f10..3e3c5e2 100644 --- a/src/main/java/land/battle/practice/vote/commands/RateCommand.java +++ b/src/main/java/land/battle/practice/vote/commands/RateCommand.java @@ -1,10 +1,10 @@ package land.battle.practice.vote.commands; import com.solexgames.lib.acf.BaseCommand; -import com.solexgames.lib.acf.annotation.CommandAlias; -import com.solexgames.lib.acf.annotation.CommandPermission; -import com.solexgames.lib.acf.annotation.Default; +import com.solexgames.lib.acf.annotation.*; +import com.solexgames.lib.commons.command.context.CommonsPlayer; import land.battle.practice.Practice; +import land.battle.practice.arena.Arena; import land.battle.practice.player.PlayerData; import land.battle.practice.player.PlayerState; import land.battle.practice.util.CC; @@ -13,33 +13,26 @@ import land.battle.practice.util.TaskUtil; import land.battle.practice.vote.Vote; import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; /** * @author BattleLand Team * @since 5/17/2021 */ - @CommandAlias("rate") public class RateCommand extends BaseCommand { @Default - public void onDefault(CommandArgs command) { - - Player player = command.getPlayer(); - String[] args = command.getArgs(); - - if (args.length != 1) { - return; - } - + @Syntax("") + @CommandCompletion("@unvanished") + public void onDefault(Player player, String v) { final PlayerData playerData = Practice.getInstance().getPlayerManager() .getPlayerData(player.getUniqueId()); - Vote vote; try { - vote = Vote.valueOf(args[0]); + vote = Vote.valueOf(v); } catch (Exception unused) { return;