- Make sure to match the type of the result of Attribute Modification is the same as the old value, otherwise it errors
- Change where calls to save players are made. Now they only happen on the plugin disable, when a player leaves, and when a player is kicked.
-
This commit is contained in:
Simp 2020-03-19 16:04:36 -04:00
parent c12e0daebb
commit 1d509259fb
10 changed files with 103 additions and 51 deletions

View file

@ -828,12 +828,8 @@ public class BendingPlayer {
* *
* @param abilities The abilities to set/save * @param abilities The abilities to set/save
*/ */
public void setAbilities(final HashMap<Integer, String> abilities) { public void setAbilities(final Map<Integer, String> abilities) {
this.abilities = abilities; this.abilities = new HashMap<>(abilities);
for (int i = 1; i <= 9; i++) {
DBConnection.sql.modifyQuery("UPDATE pk_players SET slot" + i + " = '" + abilities.get(i) + "' WHERE uuid = '" + this.uuid + "'");
}
} }
/** /**

View file

@ -200,24 +200,26 @@ public class GeneralMethods {
* @param slot * @param slot
* @see #bindAbility(Player, String) * @see #bindAbility(Player, String)
*/ */
public static void bindAbility(final Player player, final String ability, final int slot) { public static boolean bindAbility(final Player player, final String ability, final int slot) {
if (MultiAbilityManager.playerAbilities.containsKey(player)) { if (MultiAbilityManager.playerAbilities.containsKey(player)) {
GeneralMethods.sendBrandingMessage(player, ChatColor.RED + "You can't edit your binds right now!"); GeneralMethods.sendBrandingMessage(player, ChatColor.RED + "You can't edit your binds right now!");
return; return false;
} }
final PlayerBindChangeEvent event = new PlayerBindChangeEvent(player, ability, slot, true);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return false;
}
final BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player.getName()); final BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player.getName());
final CoreAbility coreAbil = CoreAbility.getAbility(ability);
if (bPlayer == null) { if (bPlayer == null) {
return; return true;
} }
bPlayer.getAbilities().put(slot, ability); bPlayer.getAbilities().put(slot, ability);
return true;
if (coreAbil != null) {
GeneralMethods.sendBrandingMessage(player, coreAbil.getElement().getColor() + ConfigManager.languageConfig.get().getString("Commands.Bind.SuccessfullyBound").replace("{ability}", ability).replace("{slot}", String.valueOf(slot)));
}
saveAbility(bPlayer, slot, ability);
} }
/** /**
@ -2024,11 +2026,6 @@ public class GeneralMethods {
} }
final String uuid = bPlayer.getUUIDString(); final String uuid = bPlayer.getUUIDString();
final PlayerBindChangeEvent event = new PlayerBindChangeEvent(Bukkit.getPlayer(UUID.fromString(uuid)), ability, slot, false);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
// Temp code to block modifications of binds, Should be replaced when bind event is added. // Temp code to block modifications of binds, Should be replaced when bind event is added.
if (MultiAbilityManager.playerAbilities.containsKey(Bukkit.getPlayer(bPlayer.getUUID()))) { if (MultiAbilityManager.playerAbilities.containsKey(Bukkit.getPlayer(bPlayer.getUUID()))) {
return; return;
@ -2144,6 +2141,16 @@ public class GeneralMethods {
final boolean permaRemoved = bPlayer.isPermaRemoved(); final boolean permaRemoved = bPlayer.isPermaRemoved();
DBConnection.sql.modifyQuery("UPDATE pk_players SET permaremoved = '" + (permaRemoved ? "true" : "false") + "' WHERE uuid = '" + uuid + "'"); DBConnection.sql.modifyQuery("UPDATE pk_players SET permaremoved = '" + (permaRemoved ? "true" : "false") + "' WHERE uuid = '" + uuid + "'");
} }
public static void savePlayer(final BendingPlayer bPlayer) {
for (int slot : bPlayer.getAbilities().keySet()) {
saveAbility(bPlayer, slot, bPlayer.getAbilities().get(slot));
}
saveElements(bPlayer);
saveSubElements(bPlayer);
savePermaRemoved(bPlayer);
}
public static void setVelocity(final Entity entity, final Vector velocity) { public static void setVelocity(final Entity entity, final Vector velocity) {
if (entity instanceof TNTPrimed) { if (entity instanceof TNTPrimed) {

View file

@ -7,8 +7,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import co.aikar.timings.lib.MCTiming;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.GameMode; import org.bukkit.GameMode;
@ -191,6 +189,8 @@ import com.projectkorra.projectkorra.waterbending.multiabilities.WaterArms;
import com.projectkorra.projectkorra.waterbending.passive.FastSwim; import com.projectkorra.projectkorra.waterbending.passive.FastSwim;
import com.projectkorra.projectkorra.waterbending.passive.HydroSink; import com.projectkorra.projectkorra.waterbending.passive.HydroSink;
import co.aikar.timings.lib.MCTiming;
public class PKListener implements Listener { public class PKListener implements Listener {
ProjectKorra plugin; ProjectKorra plugin;
@ -1221,7 +1221,52 @@ public class PKListener implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onPlayerKick(final PlayerKickEvent event) { public void onPlayerKick(final PlayerKickEvent event) {
JUMPS.remove(event.getPlayer()); final Player player = event.getPlayer();
final BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player);
if (ProjectKorra.isStatisticsEnabled()) {
Manager.getManager(StatisticsManager.class).store(player.getUniqueId());
}
if (bPlayer != null) {
GeneralMethods.savePlayer(bPlayer);
if (ProjectKorra.isDatabaseCooldownsEnabled()) {
bPlayer.saveCooldowns();
}
if (TOGGLED_OUT.contains(player.getUniqueId()) && bPlayer.isToggled()) {
TOGGLED_OUT.remove(player.getUniqueId());
}
if (!bPlayer.isToggled()) {
TOGGLED_OUT.add(player.getUniqueId());
}
}
if (Commands.invincible.contains(player.getName())) {
Commands.invincible.remove(player.getName());
}
Preset.unloadPreset(player);
if (TempArmor.hasTempArmor(player)) {
for (final TempArmor armor : TempArmor.getTempArmorList(player)) {
armor.revert();
}
}
if (MetalClips.isControlled(event.getPlayer())) {
MetalClips.removeControlledEnitity(event.getPlayer());
}
MultiAbilityManager.remove(player);
JUMPS.remove(player);
for (final CoreAbility ca : CoreAbility.getAbilities()) {
if (CoreAbility.getAbility(event.getPlayer(), ca.getClass()) != null) {
CoreAbility.getAbility(event.getPlayer(), ca.getClass()).remove();
}
}
} }
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
@ -1333,7 +1378,9 @@ public class PKListener implements Listener {
if (ProjectKorra.isStatisticsEnabled()) { if (ProjectKorra.isStatisticsEnabled()) {
Manager.getManager(StatisticsManager.class).store(player.getUniqueId()); Manager.getManager(StatisticsManager.class).store(player.getUniqueId());
} }
if (bPlayer != null) { if (bPlayer != null) {
GeneralMethods.savePlayer(bPlayer);
if (ProjectKorra.isDatabaseCooldownsEnabled()) { if (ProjectKorra.isDatabaseCooldownsEnabled()) {
bPlayer.saveCooldowns(); bPlayer.saveCooldowns();
} }

View file

@ -162,7 +162,12 @@ public class ProjectKorra extends JavaPlugin {
Manager.getManager(StatisticsManager.class).save(player.getUniqueId(), false); Manager.getManager(StatisticsManager.class).save(player.getUniqueId(), false);
} }
final BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); final BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player);
if (bPlayer != null && isDatabaseCooldownsEnabled()) { if (bPlayer == null) {
continue;
}
GeneralMethods.savePlayer(bPlayer);
if (isDatabaseCooldownsEnabled()) {
bPlayer.saveCooldowns(); bPlayer.saveCooldowns();
} }
} }

View file

@ -62,7 +62,20 @@ public enum AttributeModifier {
if (this == DIVISION && modifier.doubleValue() == 0) { if (this == DIVISION && modifier.doubleValue() == 0) {
throw new IllegalArgumentException("Attribute modifier for DIVISION cannot be zero!"); throw new IllegalArgumentException("Attribute modifier for DIVISION cannot be zero!");
} }
return this.modifier.performModification(oldValue, modifier);
Number result = this.modifier.performModification(oldValue, modifier);
if (oldValue instanceof Double) {
return result.doubleValue();
} else if (oldValue instanceof Float) {
return result.floatValue();
} else if (oldValue instanceof Long) {
return result.longValue();
} else if (oldValue instanceof Integer) {
return result.intValue();
}
return result;
} }
/** /**

View file

@ -118,8 +118,6 @@ public class AddCommand extends PKCommand {
} }
} }
GeneralMethods.saveElements(bPlayer);
GeneralMethods.saveSubElements(bPlayer);
Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, target, e, Result.ADD)); Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, target, e, Result.ADD));
} }
} }
@ -192,8 +190,6 @@ public class AddCommand extends PKCommand {
} }
} }
GeneralMethods.saveElements(bPlayer);
GeneralMethods.saveSubElements(bPlayer);
Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, target, e, Result.ADD)); Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, target, e, Result.ADD));
return; return;
@ -225,7 +221,6 @@ public class AddCommand extends PKCommand {
GeneralMethods.sendBrandingMessage(target, color + this.addedAE.replace("{element}", sub.getName() + sub.getType().getBender())); GeneralMethods.sendBrandingMessage(target, color + this.addedAE.replace("{element}", sub.getName() + sub.getType().getBender()));
} }
} }
GeneralMethods.saveSubElements(bPlayer);
Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeSubElementEvent(sender, target, sub, com.projectkorra.projectkorra.event.PlayerChangeSubElementEvent.Result.ADD)); Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeSubElementEvent(sender, target, sub, com.projectkorra.projectkorra.event.PlayerChangeSubElementEvent.Result.ADD));
return; return;

View file

@ -109,7 +109,11 @@ public class BindCommand extends PKCommand {
} }
final String name = coreAbil != null ? coreAbil.getName() : null; final String name = coreAbil != null ? coreAbil.getName() : null;
GeneralMethods.bindAbility((Player) sender, name, slot); if (GeneralMethods.bindAbility((Player) sender, name, slot)) {
GeneralMethods.sendBrandingMessage(sender, coreAbil.getElement().getColor() + ConfigManager.languageConfig.get().getString("Commands.Bind.SuccessfullyBound").replace("{ability}", ability).replace("{slot}", String.valueOf(slot)));
} else {
GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + "Unable to bind ability!");
}
} }
@Override @Override

View file

@ -169,7 +169,6 @@ public class ChooseCommand extends PKCommand {
} else { } else {
GeneralMethods.sendBrandingMessage(target, color + this.chosenCFW.replace("{element}", sub.getName() + sub.getType().getBender())); GeneralMethods.sendBrandingMessage(target, color + this.chosenCFW.replace("{element}", sub.getName() + sub.getType().getBender()));
} }
GeneralMethods.saveSubElements(bPlayer);
Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeSubElementEvent(sender, target, sub, com.projectkorra.projectkorra.event.PlayerChangeSubElementEvent.Result.CHOOSE)); Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeSubElementEvent(sender, target, sub, com.projectkorra.projectkorra.event.PlayerChangeSubElementEvent.Result.CHOOSE));
} else { } else {
bPlayer.setElement(element); bPlayer.setElement(element);
@ -194,8 +193,6 @@ public class ChooseCommand extends PKCommand {
GeneralMethods.sendBrandingMessage(target, color + this.chosenAE.replace("{element}", element.getName() + element.getType().getBender())); GeneralMethods.sendBrandingMessage(target, color + this.chosenAE.replace("{element}", element.getName() + element.getType().getBender()));
} }
} }
GeneralMethods.saveElements(bPlayer);
GeneralMethods.saveSubElements(bPlayer);
Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, target, element, Result.CHOOSE)); Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, target, element, Result.CHOOSE));
} }

View file

@ -69,16 +69,13 @@ public class PermaremoveCommand extends PKCommand {
if (bPlayer.isPermaRemoved()) { if (bPlayer.isPermaRemoved()) {
bPlayer.setPermaRemoved(false); bPlayer.setPermaRemoved(false);
GeneralMethods.savePermaRemoved(bPlayer);
GeneralMethods.sendBrandingMessage(player, ChatColor.GREEN + this.restored); GeneralMethods.sendBrandingMessage(player, ChatColor.GREEN + this.restored);
if (!(sender instanceof Player) || !sender.getName().equalsIgnoreCase(target)) { if (!(sender instanceof Player) || !sender.getName().equalsIgnoreCase(target)) {
GeneralMethods.sendBrandingMessage(sender, ChatColor.GREEN + this.restoredConfirm.replace("{target}", ChatColor.DARK_AQUA + player.getName() + ChatColor.GREEN)); GeneralMethods.sendBrandingMessage(sender, ChatColor.GREEN + this.restoredConfirm.replace("{target}", ChatColor.DARK_AQUA + player.getName() + ChatColor.GREEN));
} }
} else { } else {
bPlayer.getElements().clear(); bPlayer.getElements().clear();
GeneralMethods.saveElements(bPlayer);
bPlayer.setPermaRemoved(true); bPlayer.setPermaRemoved(true);
GeneralMethods.savePermaRemoved(bPlayer);
GeneralMethods.removeUnusableAbilities(player.getName()); GeneralMethods.removeUnusableAbilities(player.getName());
GeneralMethods.sendBrandingMessage(player, ChatColor.RED + this.removed); GeneralMethods.sendBrandingMessage(player, ChatColor.RED + this.removed);
if (!(sender instanceof Player) || !sender.getName().equalsIgnoreCase(target)) { if (!(sender instanceof Player) || !sender.getName().equalsIgnoreCase(target)) {

View file

@ -55,13 +55,13 @@ public class RemoveCommand extends PKCommand {
if (e instanceof SubElement) { if (e instanceof SubElement) {
if (senderBPlayer.hasElement(e)) { if (senderBPlayer.hasElement(e)) {
senderBPlayer.getSubElements().remove(e); senderBPlayer.getSubElements().remove(e);
GeneralMethods.saveSubElements(senderBPlayer);
GeneralMethods.removeUnusableAbilities(sender.getName()); GeneralMethods.removeUnusableAbilities(sender.getName());
GeneralMethods.sendBrandingMessage(sender, e.getColor() + this.succesfullyRemovedElementSelf.replace("{element}", e.getName() + e.getType().getBending()).replace("{sender}", ChatColor.DARK_AQUA + sender.getName() + e.getColor())); GeneralMethods.sendBrandingMessage(sender, e.getColor() + this.succesfullyRemovedElementSelf.replace("{element}", e.getName() + e.getType().getBending()).replace("{sender}", ChatColor.DARK_AQUA + sender.getName() + e.getColor()));
Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeSubElementEvent(sender, player, (SubElement) e, com.projectkorra.projectkorra.event.PlayerChangeSubElementEvent.Result.REMOVE)); Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeSubElementEvent(sender, player, (SubElement) e, com.projectkorra.projectkorra.event.PlayerChangeSubElementEvent.Result.REMOVE));
} else { } else {
GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.wrongElementSelf); GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.wrongElementSelf);
} }
return; return;
} else if (e instanceof Element) { } else if (e instanceof Element) {
if (senderBPlayer.hasElement(e)) { if (senderBPlayer.hasElement(e)) {
@ -69,8 +69,6 @@ public class RemoveCommand extends PKCommand {
for (final SubElement sub : Element.getSubElements(e)) { for (final SubElement sub : Element.getSubElements(e)) {
senderBPlayer.getSubElements().remove(sub); senderBPlayer.getSubElements().remove(sub);
} }
GeneralMethods.saveElements(senderBPlayer);
GeneralMethods.saveSubElements(senderBPlayer);
GeneralMethods.removeUnusableAbilities(sender.getName()); GeneralMethods.removeUnusableAbilities(sender.getName());
GeneralMethods.sendBrandingMessage(sender, e.getColor() + this.succesfullyRemovedElementSelf.replace("{element}", e.getName() + e.getType().getBending())); GeneralMethods.sendBrandingMessage(sender, e.getColor() + this.succesfullyRemovedElementSelf.replace("{element}", e.getName() + e.getType().getBending()));
@ -79,16 +77,14 @@ public class RemoveCommand extends PKCommand {
} else { } else {
GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.wrongElementSelf); GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.wrongElementSelf);
} }
{
return; return;
}
} }
} else { } else {
GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.invalidElement); GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.invalidElement);
} }
{
return; return;
}
} }
GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.playerOffline); GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.playerOffline);
return; return;
@ -112,14 +108,11 @@ public class RemoveCommand extends PKCommand {
} }
if (e instanceof SubElement) { if (e instanceof SubElement) {
bPlayer.getSubElements().remove(e); bPlayer.getSubElements().remove(e);
GeneralMethods.saveSubElements(bPlayer);
} else { } else {
bPlayer.getElements().remove(e); bPlayer.getElements().remove(e);
for (final SubElement sub : Element.getSubElements(e)) { for (final SubElement sub : Element.getSubElements(e)) {
bPlayer.getSubElements().remove(sub); bPlayer.getSubElements().remove(sub);
} }
GeneralMethods.saveElements(bPlayer);
GeneralMethods.saveSubElements(bPlayer);
} }
GeneralMethods.removeUnusableAbilities(player.getName()); GeneralMethods.removeUnusableAbilities(player.getName());
@ -131,8 +124,6 @@ public class RemoveCommand extends PKCommand {
} else if (args.size() == 1) { } else if (args.size() == 1) {
bPlayer.getElements().clear(); bPlayer.getElements().clear();
bPlayer.getSubElements().clear(); bPlayer.getSubElements().clear();
GeneralMethods.saveElements(bPlayer);
GeneralMethods.saveSubElements(bPlayer);
GeneralMethods.removeUnusableAbilities(player.getName()); GeneralMethods.removeUnusableAbilities(player.getName());
if (!player.getName().equalsIgnoreCase(sender.getName())) { if (!player.getName().equalsIgnoreCase(sender.getName())) {
GeneralMethods.sendBrandingMessage(sender, ChatColor.YELLOW + this.succesfullyRemovedAllElementsTargetConfirm.replace("{target}", ChatColor.DARK_AQUA + player.getName() + ChatColor.YELLOW)); GeneralMethods.sendBrandingMessage(sender, ChatColor.YELLOW + this.succesfullyRemovedAllElementsTargetConfirm.replace("{target}", ChatColor.DARK_AQUA + player.getName() + ChatColor.YELLOW));