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;
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<StatsCommandConfig> {
@ -50,11 +43,11 @@ public class StatsCommand extends PKCommand<StatsCommandConfig> {
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<StatsCommandConfig> {
} 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<StatsCommandConfig> {
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());

View file

@ -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<ToggleCommandConfig> {
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<ToggleCommandConfig> {
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<ToggleCommandConfig> {
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<ToggleCommandConfig> {
final List<String> l = new ArrayList<String>();
if (args.size() == 0) {
final List<String> elements = new ArrayList<String>();
for (final Element e : Element.getAllElements()) {
for (Element e : this.elementManager.getElements()) {
elements.add(e.getName());
}
Collections.sort(elements);

View file

@ -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<WhoCommandConfig> {
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<WhoCommandConfig> {
* @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<Element> 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<String> getTabCompletion(final CommandSender sender, final List<String> args) {
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()) {
l.add(p.getName());
}

View file

@ -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());
}

View file

@ -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<BendingPlayerRepository> {
@ -88,7 +90,7 @@ public class BendingPlayerManager extends DatabaseModule<BendingPlayerRepository
private void loadBendingPlayer(Player player) {
try {
BendingPlayer bendingPlayer = getRepository().selectPlayer(player);
BendingPlayer bendingPlayer = getRepository().selectPlayer(player.getUniqueId(), player.getName());
runSync(() -> {
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) {
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.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);