Updated stats, toggle, and who commands

This commit is contained in:
jayoevans 2019-10-30 21:14:53 +10:00
parent 16f90d20ab
commit fc29b27808
6 changed files with 284 additions and 264 deletions

View file

@ -1,29 +1,22 @@
package com.projectkorra.projectkorra.command; package com.projectkorra.projectkorra.command;
import java.sql.ResultSet; import com.projectkorra.projectkorra.GeneralMethods;
import java.sql.SQLException; import com.projectkorra.projectkorra.ProjectKorra;
import java.util.ArrayList; import com.projectkorra.projectkorra.ability.info.AbilityInfo;
import java.util.Arrays; import com.projectkorra.projectkorra.configuration.configs.commands.StatsCommandConfig;
import java.util.Collections; import com.projectkorra.projectkorra.element.Element;
import java.util.HashSet; import com.projectkorra.projectkorra.storage.DBConnection;
import java.util.List; import com.projectkorra.projectkorra.util.Statistic;
import java.util.Set; import com.projectkorra.projectkorra.util.StatisticsMethods;
import java.util.UUID;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import com.projectkorra.projectkorra.Element; import java.sql.ResultSet;
import com.projectkorra.projectkorra.GeneralMethods; import java.sql.SQLException;
import com.projectkorra.projectkorra.ProjectKorra; import java.util.*;
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;
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public class StatsCommand extends PKCommand<StatsCommandConfig> { public class StatsCommand extends PKCommand<StatsCommandConfig> {
@ -50,11 +43,11 @@ public class StatsCommand extends PKCommand<StatsCommandConfig> {
if (!this.correctLength(sender, args.size(), 3, 4)) { if (!this.correctLength(sender, args.size(), 3, 4)) {
return; return;
} }
final CoreAbility ability = CoreAbility.getAbility(args.get(1)); final AbilityInfo abilityInfo = this.abilityManager.getAbilityInfo(args.get(1));
final Element element = Element.getElement(args.get(1)); final Element element = this.elementManager.getElement(args.get(1));
Object object = null; Object object = null;
if (ability != null) { if (abilityInfo != null) {
object = ability; object = abilityInfo;
} else if (element != null) { } else if (element != null) {
object = element; object = element;
} }
@ -125,9 +118,9 @@ public class StatsCommand extends PKCommand<StatsCommandConfig> {
} else { } else {
value = StatisticsMethods.getStatistic(target.getUniqueId(), object, statistic); value = StatisticsMethods.getStatistic(target.getUniqueId(), object, statistic);
} }
if (object instanceof CoreAbility) { if (object instanceof AbilityInfo) {
final CoreAbility ability = (CoreAbility) object; final AbilityInfo abilityInfo = (AbilityInfo) object;
message = message.replace("%object%", ability.getName()).replace("%player%", target.getName()).replace("%value%", String.valueOf(value)); message = message.replace("%object%", abilityInfo.getName()).replace("%player%", target.getName()).replace("%value%", String.valueOf(value));
} else if (object instanceof Element) { } else if (object instanceof Element) {
final Element element = (Element) object; final Element element = (Element) object;
message = message.replace("%object%", element.getName()).replace("%player%", target.getName()).replace("%value%", String.valueOf(value)); message = message.replace("%object%", element.getName()).replace("%player%", target.getName()).replace("%value%", String.valueOf(value));
@ -144,9 +137,9 @@ public class StatsCommand extends PKCommand<StatsCommandConfig> {
int p = page > maxPage ? maxPage : page; int p = page > maxPage ? maxPage : page;
p = p < 1 ? 1 : p; p = p < 1 ? 1 : p;
String title = "%object% " + statistic.getDisplayName() + " Leaderboard"; String title = "%object% " + statistic.getDisplayName() + " Leaderboard";
if (object instanceof CoreAbility) { if (object instanceof AbilityInfo) {
final CoreAbility ability = (CoreAbility) object; final AbilityInfo abilityInfo = (AbilityInfo) object;
title = title.replace("%object%", ability.getName()); title = title.replace("%object%", abilityInfo.getName());
} else if (object instanceof Element) { } else if (object instanceof Element) {
final Element element = (Element) object; final Element element = (Element) object;
title = title.replace("%object%", element.getName()); title = title.replace("%object%", element.getName());

View file

@ -1,19 +1,18 @@
package com.projectkorra.projectkorra.command; package com.projectkorra.projectkorra.command;
import java.util.ArrayList; import com.projectkorra.projectkorra.GeneralMethods;
import java.util.Collections; import com.projectkorra.projectkorra.configuration.configs.commands.ToggleCommandConfig;
import java.util.List; 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.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.projectkorra.projectkorra.BendingPlayer; import java.util.ArrayList;
import com.projectkorra.projectkorra.Element; import java.util.Collections;
import com.projectkorra.projectkorra.Element.SubElement; import java.util.List;
import com.projectkorra.projectkorra.configuration.configs.commands.ToggleCommandConfig;
import com.projectkorra.projectkorra.GeneralMethods;
/** /**
* Executor for /bending toggle. Extends {@link PKCommand}. * Executor for /bending toggle. Extends {@link PKCommand}.
@ -53,19 +52,20 @@ public class ToggleCommand extends PKCommand<ToggleCommandConfig> {
GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.toggledOffForAll); GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.toggledOffForAll);
return; return;
} }
BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(sender.getName());
if (bPlayer == null) { Player player = (Player) sender;
GeneralMethods.createBendingPlayer(((Player) sender).getUniqueId(), sender.getName()); BendingPlayer bendingPlayer = this.bendingPlayerManager.getBendingPlayer(player);
bPlayer = BendingPlayer.getBendingPlayer(sender.getName());
} if (bendingPlayer.isToggled()) {
if (bPlayer.isToggled()) {
GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.toggleOffSelf); GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.toggleOffSelf);
bPlayer.toggleBending(); bendingPlayer.toggleBending();
} else { } else {
GeneralMethods.sendBrandingMessage(sender, ChatColor.GREEN + this.toggleOnSelf); GeneralMethods.sendBrandingMessage(sender, ChatColor.GREEN + this.toggleOnSelf);
bPlayer.toggleBending(); bendingPlayer.toggleBending();
} }
} else if (args.size() == 1) { } 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 (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. if (Commands.isToggledForAll) { // Bending is toggled off for all players.
Commands.isToggledForAll = false; Commands.isToggledForAll = false;
@ -85,26 +85,27 @@ public class ToggleCommand extends PKCommand<ToggleCommandConfig> {
GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.toggleOffAll); 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)) { } else if (sender instanceof Player && args.size() == 1 && element != null && !(element instanceof SubElement)) {
if (!BendingPlayer.getBendingPlayer(sender.getName()).hasElement(Element.fromString(args.get(0)))) { Player player = (Player) sender;
BendingPlayer bendingPlayer = this.bendingPlayerManager.getBendingPlayer(player);
if (!bendingPlayer.hasElement(element)) {
GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.wrongElement); GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.wrongElement);
return; 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)) { bendingPlayer.toggleElement(element);
GeneralMethods.sendBrandingMessage(sender, color + this.toggledOnSingleElement.replace("{element}", e.getName() + (e.getType() != null ? e.getType().getBending() : "")));
if (bendingPlayer.isElementToggled(element)) {
GeneralMethods.sendBrandingMessage(sender, element.getColor() + this.toggledOnSingleElement.replace("{element}", element.getName() + (element.getType() != null ? element.getType().getBending() : "")));
} else { } 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 { } else {
this.help(sender, false); 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)); final Player target = Bukkit.getPlayer(args.get(1));
if (!this.hasAdminPermission(sender)) { if (!this.hasAdminPermission(sender)) {
return; return;
@ -113,22 +114,23 @@ public class ToggleCommand extends PKCommand<ToggleCommandConfig> {
GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.notFound); GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.notFound);
return; 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)); GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.wrongElementOther.replace("{target}", ChatColor.DARK_AQUA + target.getName() + ChatColor.RED));
return; 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)) { if (bendingPlayer.isElementToggled(element)) {
GeneralMethods.sendBrandingMessage(sender, color + this.toggledOffOtherElementConfirm.replace("{target}", target.getName()).replace("{element}", e.getName() + (e.getType() != null ? e.getType().getBending() : ""))); GeneralMethods.sendBrandingMessage(sender, element.getColor() + this.toggledOffOtherElementConfirm.replace("{target}", target.getName()).replace("{element}", element.getName() + (element.getType() != null ? element.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())); 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 { } else {
GeneralMethods.sendBrandingMessage(sender, color + this.toggledOnOtherElementConfirm.replace("{target}", target.getName()).replace("{element}", e.getName() + (e.getType() != null ? e.getType().getBending() : ""))); GeneralMethods.sendBrandingMessage(sender, element.getColor() + this.toggledOnOtherElementConfirm.replace("{target}", target.getName()).replace("{element}", element.getName() + (element.getType() != null ? element.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(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 { } else {
this.help(sender, false); this.help(sender, false);
} }
@ -150,7 +152,7 @@ public class ToggleCommand extends PKCommand<ToggleCommandConfig> {
final List<String> l = new ArrayList<String>(); final List<String> l = new ArrayList<String>();
if (args.size() == 0) { if (args.size() == 0) {
final List<String> elements = new ArrayList<String>(); final List<String> elements = new ArrayList<String>();
for (final Element e : Element.getAllElements()) { for (Element e : this.elementManager.getElements()) {
elements.add(e.getName()); elements.add(e.getName());
} }
Collections.sort(elements); Collections.sort(elements);

View file

@ -1,5 +1,20 @@
package com.projectkorra.projectkorra.command; 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.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
@ -8,28 +23,7 @@ import java.net.SocketException;
import java.net.URL; import java.net.URL;
import java.net.URLConnection; import java.net.URLConnection;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.ArrayList; import java.util.*;
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;
/** /**
* Executor for /bending who. Extends {@link PKCommand}. * Executor for /bending who. Extends {@link PKCommand}.
@ -98,17 +92,13 @@ public class WhoCommand extends PKCommand<WhoCommandConfig> {
for (final Player player : Bukkit.getOnlinePlayers()) { for (final Player player : Bukkit.getOnlinePlayers()) {
final String playerName = player.getName(); final String playerName = player.getName();
String result = ""; String result = "";
BendingPlayer bp = BendingPlayer.getBendingPlayer(playerName); BendingPlayer bendingPlayer = this.bendingPlayerManager.getBendingPlayer(player);
if (bp == null) { for (final Element element : bendingPlayer.getElements()) {
GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName());
bp = BendingPlayer.getBendingPlayer(player.getName());
}
for (final Element element : bp.getElements()) {
if (result == "") { 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 { } 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())) { if (this.staff.containsKey(player.getUniqueId().toString())) {
@ -147,197 +137,204 @@ public class WhoCommand extends PKCommand<WhoCommandConfig> {
* @param playerName The Player to look up * @param playerName The Player to look up
*/ */
private void whoPlayer(final CommandSender sender, final String playerName) { private void whoPlayer(final CommandSender sender, final String playerName) {
final OfflinePlayer player = Bukkit.getOfflinePlayer(playerName); final OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(playerName);
if (player == null || !player.hasPlayedBefore() && !player.isOnline()) {
if (offlinePlayer == null || !offlinePlayer.hasPlayedBefore() && !offlinePlayer.isOnline()) {
GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + "Player not found!"); GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + "Player not found!");
return; 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 bendingPlayer = this.bendingPlayerManager.getBendingPlayer(offlinePlayer.getUniqueId());
BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player);
if (bPlayer == null) { if (bendingPlayer != null) {
GeneralMethods.createBendingPlayer(player.getUniqueId(), playerName); someWhoPlayerMethod(sender, offlinePlayer, bendingPlayer);
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);
return; return;
} }
bPlayer = BendingPlayer.getBendingPlayer(player); GeneralMethods.sendBrandingMessage(sender, ChatColor.GRAY + this.playerOffline.replace("{player}", ChatColor.WHITE + offlinePlayer.getName() + ChatColor.GRAY).replace("{target}", ChatColor.WHITE + offlinePlayer.getName() + ChatColor.GRAY));
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");
}
if (player_ != null) { this.bendingPlayerManager.loadBendingPlayer(offlinePlayer.getUniqueId(), loadedBendingPlayer -> {
if (bPlayer.canUseFlight()) { if (loadedBendingPlayer == null) {
sender.sendMessage(Element.FLIGHT.getColor() + " Can Fly"); GeneralMethods.sendBrandingMessage(sender, ChatColor.DARK_RED + WhoCommand.this.databaseOverload);
} return;
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());
}
}
}
} }
if (bPlayer.hasElement(Element.WATER)) { someWhoPlayerMethod(sender, offlinePlayer, loadedBendingPlayer);
if (bPlayer.isElementToggled(Element.WATER)) { });
sender.sendMessage(Element.WATER.getColor() + "- Waterbender"); }
} else {
sender.sendMessage(Element.WATER.getColor() + "" + ChatColor.STRIKETHROUGH + "- Waterbender");
}
if (player_ != null) { private void someWhoPlayerMethod(CommandSender sender, OfflinePlayer player, BendingPlayer bendingPlayer) {
if (bPlayer.canPlantbend()) { sender.sendMessage(player.getName() + (!player.isOnline() ? ChatColor.RESET + " (Offline)" : ""));
sender.sendMessage(Element.PLANT.getColor() + " Can Plantbend");
} Element element;
if (bPlayer.canBloodbend()) { Set<Element> checked = new HashSet<>();
if (bPlayer.canBloodbendAtAnytime()) {
sender.sendMessage(Element.BLOOD.getColor() + " Can Bloodbend anytime, on any day"); checked.add(element = this.elementManager.getAir());
} else { if (bendingPlayer.hasElement(element)) {
sender.sendMessage(Element.BLOOD.getColor() + " Can Bloodbend"); if (bendingPlayer.isElementToggled(element)) {
} sender.sendMessage(element.getColor() + "- Airbender");
} } else {
if (bPlayer.canIcebend()) { sender.sendMessage(element.getColor() + "" + ChatColor.STRIKETHROUGH + "- Airbender");
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());
}
}
}
} }
if (bPlayer.hasElement(Element.EARTH)) { if (player.isOnline()) {
if (bPlayer.isElementToggled(Element.EARTH)) { if (bendingPlayer.canUseFlight()) {
sender.sendMessage(Element.EARTH.getColor() + "- Earthbender"); sender.sendMessage(this.elementManager.getFlight().getColor() + " Can Fly");
} else {
sender.sendMessage(Element.EARTH.getColor() + "" + ChatColor.STRIKETHROUGH + "- Earthbender");
} }
if (player_ != null) { if (bendingPlayer.canUseSpiritual()) {
if (bPlayer.canMetalbend()) { sender.sendMessage(this.elementManager.getSpiritual().getColor() + " Can use Spiritual Projection");
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 (player_ != null) { for (SubElement subElement : this.elementManager.getSubElements(element)) {
if (bPlayer.canCombustionbend()) { if (bendingPlayer.hasElement(subElement)) {
sender.sendMessage(Element.COMBUSTION.getColor() + " Can Combustionbend"); sender.sendMessage(subElement.getColor() + " Can " + (!subElement.getType().equals(ElementManager.ElementType.NO_SUFFIX) ? "" : "use ") + subElement.getName() + subElement.getType().getBend());
}
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());
}
} }
} }
} }
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 @Override
protected List<String> getTabCompletion(final CommandSender sender, final List<String> args) { protected List<String> getTabCompletion(final CommandSender sender, final List<String> args) {
if (args.size() >= 1 || !sender.hasPermission("bending.command.who")) { if (args.size() >= 1 || !sender.hasPermission("bending.command.who")) {
return new ArrayList<String>(); return new ArrayList<>();
} }
final List<String> l = new ArrayList<String>(); final List<String> l = new ArrayList<>();
for (final Player p : Bukkit.getOnlinePlayers()) { for (final Player p : Bukkit.getOnlinePlayers()) {
l.add(p.getName()); l.add(p.getName());
} }

View file

@ -91,6 +91,10 @@ public class BendingPlayer {
return this.elements.contains(this.elementManager.getBlood()); return this.elements.contains(this.elementManager.getBlood());
} }
public boolean canBloodbendAtAnytime() {
return canBloodbend() && this.player.hasPermission("bending.water.bloodbending.anytime");
}
public boolean canUseHealing() { public boolean canUseHealing() {
return this.elements.contains(this.elementManager.getHealing()); return this.elements.contains(this.elementManager.getHealing());
} }

View file

@ -3,6 +3,7 @@ package com.projectkorra.projectkorra.player;
import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.event.PlayerCooldownChangeEvent; import com.projectkorra.projectkorra.event.PlayerCooldownChangeEvent;
import com.projectkorra.projectkorra.module.DatabaseModule; import com.projectkorra.projectkorra.module.DatabaseModule;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
@ -11,6 +12,7 @@ import org.bukkit.event.player.PlayerQuitEvent;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.*; import java.util.*;
import java.util.function.Consumer;
public class BendingPlayerManager extends DatabaseModule<BendingPlayerRepository> { public class BendingPlayerManager extends DatabaseModule<BendingPlayerRepository> {
@ -88,7 +90,7 @@ public class BendingPlayerManager extends DatabaseModule<BendingPlayerRepository
private void loadBendingPlayer(Player player) { private void loadBendingPlayer(Player player) {
try { try {
BendingPlayer bendingPlayer = getRepository().selectPlayer(player); BendingPlayer bendingPlayer = getRepository().selectPlayer(player.getUniqueId(), player.getName());
runSync(() -> { runSync(() -> {
this.players.put(player.getUniqueId(), bendingPlayer); this.players.put(player.getUniqueId(), bendingPlayer);
@ -101,6 +103,24 @@ public class BendingPlayerManager extends DatabaseModule<BendingPlayerRepository
} }
} }
public void loadBendingPlayer(UUID uuid, Consumer<BendingPlayer> 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) { public BendingPlayer getBendingPlayer(Player player) {
return getBendingPlayer(player.getUniqueId()); return getBendingPlayer(player.getUniqueId());
} }

View file

@ -2,6 +2,7 @@ package com.projectkorra.projectkorra.player;
import com.projectkorra.projectkorra.database.DatabaseQuery; import com.projectkorra.projectkorra.database.DatabaseQuery;
import com.projectkorra.projectkorra.database.DatabaseRepository; import com.projectkorra.projectkorra.database.DatabaseRepository;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@ -39,8 +40,7 @@ public class BendingPlayerRepository extends DatabaseRepository {
} }
} }
protected BendingPlayer selectPlayer(Player player) throws SQLException { protected BendingPlayer selectPlayer(UUID uuid, String name) throws SQLException {
UUID uuid = player.getUniqueId();
byte[] binaryUUID = ByteBuffer.allocate(16).putLong(uuid.getMostSignificantBits()).putLong(uuid.getLeastSignificantBits()).array(); byte[] binaryUUID = ByteBuffer.allocate(16).putLong(uuid.getMostSignificantBits()).putLong(uuid.getLeastSignificantBits()).array();
Connection connection = getDatabase().getConnection(); Connection connection = getDatabase().getConnection();
@ -50,7 +50,11 @@ public class BendingPlayerRepository extends DatabaseRepository {
try (ResultSet rs = statement.executeQuery()) { try (ResultSet rs = statement.executeQuery()) {
if (!rs.next()) { if (!rs.next()) {
return insertPlayer(player.getUniqueId(), player.getName()); if (name != null) {
return insertPlayer(uuid, name);
}
return null;
} }
int playerId = rs.getInt("player_id"); int playerId = rs.getInt("player_id");
@ -58,8 +62,8 @@ public class BendingPlayerRepository extends DatabaseRepository {
long firstLogin = rs.getLong("first_login"); long firstLogin = rs.getLong("first_login");
boolean bendingPermanentlyRemoved = rs.getBoolean("bending_permanently_removed"); boolean bendingPermanentlyRemoved = rs.getBoolean("bending_permanently_removed");
if (!player.getName().equals(playerName)) { if (name != null && !name.equals(playerName)) {
updatePlayerName(playerId, player.getName()); updatePlayerName(playerId, name);
} }
BendingPlayer bendingPlayer = new BendingPlayer(playerId, uuid, playerName, firstLogin); BendingPlayer bendingPlayer = new BendingPlayer(playerId, uuid, playerName, firstLogin);