- 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
*/
public void setAbilities(final HashMap<Integer, String> abilities) {
this.abilities = abilities;
for (int i = 1; i <= 9; i++) {
DBConnection.sql.modifyQuery("UPDATE pk_players SET slot" + i + " = '" + abilities.get(i) + "' WHERE uuid = '" + this.uuid + "'");
}
public void setAbilities(final Map<Integer, String> abilities) {
this.abilities = new HashMap<>(abilities);
}
/**

View file

@ -200,24 +200,26 @@ public class GeneralMethods {
* @param slot
* @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)) {
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 CoreAbility coreAbil = CoreAbility.getAbility(ability);
if (bPlayer == null) {
return;
return true;
}
bPlayer.getAbilities().put(slot, ability);
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);
bPlayer.getAbilities().put(slot, ability);
return true;
}
/**
@ -2024,11 +2026,6 @@ public class GeneralMethods {
}
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.
if (MultiAbilityManager.playerAbilities.containsKey(Bukkit.getPlayer(bPlayer.getUUID()))) {
return;
@ -2145,6 +2142,16 @@ public class GeneralMethods {
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) {
if (entity instanceof TNTPrimed) {
if (ConfigManager.defaultConfig.get().getBoolean("Properties.BendingAffectFallingSand.TNT")) {

View file

@ -7,8 +7,6 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
import co.aikar.timings.lib.MCTiming;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
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.HydroSink;
import co.aikar.timings.lib.MCTiming;
public class PKListener implements Listener {
ProjectKorra plugin;
@ -1221,7 +1221,52 @@ public class PKListener implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
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)
@ -1333,7 +1378,9 @@ public class PKListener implements Listener {
if (ProjectKorra.isStatisticsEnabled()) {
Manager.getManager(StatisticsManager.class).store(player.getUniqueId());
}
if (bPlayer != null) {
GeneralMethods.savePlayer(bPlayer);
if (ProjectKorra.isDatabaseCooldownsEnabled()) {
bPlayer.saveCooldowns();
}

View file

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

View file

@ -62,7 +62,20 @@ public enum AttributeModifier {
if (this == DIVISION && modifier.doubleValue() == 0) {
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));
}
}
@ -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));
return;
@ -225,7 +221,6 @@ public class AddCommand extends PKCommand {
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));
return;

View file

@ -109,7 +109,11 @@ public class BindCommand extends PKCommand {
}
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

View file

@ -169,7 +169,6 @@ public class ChooseCommand extends PKCommand {
} else {
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));
} else {
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.saveElements(bPlayer);
GeneralMethods.saveSubElements(bPlayer);
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()) {
bPlayer.setPermaRemoved(false);
GeneralMethods.savePermaRemoved(bPlayer);
GeneralMethods.sendBrandingMessage(player, ChatColor.GREEN + this.restored);
if (!(sender instanceof Player) || !sender.getName().equalsIgnoreCase(target)) {
GeneralMethods.sendBrandingMessage(sender, ChatColor.GREEN + this.restoredConfirm.replace("{target}", ChatColor.DARK_AQUA + player.getName() + ChatColor.GREEN));
}
} else {
bPlayer.getElements().clear();
GeneralMethods.saveElements(bPlayer);
bPlayer.setPermaRemoved(true);
GeneralMethods.savePermaRemoved(bPlayer);
GeneralMethods.removeUnusableAbilities(player.getName());
GeneralMethods.sendBrandingMessage(player, ChatColor.RED + this.removed);
if (!(sender instanceof Player) || !sender.getName().equalsIgnoreCase(target)) {

View file

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