From fc29b27808262d012d8bfc002e1c13be1fab62c1 Mon Sep 17 00:00:00 2001 From: jayoevans Date: Wed, 30 Oct 2019 21:14:53 +1000 Subject: [PATCH] Updated stats, toggle, and who commands --- .../projectkorra/command/StatsCommand.java | 49 +-- .../projectkorra/command/ToggleCommand.java | 78 ++-- .../projectkorra/command/WhoCommand.java | 381 +++++++++--------- .../projectkorra/player/BendingPlayer.java | 4 + .../player/BendingPlayerManager.java | 22 +- .../player/BendingPlayerRepository.java | 14 +- 6 files changed, 284 insertions(+), 264 deletions(-) diff --git a/src/com/projectkorra/projectkorra/command/StatsCommand.java b/src/com/projectkorra/projectkorra/command/StatsCommand.java index 62e59d38..9b7c636e 100644 --- a/src/com/projectkorra/projectkorra/command/StatsCommand.java +++ b/src/com/projectkorra/projectkorra/command/StatsCommand.java @@ -1,29 +1,22 @@ package com.projectkorra.projectkorra.command; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.UUID; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ProjectKorra; +import com.projectkorra.projectkorra.ability.info.AbilityInfo; +import com.projectkorra.projectkorra.configuration.configs.commands.StatsCommandConfig; +import com.projectkorra.projectkorra.element.Element; +import com.projectkorra.projectkorra.storage.DBConnection; +import com.projectkorra.projectkorra.util.Statistic; +import com.projectkorra.projectkorra.util.StatisticsMethods; import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import com.projectkorra.projectkorra.Element; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ProjectKorra; -import com.projectkorra.projectkorra.ability.CoreAbility; -import com.projectkorra.projectkorra.configuration.configs.commands.StatsCommandConfig; -import com.projectkorra.projectkorra.storage.DBConnection; -import com.projectkorra.projectkorra.util.Statistic; -import com.projectkorra.projectkorra.util.StatisticsMethods; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; @SuppressWarnings("rawtypes") public class StatsCommand extends PKCommand { @@ -50,11 +43,11 @@ public class StatsCommand extends PKCommand { if (!this.correctLength(sender, args.size(), 3, 4)) { return; } - final CoreAbility ability = CoreAbility.getAbility(args.get(1)); - final Element element = Element.getElement(args.get(1)); + final AbilityInfo abilityInfo = this.abilityManager.getAbilityInfo(args.get(1)); + final Element element = this.elementManager.getElement(args.get(1)); Object object = null; - if (ability != null) { - object = ability; + if (abilityInfo != null) { + object = abilityInfo; } else if (element != null) { object = element; } @@ -125,9 +118,9 @@ public class StatsCommand extends PKCommand { } else { value = StatisticsMethods.getStatistic(target.getUniqueId(), object, statistic); } - if (object instanceof CoreAbility) { - final CoreAbility ability = (CoreAbility) object; - message = message.replace("%object%", ability.getName()).replace("%player%", target.getName()).replace("%value%", String.valueOf(value)); + if (object instanceof AbilityInfo) { + final AbilityInfo abilityInfo = (AbilityInfo) object; + message = message.replace("%object%", abilityInfo.getName()).replace("%player%", target.getName()).replace("%value%", String.valueOf(value)); } else if (object instanceof Element) { final Element element = (Element) object; message = message.replace("%object%", element.getName()).replace("%player%", target.getName()).replace("%value%", String.valueOf(value)); @@ -144,9 +137,9 @@ public class StatsCommand extends PKCommand { int p = page > maxPage ? maxPage : page; p = p < 1 ? 1 : p; String title = "%object% " + statistic.getDisplayName() + " Leaderboard"; - if (object instanceof CoreAbility) { - final CoreAbility ability = (CoreAbility) object; - title = title.replace("%object%", ability.getName()); + if (object instanceof AbilityInfo) { + final AbilityInfo abilityInfo = (AbilityInfo) object; + title = title.replace("%object%", abilityInfo.getName()); } else if (object instanceof Element) { final Element element = (Element) object; title = title.replace("%object%", element.getName()); diff --git a/src/com/projectkorra/projectkorra/command/ToggleCommand.java b/src/com/projectkorra/projectkorra/command/ToggleCommand.java index 14de9b74..eecea766 100644 --- a/src/com/projectkorra/projectkorra/command/ToggleCommand.java +++ b/src/com/projectkorra/projectkorra/command/ToggleCommand.java @@ -1,19 +1,18 @@ package com.projectkorra.projectkorra.command; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.configuration.configs.commands.ToggleCommandConfig; +import com.projectkorra.projectkorra.element.Element; +import com.projectkorra.projectkorra.element.SubElement; +import com.projectkorra.projectkorra.player.BendingPlayer; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.projectkorra.projectkorra.BendingPlayer; -import com.projectkorra.projectkorra.Element; -import com.projectkorra.projectkorra.Element.SubElement; -import com.projectkorra.projectkorra.configuration.configs.commands.ToggleCommandConfig; -import com.projectkorra.projectkorra.GeneralMethods; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; /** * Executor for /bending toggle. Extends {@link PKCommand}. @@ -53,19 +52,20 @@ public class ToggleCommand extends PKCommand { GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.toggledOffForAll); return; } - BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(sender.getName()); - if (bPlayer == null) { - GeneralMethods.createBendingPlayer(((Player) sender).getUniqueId(), sender.getName()); - bPlayer = BendingPlayer.getBendingPlayer(sender.getName()); - } - if (bPlayer.isToggled()) { + + Player player = (Player) sender; + BendingPlayer bendingPlayer = this.bendingPlayerManager.getBendingPlayer(player); + + if (bendingPlayer.isToggled()) { GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.toggleOffSelf); - bPlayer.toggleBending(); + bendingPlayer.toggleBending(); } else { GeneralMethods.sendBrandingMessage(sender, ChatColor.GREEN + this.toggleOnSelf); - bPlayer.toggleBending(); + bendingPlayer.toggleBending(); } } else if (args.size() == 1) { + Element element = this.elementManager.getElement(args.get(0)); + if (args.size() == 1 && args.get(0).equalsIgnoreCase("all") && this.hasPermission(sender, "all")) { // bending toggle all. if (Commands.isToggledForAll) { // Bending is toggled off for all players. Commands.isToggledForAll = false; @@ -85,26 +85,27 @@ public class ToggleCommand extends PKCommand { GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.toggleOffAll); } } - } else if (sender instanceof Player && args.size() == 1 && Element.fromString(args.get(0)) != null && !(Element.fromString(args.get(0)) instanceof SubElement)) { - if (!BendingPlayer.getBendingPlayer(sender.getName()).hasElement(Element.fromString(args.get(0)))) { + } else if (sender instanceof Player && args.size() == 1 && element != null && !(element instanceof SubElement)) { + Player player = (Player) sender; + BendingPlayer bendingPlayer = this.bendingPlayerManager.getBendingPlayer(player); + + if (!bendingPlayer.hasElement(element)) { GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.wrongElement); return; } - final Element e = Element.fromString(args.get(0)); - final ChatColor color = e != null ? e.getColor() : null; - final BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(sender.getName()); - bPlayer.toggleElement(e); - if (bPlayer.isElementToggled(e)) { - GeneralMethods.sendBrandingMessage(sender, color + this.toggledOnSingleElement.replace("{element}", e.getName() + (e.getType() != null ? e.getType().getBending() : ""))); + bendingPlayer.toggleElement(element); + + if (bendingPlayer.isElementToggled(element)) { + GeneralMethods.sendBrandingMessage(sender, element.getColor() + this.toggledOnSingleElement.replace("{element}", element.getName() + (element.getType() != null ? element.getType().getBending() : ""))); } else { - GeneralMethods.sendBrandingMessage(sender, color + this.toggledOffSingleElement.replace("{element}", e.getName() + (e.getType() != null ? e.getType().getBending() : ""))); + GeneralMethods.sendBrandingMessage(sender, element.getColor() + this.toggledOffSingleElement.replace("{element}", element.getName() + (element.getType() != null ? element.getType().getBending() : ""))); } } else { this.help(sender, false); } - } else if (sender instanceof Player && args.size() == 2 && Element.fromString(args.get(0)) != null && !(Element.fromString(args.get(0)) instanceof SubElement)) { + } else if (sender instanceof Player && args.size() == 2 && this.elementManager.getElement(args.get(0)) != null && !(this.elementManager.getElement(args.get(0)) instanceof SubElement)) { final Player target = Bukkit.getPlayer(args.get(1)); if (!this.hasAdminPermission(sender)) { return; @@ -113,22 +114,23 @@ public class ToggleCommand extends PKCommand { GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.notFound); return; } - if (!BendingPlayer.getBendingPlayer(target.getName()).hasElement(Element.fromString(args.get(0)))) { + Element element = this.elementManager.getElement(args.get(0)); + BendingPlayer bendingPlayer = this.bendingPlayerManager.getBendingPlayer(target); + + if (!bendingPlayer.hasElement(element)) { GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.wrongElementOther.replace("{target}", ChatColor.DARK_AQUA + target.getName() + ChatColor.RED)); return; } - final Element e = Element.fromString(args.get(0)); - final BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(target.getName()); - final ChatColor color = e != null ? e.getColor() : null; - if (bPlayer.isElementToggled(e)) { - GeneralMethods.sendBrandingMessage(sender, color + this.toggledOffOtherElementConfirm.replace("{target}", target.getName()).replace("{element}", e.getName() + (e.getType() != null ? e.getType().getBending() : ""))); - GeneralMethods.sendBrandingMessage(target, color + this.toggledOffOtherElement.replace("{element}", e.getName() + (e.getType() != null ? e.getType().getBending() : "")).replace("{sender}", ChatColor.DARK_AQUA + sender.getName())); + if (bendingPlayer.isElementToggled(element)) { + GeneralMethods.sendBrandingMessage(sender, element.getColor() + this.toggledOffOtherElementConfirm.replace("{target}", target.getName()).replace("{element}", element.getName() + (element.getType() != null ? element.getType().getBending() : ""))); + GeneralMethods.sendBrandingMessage(target, element.getColor() + this.toggledOffOtherElement.replace("{element}", element.getName() + (element.getType() != null ? element.getType().getBending() : "")).replace("{sender}", ChatColor.DARK_AQUA + sender.getName())); } else { - GeneralMethods.sendBrandingMessage(sender, color + this.toggledOnOtherElementConfirm.replace("{target}", target.getName()).replace("{element}", e.getName() + (e.getType() != null ? e.getType().getBending() : ""))); - GeneralMethods.sendBrandingMessage(target, color + this.toggledOnOtherElement.replace("{element}", e.getName() + (e.getType() != null ? e.getType().getBending() : "")).replace("{sender}", ChatColor.DARK_AQUA + sender.getName())); + GeneralMethods.sendBrandingMessage(sender, element.getColor() + this.toggledOnOtherElementConfirm.replace("{target}", target.getName()).replace("{element}", element.getName() + (element.getType() != null ? element.getType().getBending() : ""))); + GeneralMethods.sendBrandingMessage(target, element.getColor() + this.toggledOnOtherElement.replace("{element}", element.getName() + (element.getType() != null ? element.getType().getBending() : "")).replace("{sender}", ChatColor.DARK_AQUA + sender.getName())); } - bPlayer.toggleElement(e); + + bendingPlayer.toggleElement(element); } else { this.help(sender, false); } @@ -150,7 +152,7 @@ public class ToggleCommand extends PKCommand { final List l = new ArrayList(); if (args.size() == 0) { final List elements = new ArrayList(); - for (final Element e : Element.getAllElements()) { + for (Element e : this.elementManager.getElements()) { elements.add(e.getName()); } Collections.sort(elements); diff --git a/src/com/projectkorra/projectkorra/command/WhoCommand.java b/src/com/projectkorra/projectkorra/command/WhoCommand.java index 043ca3a5..58b3d4c0 100644 --- a/src/com/projectkorra/projectkorra/command/WhoCommand.java +++ b/src/com/projectkorra/projectkorra/command/WhoCommand.java @@ -1,5 +1,20 @@ package com.projectkorra.projectkorra.command; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ProjectKorra; +import com.projectkorra.projectkorra.ability.info.AbilityInfo; +import com.projectkorra.projectkorra.configuration.configs.commands.WhoCommandConfig; +import com.projectkorra.projectkorra.element.Element; +import com.projectkorra.projectkorra.element.ElementManager; +import com.projectkorra.projectkorra.element.SubElement; +import com.projectkorra.projectkorra.player.BendingPlayer; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -8,28 +23,7 @@ import java.net.SocketException; import java.net.URL; import java.net.URLConnection; import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; - -import com.projectkorra.projectkorra.BendingPlayer; -import com.projectkorra.projectkorra.Element; -import com.projectkorra.projectkorra.Element.ElementType; -import com.projectkorra.projectkorra.Element.SubElement; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ProjectKorra; -import com.projectkorra.projectkorra.ability.CoreAbility; -import com.projectkorra.projectkorra.configuration.configs.commands.WhoCommandConfig; +import java.util.*; /** * Executor for /bending who. Extends {@link PKCommand}. @@ -98,17 +92,13 @@ public class WhoCommand extends PKCommand { for (final Player player : Bukkit.getOnlinePlayers()) { final String playerName = player.getName(); String result = ""; - BendingPlayer bp = BendingPlayer.getBendingPlayer(playerName); + BendingPlayer bendingPlayer = this.bendingPlayerManager.getBendingPlayer(player); - if (bp == null) { - GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); - bp = BendingPlayer.getBendingPlayer(player.getName()); - } - for (final Element element : bp.getElements()) { + for (final Element element : bendingPlayer.getElements()) { if (result == "") { - result = ChatColor.WHITE + playerName + " - " + (((!bp.isElementToggled(element) || !bp.isToggled()) ? element.getColor() + "" + ChatColor.STRIKETHROUGH : element.getColor()) + element.getName().substring(0, 1)); + result = ChatColor.WHITE + playerName + " - " + (((!bendingPlayer.isElementToggled(element) || !bendingPlayer.isToggled()) ? element.getColor() + "" + ChatColor.STRIKETHROUGH : element.getColor()) + element.getName().substring(0, 1)); } else { - result = result + ChatColor.WHITE + " | " + (((!bp.isElementToggled(element) || !bp.isToggled()) ? element.getColor() + "" + ChatColor.STRIKETHROUGH : element.getColor()) + element.getName().substring(0, 1)); + result = result + ChatColor.WHITE + " | " + (((!bendingPlayer.isElementToggled(element) || !bendingPlayer.isToggled()) ? element.getColor() + "" + ChatColor.STRIKETHROUGH : element.getColor()) + element.getName().substring(0, 1)); } } if (this.staff.containsKey(player.getUniqueId().toString())) { @@ -147,197 +137,204 @@ public class WhoCommand extends PKCommand { * @param playerName The Player to look up */ private void whoPlayer(final CommandSender sender, final String playerName) { - final OfflinePlayer player = Bukkit.getOfflinePlayer(playerName); - if (player == null || !player.hasPlayedBefore() && !player.isOnline()) { + final OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(playerName); + + if (offlinePlayer == null || !offlinePlayer.hasPlayedBefore() && !offlinePlayer.isOnline()) { GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + "Player not found!"); return; } - if (!player.isOnline() && !BendingPlayer.getPlayers().containsKey(player.getUniqueId())) { - GeneralMethods.sendBrandingMessage(sender, ChatColor.GRAY + this.playerOffline.replace("{player}", ChatColor.WHITE + player.getName() + ChatColor.GRAY).replace("{target}", ChatColor.WHITE + player.getName() + ChatColor.GRAY)); - } - final Player player_ = (Player) (player.isOnline() ? player : null); - BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); + BendingPlayer bendingPlayer = this.bendingPlayerManager.getBendingPlayer(offlinePlayer.getUniqueId()); - if (bPlayer == null) { - GeneralMethods.createBendingPlayer(player.getUniqueId(), playerName); - new BukkitRunnable() { - @Override - public void run() { - int count = 0; - final long delay = 200L; - while (!BendingPlayer.getPlayers().containsKey(player.getUniqueId())) { - if (count > 5 * (1000 / delay)) { // After 5 seconds of waiting, tell the user the database is busy and to try again in a few seconds. - GeneralMethods.sendBrandingMessage(sender, ChatColor.DARK_RED + WhoCommand.this.databaseOverload); - break; - } - count++; - try { - Thread.sleep(delay); - } catch (final InterruptedException e) { - e.printStackTrace(); - GeneralMethods.sendBrandingMessage(sender, ChatColor.DARK_RED + WhoCommand.this.databaseOverload); - break; - } - } - WhoCommand.this.whoPlayer(sender, playerName); - } - }.runTaskAsynchronously(ProjectKorra.plugin); + if (bendingPlayer != null) { + someWhoPlayerMethod(sender, offlinePlayer, bendingPlayer); return; } - bPlayer = BendingPlayer.getBendingPlayer(player); - if (bPlayer != null) { - sender.sendMessage(player.getName() + (!player.isOnline() ? ChatColor.RESET + " (Offline)" : "")); - if (bPlayer.hasElement(Element.AIR)) { - if (bPlayer.isElementToggled(Element.AIR)) { - sender.sendMessage(Element.AIR.getColor() + "- Airbender"); - } else { - sender.sendMessage(Element.AIR.getColor() + "" + ChatColor.STRIKETHROUGH + "- Airbender"); - } + GeneralMethods.sendBrandingMessage(sender, ChatColor.GRAY + this.playerOffline.replace("{player}", ChatColor.WHITE + offlinePlayer.getName() + ChatColor.GRAY).replace("{target}", ChatColor.WHITE + offlinePlayer.getName() + ChatColor.GRAY)); - if (player_ != null) { - if (bPlayer.canUseFlight()) { - sender.sendMessage(Element.FLIGHT.getColor() + " Can Fly"); - } - if (bPlayer.canUseSpiritualProjection()) { - sender.sendMessage(Element.SPIRITUAL.getColor() + " Can use Spiritual Projection"); - } - for (final SubElement se : Element.getAddonSubElements(Element.AIR)) { - if (bPlayer.canUseSubElement(se)) { - sender.sendMessage(se.getColor() + " Can " + (!se.getType().equals(ElementType.NO_SUFFIX) ? "" : "use ") + se.getName() + se.getType().getBend()); - } - } - } + this.bendingPlayerManager.loadBendingPlayer(offlinePlayer.getUniqueId(), loadedBendingPlayer -> { + if (loadedBendingPlayer == null) { + GeneralMethods.sendBrandingMessage(sender, ChatColor.DARK_RED + WhoCommand.this.databaseOverload); + return; } - if (bPlayer.hasElement(Element.WATER)) { - if (bPlayer.isElementToggled(Element.WATER)) { - sender.sendMessage(Element.WATER.getColor() + "- Waterbender"); - } else { - sender.sendMessage(Element.WATER.getColor() + "" + ChatColor.STRIKETHROUGH + "- Waterbender"); - } + someWhoPlayerMethod(sender, offlinePlayer, loadedBendingPlayer); + }); + } - if (player_ != null) { - if (bPlayer.canPlantbend()) { - sender.sendMessage(Element.PLANT.getColor() + " Can Plantbend"); - } - if (bPlayer.canBloodbend()) { - if (bPlayer.canBloodbendAtAnytime()) { - sender.sendMessage(Element.BLOOD.getColor() + " Can Bloodbend anytime, on any day"); - } else { - sender.sendMessage(Element.BLOOD.getColor() + " Can Bloodbend"); - } - } - if (bPlayer.canIcebend()) { - sender.sendMessage(Element.ICE.getColor() + " Can Icebend"); - } - if (bPlayer.canWaterHeal()) { - sender.sendMessage(Element.HEALING.getColor() + " Can Heal"); - } - for (final SubElement se : Element.getAddonSubElements(Element.WATER)) { - if (bPlayer.canUseSubElement(se)) { - sender.sendMessage(se.getColor() + " Can " + (!se.getType().equals(ElementType.NO_SUFFIX) ? "" : "use ") + se.getName() + se.getType().getBend()); - } - } - } + private void someWhoPlayerMethod(CommandSender sender, OfflinePlayer player, BendingPlayer bendingPlayer) { + sender.sendMessage(player.getName() + (!player.isOnline() ? ChatColor.RESET + " (Offline)" : "")); + + Element element; + Set checked = new HashSet<>(); + + checked.add(element = this.elementManager.getAir()); + if (bendingPlayer.hasElement(element)) { + if (bendingPlayer.isElementToggled(element)) { + sender.sendMessage(element.getColor() + "- Airbender"); + } else { + sender.sendMessage(element.getColor() + "" + ChatColor.STRIKETHROUGH + "- Airbender"); } - if (bPlayer.hasElement(Element.EARTH)) { - if (bPlayer.isElementToggled(Element.EARTH)) { - sender.sendMessage(Element.EARTH.getColor() + "- Earthbender"); - } else { - sender.sendMessage(Element.EARTH.getColor() + "" + ChatColor.STRIKETHROUGH + "- Earthbender"); + if (player.isOnline()) { + if (bendingPlayer.canUseFlight()) { + sender.sendMessage(this.elementManager.getFlight().getColor() + " Can Fly"); } - if (player_ != null) { - if (bPlayer.canMetalbend()) { - sender.sendMessage(Element.METAL.getColor() + " Can Metalbend"); - } - if (bPlayer.canLavabend()) { - sender.sendMessage(Element.LAVA.getColor() + " Can Lavabend"); - } - if (bPlayer.canSandbend()) { - sender.sendMessage(Element.SAND.getColor() + " Can Sandbend"); - } - for (final SubElement se : Element.getAddonSubElements(Element.EARTH)) { - if (bPlayer.canUseSubElement(se)) { - sender.sendMessage(se.getColor() + " Can " + (!se.getType().equals(ElementType.NO_SUFFIX) ? "" : "use ") + se.getName() + se.getType().getBend()); - } - } - } - } - - if (bPlayer.hasElement(Element.FIRE)) { - if (bPlayer.isElementToggled(Element.FIRE)) { - sender.sendMessage(Element.FIRE.getColor() + "- Firebender"); - } else { - sender.sendMessage(Element.FIRE.getColor() + "" + ChatColor.STRIKETHROUGH + "- Firebender"); + if (bendingPlayer.canUseSpiritual()) { + sender.sendMessage(this.elementManager.getSpiritual().getColor() + " Can use Spiritual Projection"); } - if (player_ != null) { - if (bPlayer.canCombustionbend()) { - sender.sendMessage(Element.COMBUSTION.getColor() + " Can Combustionbend"); - } - if (bPlayer.canLightningbend()) { - sender.sendMessage(Element.LIGHTNING.getColor() + " Can Lightningbend"); - } - for (final SubElement se : Element.getAddonSubElements(Element.FIRE)) { - if (bPlayer.canUseSubElement(se)) { - sender.sendMessage(se.getColor() + " Can " + (!se.getType().equals(ElementType.NO_SUFFIX) ? "" : "use ") + se.getName() + se.getType().getBend()); - } + for (SubElement subElement : this.elementManager.getSubElements(element)) { + if (bendingPlayer.hasElement(subElement)) { + sender.sendMessage(subElement.getColor() + " Can " + (!subElement.getType().equals(ElementManager.ElementType.NO_SUFFIX) ? "" : "use ") + subElement.getName() + subElement.getType().getBend()); } } } - - if (bPlayer.hasElement(Element.CHI)) { - if (bPlayer.isElementToggled(Element.CHI)) { - sender.sendMessage(Element.CHI.getColor() + "- Chiblocker"); - } else { - sender.sendMessage(Element.CHI.getColor() + "" + ChatColor.STRIKETHROUGH + "- Chiblocker"); - } - } - - for (final Element element : Element.getAddonElements()) { - if (bPlayer.hasElement(element)) { - sender.sendMessage(element.getColor() + "" + (bPlayer.isElementToggled(element) ? "" : ChatColor.STRIKETHROUGH) + "- " + element.getName() + (element.getType() != null ? element.getType().getBender() : "")); - if (player_ != null) { - for (final SubElement subelement : Element.getSubElements(element)) { - if (bPlayer.canUseSubElement(subelement)) { - sender.sendMessage(subelement.getColor() + " Can " + (!subelement.getType().equals(ElementType.NO_SUFFIX) ? "" : "use ") + subelement.getName() + subelement.getType().getBend()); - } - } - } - } - } - - final UUID uuid = player.getUniqueId(); - if (bPlayer != null) { - sender.sendMessage("Abilities: "); - for (int i = 0; i < 9; i++) { - final String ability = bPlayer.getAbilities()[i]; - final CoreAbility coreAbil = CoreAbility.getAbility(ability); - if (coreAbil == null) { - continue; - } else { - sender.sendMessage((i + 1) + " - " + coreAbil.getElement().getColor() + ability); - } - } - } - - if (this.staff.containsKey(uuid.toString())) { - sender.sendMessage(this.staff.get(uuid.toString())); - } } + checked.add(element = this.elementManager.getWater()); + if (bendingPlayer.hasElement(element)) { + if (bendingPlayer.isElementToggled(element)) { + sender.sendMessage(element.getColor() + "- Waterbender"); + } else { + sender.sendMessage(element.getColor() + "" + ChatColor.STRIKETHROUGH + "- Waterbender"); + } + + if (player.isOnline()) { + if (bendingPlayer.canPlantbend()) { + sender.sendMessage(this.elementManager.getPlant().getColor() + " Can Plantbend"); + } + + if (bendingPlayer.canBloodbend()) { + if (bendingPlayer.canBloodbendAtAnytime()) { + sender.sendMessage(this.elementManager.getBlood().getColor() + " Can Bloodbend anytime, on any day"); + } else { + sender.sendMessage(this.elementManager.getBlood().getColor() + " Can Bloodbend"); + } + } + + if (bendingPlayer.canIcebend()) { + sender.sendMessage(this.elementManager.getIce().getColor() + " Can Icebend"); + } + + if (bendingPlayer.canUseHealing()) { + sender.sendMessage(this.elementManager.getHealing().getColor() + " Can Heal"); + } + + for (SubElement subElement : this.elementManager.getSubElements(element)) { + if (bendingPlayer.hasElement(subElement)) { + sender.sendMessage(subElement.getColor() + " Can " + (!subElement.getType().equals(ElementManager.ElementType.NO_SUFFIX) ? "" : "use ") + subElement.getName() + subElement.getType().getBend()); + } + } + } + } + + checked.add(element = this.elementManager.getEarth()); + if (bendingPlayer.hasElement(element)) { + if (bendingPlayer.isElementToggled(element)) { + sender.sendMessage(element.getColor() + "- Earthbender"); + } else { + sender.sendMessage(element.getColor() + "" + ChatColor.STRIKETHROUGH + "- Earthbender"); + } + + if (player.isOnline()) { + if (bendingPlayer.canMetalbend()) { + sender.sendMessage(this.elementManager.getMetal().getColor() + " Can Metalbend"); + } + + if (bendingPlayer.canLavabend()) { + sender.sendMessage(this.elementManager.getLava().getColor() + " Can Lavabend"); + } + + if (bendingPlayer.canSandbend()) { + sender.sendMessage(this.elementManager.getSand().getColor() + " Can Sandbend"); + } + + for (SubElement subElement : this.elementManager.getSubElements(element)) { + if (bendingPlayer.hasElement(subElement)) { + sender.sendMessage(subElement.getColor() + " Can " + (!subElement.getType().equals(ElementManager.ElementType.NO_SUFFIX) ? "" : "use ") + subElement.getName() + subElement.getType().getBend()); + } + } + } + } + + checked.add(element = this.elementManager.getFire()); + if (bendingPlayer.hasElement(element)) { + if (bendingPlayer.isElementToggled(element)) { + sender.sendMessage(element.getColor() + "- Firebender"); + } else { + sender.sendMessage(element.getColor() + "" + ChatColor.STRIKETHROUGH + "- Firebender"); + } + + if (player.isOnline()) { + if (bendingPlayer.canCombustionbend()) { + sender.sendMessage(this.elementManager.getCombustion().getColor() + " Can Combustionbend"); + } + + if (bendingPlayer.canUseLightning()) { + sender.sendMessage(this.elementManager.getLightning().getColor() + " Can Lightningbend"); + } + + for (SubElement subElement : this.elementManager.getSubElements(element)) { + if (bendingPlayer.hasElement(subElement)) { + sender.sendMessage(subElement.getColor() + " Can " + (!subElement.getType().equals(ElementManager.ElementType.NO_SUFFIX) ? "" : "use ") + subElement.getName() + subElement.getType().getBend()); + } + } + } + } + + checked.add(element = this.elementManager.getChi()); + if (bendingPlayer.hasElement(element)) { + if (bendingPlayer.isElementToggled(element)) { + sender.sendMessage(element.getColor() + "- Chiblocker"); + } else { + sender.sendMessage(element.getColor() + "" + ChatColor.STRIKETHROUGH + "- Chiblocker"); + } + } + + for (Element e : this.elementManager.getElements()) { + if (checked.contains(e)) { + continue; + } + + if (bendingPlayer.hasElement(e)) { + sender.sendMessage(e.getColor() + "" + (bendingPlayer.isElementToggled(e) ? "" : ChatColor.STRIKETHROUGH) + "- " + e.getName() + (e.getType() != null ? e.getType().getBender() : "")); + if (player.isOnline()) { + for (SubElement subElement : this.elementManager.getSubElements(e)) { + if (bendingPlayer.hasElement(subElement)) { + sender.sendMessage(subElement.getColor() + " Can " + (!subElement.getType().equals(ElementManager.ElementType.NO_SUFFIX) ? "" : "use ") + subElement.getName() + subElement.getType().getBend()); + } + } + } + } + } + + final UUID uuid = player.getUniqueId(); + sender.sendMessage("Abilities: "); + for (int i = 0; i < 9; i++) { + String abilityName = bendingPlayer.getAbility(i); + AbilityInfo abilityInfo = this.abilityManager.getAbilityInfo(abilityName); + + if (abilityInfo == null) { + continue; + } + + sender.sendMessage((i + 1) + " - " + abilityInfo.getElement().getColor() + abilityName); + } + + if (this.staff.containsKey(uuid.toString())) { + sender.sendMessage(this.staff.get(uuid.toString())); + } } @Override protected List getTabCompletion(final CommandSender sender, final List args) { if (args.size() >= 1 || !sender.hasPermission("bending.command.who")) { - return new ArrayList(); + return new ArrayList<>(); } - final List l = new ArrayList(); + final List l = new ArrayList<>(); for (final Player p : Bukkit.getOnlinePlayers()) { l.add(p.getName()); } diff --git a/src/com/projectkorra/projectkorra/player/BendingPlayer.java b/src/com/projectkorra/projectkorra/player/BendingPlayer.java index 76a64468..c93c6e4c 100644 --- a/src/com/projectkorra/projectkorra/player/BendingPlayer.java +++ b/src/com/projectkorra/projectkorra/player/BendingPlayer.java @@ -91,6 +91,10 @@ public class BendingPlayer { return this.elements.contains(this.elementManager.getBlood()); } + public boolean canBloodbendAtAnytime() { + return canBloodbend() && this.player.hasPermission("bending.water.bloodbending.anytime"); + } + public boolean canUseHealing() { return this.elements.contains(this.elementManager.getHealing()); } diff --git a/src/com/projectkorra/projectkorra/player/BendingPlayerManager.java b/src/com/projectkorra/projectkorra/player/BendingPlayerManager.java index 1551d251..674dff89 100644 --- a/src/com/projectkorra/projectkorra/player/BendingPlayerManager.java +++ b/src/com/projectkorra/projectkorra/player/BendingPlayerManager.java @@ -3,6 +3,7 @@ package com.projectkorra.projectkorra.player; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.event.PlayerCooldownChangeEvent; import com.projectkorra.projectkorra.module.DatabaseModule; +import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -11,6 +12,7 @@ import org.bukkit.event.player.PlayerQuitEvent; import java.sql.SQLException; import java.util.*; +import java.util.function.Consumer; public class BendingPlayerManager extends DatabaseModule { @@ -88,7 +90,7 @@ public class BendingPlayerManager extends DatabaseModule { this.players.put(player.getUniqueId(), bendingPlayer); @@ -101,6 +103,24 @@ public class BendingPlayerManager extends DatabaseModule consumer) { + runAsync(() -> { + try { + BendingPlayer bendingPlayer = getRepository().selectPlayer(uuid, null); + + runSync(() -> { + this.players.put(uuid, bendingPlayer); + this.disconnected.add(uuid); + + consumer.accept(bendingPlayer); + }); + } catch (SQLException e) { + consumer.accept(null); + e.printStackTrace(); + } + }); + } + public BendingPlayer getBendingPlayer(Player player) { return getBendingPlayer(player.getUniqueId()); } diff --git a/src/com/projectkorra/projectkorra/player/BendingPlayerRepository.java b/src/com/projectkorra/projectkorra/player/BendingPlayerRepository.java index 46ba2516..78d03ccf 100644 --- a/src/com/projectkorra/projectkorra/player/BendingPlayerRepository.java +++ b/src/com/projectkorra/projectkorra/player/BendingPlayerRepository.java @@ -2,6 +2,7 @@ package com.projectkorra.projectkorra.player; import com.projectkorra.projectkorra.database.DatabaseQuery; import com.projectkorra.projectkorra.database.DatabaseRepository; +import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import java.nio.ByteBuffer; @@ -39,8 +40,7 @@ public class BendingPlayerRepository extends DatabaseRepository { } } - protected BendingPlayer selectPlayer(Player player) throws SQLException { - UUID uuid = player.getUniqueId(); + protected BendingPlayer selectPlayer(UUID uuid, String name) throws SQLException { byte[] binaryUUID = ByteBuffer.allocate(16).putLong(uuid.getMostSignificantBits()).putLong(uuid.getLeastSignificantBits()).array(); Connection connection = getDatabase().getConnection(); @@ -50,7 +50,11 @@ public class BendingPlayerRepository extends DatabaseRepository { try (ResultSet rs = statement.executeQuery()) { if (!rs.next()) { - return insertPlayer(player.getUniqueId(), player.getName()); + if (name != null) { + return insertPlayer(uuid, name); + } + + return null; } int playerId = rs.getInt("player_id"); @@ -58,8 +62,8 @@ public class BendingPlayerRepository extends DatabaseRepository { long firstLogin = rs.getLong("first_login"); boolean bendingPermanentlyRemoved = rs.getBoolean("bending_permanently_removed"); - if (!player.getName().equals(playerName)) { - updatePlayerName(playerId, player.getName()); + if (name != null && !name.equals(playerName)) { + updatePlayerName(playerId, name); } BendingPlayer bendingPlayer = new BendingPlayer(playerId, uuid, playerName, firstLogin);