diff --git a/src/com/projectkorra/projectkorra/command/Commands.java b/src/com/projectkorra/projectkorra/command/Commands.java index 1cb3c3af..bdfc83fd 100644 --- a/src/com/projectkorra/projectkorra/command/Commands.java +++ b/src/com/projectkorra/projectkorra/command/Commands.java @@ -80,6 +80,7 @@ public class Commands { PluginCommand projectkorra = plugin.getCommand("projectkorra"); new AddCommand(); new BindCommand(); + new CopyCommand(); new CheckCommand(); new ChooseCommand(); new ClearCommand(); diff --git a/src/com/projectkorra/projectkorra/command/CopyCommand.java b/src/com/projectkorra/projectkorra/command/CopyCommand.java new file mode 100644 index 00000000..84346a9e --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/CopyCommand.java @@ -0,0 +1,101 @@ +package com.projectkorra.projectkorra.command; + +import java.util.HashMap; +import java.util.List; + +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.GeneralMethods; +import com.projectkorra.projectkorra.ProjectKorra; + +public class CopyCommand extends PKCommand { + + public CopyCommand() { + super("copy", "/bending copy [Player]", "This command will allow the user to copy the binds of another player either for himself or assign them to if specified.", new String[] { "copy", "co" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!correctLength(sender, args.size(), 1, 2)) { + return; + } else if (args.size() == 1) { + if (!hasPermission(sender) || !isPlayer(sender)) { + return; + } + + Player orig = Bukkit.getPlayer(args.get(0)); + + if (orig == null || !orig.isOnline()) { + sender.sendMessage(ChatColor.RED + "Player not found."); + return; + } + + + boolean boundAll = assignAbilities(sender, orig, (Player) sender, true); + sender.sendMessage(ChatColor.GREEN + "Your bound abilities have been made the same as " + ChatColor.YELLOW + orig.getName()); + if (!boundAll) { + sender.sendMessage(ChatColor.RED + "Some abilities were not bound because you cannot bend the required element."); + } + } else if (args.size() == 2) { + if (!sender.hasPermission("copy.assign")) { + sender.sendMessage(ChatColor.RED + "You don't have permission to do that."); + return; + } + + Player orig = ProjectKorra.plugin.getServer().getPlayer(args.get(0)); + Player target = ProjectKorra.plugin.getServer().getPlayer(args.get(1)); + + if ((orig == null || !orig.isOnline()) || (target == null || !target.isOnline())) { + sender.sendMessage(ChatColor.RED + "That player is not online."); + return; + } + + boolean boundAll = assignAbilities(sender, orig, target, false); + sender.sendMessage(ChatColor.GREEN + "The bound abilities of " + ChatColor.YELLOW + target.getName() + ChatColor.GREEN + " have been been made the same as " + ChatColor.YELLOW + orig.getName()); + target.sendMessage(ChatColor.GREEN + "Your bound abilities have been made the same as " + ChatColor.YELLOW + orig.getName()); + if (!boundAll) { + sender.sendMessage(ChatColor.RED + "Some abilities were not bound because you cannot bend the required element."); + } + } + } + + @SuppressWarnings("unchecked") + private boolean assignAbilities(CommandSender sender, Player player, Player player2, boolean self) { + + BendingPlayer orig = GeneralMethods.getBendingPlayer(player.getName()); + BendingPlayer target = GeneralMethods.getBendingPlayer(player2.getName()); + + if (orig == null) { + GeneralMethods.createBendingPlayer(((Player) player).getUniqueId(), player.getName()); + orig = GeneralMethods.getBendingPlayer(player.getName()); + } + if (target == null) { + GeneralMethods.createBendingPlayer(((Player) player2).getUniqueId(), player2.getName()); + target = GeneralMethods.getBendingPlayer(player2.getName()); + } + if (orig.isPermaRemoved()) { + if (self) { + player.sendMessage(ChatColor.RED + "Your bending was permanently removed."); + } else { + sender.sendMessage(ChatColor.RED + "That players bending was permanently removed."); + } + return false; + } + + HashMap abilities = (HashMap) orig.getAbilities().clone(); + boolean boundAll = true; + for (int i = 1; i <= 9; i++) { + if (!GeneralMethods.canBend(player2.getName(), abilities.get(i))) { + abilities.remove(i); + boundAll = false; + } + } + target.setAbilities(abilities); + return boundAll; + } + +} diff --git a/src/com/projectkorra/projectkorra/command/PresetCommand.java b/src/com/projectkorra/projectkorra/command/PresetCommand.java index c3ef4b7a..a9d28c9c 100644 --- a/src/com/projectkorra/projectkorra/command/PresetCommand.java +++ b/src/com/projectkorra/projectkorra/command/PresetCommand.java @@ -5,6 +5,10 @@ import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.multiability.MultiAbilityManager; import com.projectkorra.projectkorra.object.Preset; + + + + import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -29,6 +33,7 @@ public class PresetCommand extends PKCommand { super("preset", "/bending preset create|bind|list|delete [name]", "This command manages Presets, which are saved bindings. Use /bending preset list to view your existing presets, use /bending [create|delete] [name] to manage your presets, and use /bending bind [name] to bind an existing preset.", new String[] { "preset", "presets", "pre", "set", "p" }); } + @SuppressWarnings("unchecked") @Override public void execute(CommandSender sender, List args) { if (!isPlayer(sender) || !correctLength(sender, args.size(), 1, 3)) { @@ -128,9 +133,11 @@ public class PresetCommand extends PKCommand { } BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); - if (bPlayer == null) + if (bPlayer == null) { return; - HashMap abilities = bPlayer.getAbilities(); + } + HashMap abilities = (HashMap) bPlayer.getAbilities().clone(); + Preset preset = new Preset(player.getUniqueId(), name, abilities); preset.save(player); sender.sendMessage(ChatColor.GREEN + "Created preset with the name: " + ChatColor.YELLOW + name); diff --git a/src/com/projectkorra/projectkorra/command/WhoCommand.java b/src/com/projectkorra/projectkorra/command/WhoCommand.java index 16cf7f06..9db07a82 100644 --- a/src/com/projectkorra/projectkorra/command/WhoCommand.java +++ b/src/com/projectkorra/projectkorra/command/WhoCommand.java @@ -80,7 +80,7 @@ public class WhoCommand extends PKCommand { List players = new ArrayList(); for (Player player : Bukkit.getOnlinePlayers()) { String playerName = player.getName(); - String result = ChatColor.WHITE + playerName; + String result = ""; BendingPlayer bp = GeneralMethods.getBendingPlayer(playerName); if (bp == null) { GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); @@ -119,11 +119,14 @@ public class WhoCommand extends PKCommand { } if (staff.containsKey(player.getUniqueId().toString())) { if (result == "") { - result = ChatColor.WHITE + playerName + staff.get(player.getUniqueId().toString()); + result = ChatColor.WHITE + playerName + " | " + staff.get(player.getUniqueId().toString()); } else { result = result + ChatColor.WHITE + " | " + staff.get(player.getUniqueId().toString()); } } + if (result == ""){ + result = ChatColor.WHITE + playerName; + } players.add(result); } if (players.isEmpty()) { diff --git a/src/com/projectkorra/projectkorra/configuration/ConfigManager.java b/src/com/projectkorra/projectkorra/configuration/ConfigManager.java index 6f6fad61..9bcd1018 100644 --- a/src/com/projectkorra/projectkorra/configuration/ConfigManager.java +++ b/src/com/projectkorra/projectkorra/configuration/ConfigManager.java @@ -356,6 +356,7 @@ public class ConfigManager { config.addDefault("Abilities.Water.HealingWaters.Enabled", true); config.addDefault("Abilities.Water.HealingWaters.Description", "To use, the bender must be at least partially submerged in water. " + "If the user is not sneaking, this ability will automatically begin " + "working provided the user has it selected. If the user is sneaking, " + "he/she is channeling the healing to their target in front of them. " + "In order for this channel to be successful, the user and the target must " + "be at least partially submerged in water."); + config.addDefault("Abilities.Water.HealingWaters.ShiftRequired", true); config.addDefault("Abilities.Water.HealingWaters.Radius", 5); config.addDefault("Abilities.Water.HealingWaters.Interval", 750); config.addDefault("Abilities.Water.HealingWaters.Power", 1); @@ -365,9 +366,6 @@ public class ConfigManager { config.addDefault("Abilities.Water.IceBlast.Range", 20); config.addDefault("Abilities.Water.IceBlast.Cooldown", 1500); config.addDefault("Abilities.Water.IceBlast.SelectRange", 12); - config.addDefault("Abilities.Water.IceBlast.AutoSourcing.Enabled", true); - config.addDefault("Abilities.Water.IceBlast.AutoSourcing.Cooldown", 1500); - config.addDefault("Abilities.Water.IceBlast.AutoSourcing.SelectRange", 5); config.addDefault("Abilities.Water.IceBlast.Description", "This ability offers a powerful ice utility for Waterbenders. It can be used to fire an explosive burst of ice at an opponent, spraying ice and snow around it. To use, simply tap sneak (Default: Shift) while targeting a block of ice to select it as a source. From there, you can just left click to send the blast off at your opponent."); config.addDefault("Abilities.Water.IceBlast.DynamicSourcing.Enabled", true); @@ -423,7 +421,7 @@ public class ConfigManager { config.addDefault("Abilities.Water.Surge.Wave.DynamicSourcing.Enabled", true); config.addDefault("Abilities.Water.Surge.VerticalPush", 0.2); config.addDefault("Abilities.Water.Surge.Wall.Radius", 2); - config.addDefault("Abilities.Water.Surge.Wall.SelectRange", 6); + config.addDefault("Abilities.Water.Surge.Wall.SelectRange", 5); config.addDefault("Abilities.Water.Surge.Wall.DynamicSourcing.Enabled", true); config.addDefault("Abilities.Water.Torrent.Enabled", true); @@ -431,6 +429,7 @@ public class ConfigManager { config.addDefault("Abilities.Water.Torrent.Range", 25); config.addDefault("Abilities.Water.Torrent.DeflectDamage", 1); config.addDefault("Abilities.Water.Torrent.Damage", 3); + config.addDefault("Abilities.Water.Torrent.Cooldown", 1500); config.addDefault("Abilities.Water.Torrent.Wave.Radius", 15); config.addDefault("Abilities.Water.Torrent.Wave.Knockback", 1.5); config.addDefault("Abilities.Water.Torrent.Wave.Height", 1); diff --git a/src/com/projectkorra/projectkorra/earthbending/EarthMethods.java b/src/com/projectkorra/projectkorra/earthbending/EarthMethods.java index 026e4229..d7d37ab5 100644 --- a/src/com/projectkorra/projectkorra/earthbending/EarthMethods.java +++ b/src/com/projectkorra/projectkorra/earthbending/EarthMethods.java @@ -650,8 +650,8 @@ public class EarthMethods { Block block = info.getState().getBlock(); if (block.getType() != Material.AIR && !block.isLiquid()) { if (force || !movedearth.containsKey(block)) { - GeneralMethods.dropItems(block, - GeneralMethods.getDrops(block, info.getState().getType(), info.getState().getRawData(), pickaxe)); +// GeneralMethods.dropItems(block, +// GeneralMethods.getDrops(block, info.getState().getType(), info.getState().getRawData(), pickaxe)); tempair.remove(i); } else { info.setTime(info.getTime() + 10000); diff --git a/src/com/projectkorra/projectkorra/earthbending/EarthSmash.java b/src/com/projectkorra/projectkorra/earthbending/EarthSmash.java index 4b45421a..115d1a25 100644 --- a/src/com/projectkorra/projectkorra/earthbending/EarthSmash.java +++ b/src/com/projectkorra/projectkorra/earthbending/EarthSmash.java @@ -10,6 +10,7 @@ import com.projectkorra.projectkorra.util.ParticleEffect; import com.projectkorra.projectkorra.util.TempBlock; import com.projectkorra.projectkorra.waterbending.WaterMethods; +import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; @@ -105,14 +106,23 @@ public class EarthSmash { return; } - EarthSmash grabbedSmash = aimingAtSmashCheck(player, State.LIFTED); + EarthSmash grabbedSmash = aimingAtSmashCheck(player, null); if (grabbedSmash == null) { - grabbedSmash = aimingAtSmashCheck(player, State.SHOT); - } - if (grabbedSmash != null) { if (bplayer.isOnCooldown("EarthSmash")) { return; } + + grabbedSmash = aimingAtSmashCheck(player, State.SHOT); + } + if (grabbedSmash != null && grabbedSmash.state == State.LIFTED) { + + grabbedSmash.state = State.GRABBED; + grabbedSmash.grabbedRange = grabbedSmash.loc.distance(player.getEyeLocation()); + grabbedSmash.player = player; + return; + } + if (grabbedSmash != null && grabbedSmash.state == State.SHOT) { + grabbedSmash.state = State.GRABBED; grabbedSmash.grabbedRange = grabbedSmash.loc.distance(player.getEyeLocation()); grabbedSmash.player = player; diff --git a/src/com/projectkorra/projectkorra/object/Preset.java b/src/com/projectkorra/projectkorra/object/Preset.java index 47f467a5..805e2599 100644 --- a/src/com/projectkorra/projectkorra/object/Preset.java +++ b/src/com/projectkorra/projectkorra/object/Preset.java @@ -6,7 +6,7 @@ import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.configuration.ConfigManager; import com.projectkorra.projectkorra.storage.DBConnection; -import org.bukkit.Bukkit; + import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; @@ -42,9 +42,9 @@ public class Preset { static String updateQuery1 = "UPDATE pk_presets SET slot"; static String updateQuery2 = " = ? WHERE uuid = ? AND name = ?"; - public UUID uuid; - public HashMap abilities; - public String name; + private UUID uuid; + private HashMap abilities; + private String name; /** * Creates a new {@link Preset} @@ -138,7 +138,8 @@ public class Preset { if (!presets.containsKey(player.getUniqueId())) { return false; } - HashMap abilities = preset.abilities; + @SuppressWarnings("unchecked") + HashMap abilities = (HashMap) preset.abilities.clone(); boolean boundAll = true; for (int i = 1; i <= 9; i++) { if (!GeneralMethods.canBend(player.getName(), abilities.get(i))) { @@ -158,12 +159,14 @@ public class Preset { * @return true if the Preset exists, false otherwise */ public static boolean presetExists(Player player, String name) { - if (!presets.containsKey(player.getUniqueId())) + if (!presets.containsKey(player.getUniqueId())) { return false; + } boolean exists = false; for (Preset preset : presets.get(player.getUniqueId())) { - if (preset.name.equalsIgnoreCase(name)) + if (preset.name.equalsIgnoreCase(name)) { exists = true; + } } return exists; } @@ -176,13 +179,16 @@ public class Preset { * @return The Preset, if it exists, or null otherwise */ public static Preset getPreset(Player player, String name) { - if (!presets.containsKey(player.getUniqueId())) + if (!presets.containsKey(player.getUniqueId())) { return null; + } for (Preset preset : presets.get(player.getUniqueId())) { - if (preset.name.equalsIgnoreCase(name)) + if (preset.name.equalsIgnoreCase(name)) { return preset; + } } return null; + } public static void loadExternalPresets() { diff --git a/src/com/projectkorra/projectkorra/waterbending/FreezeMelt.java b/src/com/projectkorra/projectkorra/waterbending/FreezeMelt.java index f65666b3..d544f9ac 100644 --- a/src/com/projectkorra/projectkorra/waterbending/FreezeMelt.java +++ b/src/com/projectkorra/projectkorra/waterbending/FreezeMelt.java @@ -22,23 +22,22 @@ public class FreezeMelt { public static final int defaultradius = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.PhaseChange.Radius"); private static long cooldown = ProjectKorra.plugin.getConfig().getLong("Abilities.Water.PhaseChange.Cooldown"); - public static final int OVERLOADING_LIMIT = 200; - public static boolean overloading = false; - public static int overloadCounter = 0; public FreezeMelt(Player player) { BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); - if (!WaterMethods.canIcebend(player)) + + if (!WaterMethods.canIcebend(player)) { return; - if (bPlayer.isOnCooldown("PhaseChange")) + } + if (bPlayer.isOnCooldown("PhaseChange")) { return; + } bPlayer.addCooldown("PhaseChange", cooldown); int range = (int) WaterMethods.waterbendingNightAugment(defaultrange, player.getWorld()); int radius = (int) WaterMethods.waterbendingNightAugment(defaultradius, player.getWorld()); if (AvatarState.isAvatarState(player)) { range = AvatarState.getValue(range); - // radius = AvatarState.getValue(radius); } Location location = GeneralMethods.getTargetedLocation(player, range); @@ -47,28 +46,33 @@ public class FreezeMelt { freeze(player, block); } } - } private static boolean isFreezable(Player player, Block block) { - if (GeneralMethods.isRegionProtectedFromBuild(player, "PhaseChange", block.getLocation())) + if (GeneralMethods.isRegionProtectedFromBuild(player, "PhaseChange", block.getLocation())) { return false; - if (block.getType() == Material.WATER || block.getType() == Material.STATIONARY_WATER) - if (WaterManipulation.canPhysicsChange(block) && !TempBlock.isTempBlock(block)) + } + if (block.getType() == Material.WATER || block.getType() == Material.STATIONARY_WATER) { + if (WaterManipulation.canPhysicsChange(block) && !TempBlock.isTempBlock(block)) { return true; + } + } return false; } @SuppressWarnings("deprecation") static void freeze(Player player, Block block) { - if (GeneralMethods.isRegionProtectedFromBuild(player, "PhaseChange", block.getLocation())) + if (GeneralMethods.isRegionProtectedFromBuild(player, "PhaseChange", block.getLocation())) { return; - if (TempBlock.isTempBlock(block)) + } + if (TempBlock.isTempBlock(block)) { return; + } byte data = block.getData(); block.setType(Material.ICE); - if(frozenblocks.size() % 50 == 0) - WaterMethods.playIcebendingSound(block.getLocation()); + if(frozenblocks.size() % 50 == 0) { + WaterMethods.playIcebendingSound(block.getLocation()); + } frozenblocks.put(block, data); } @@ -83,62 +87,36 @@ public class FreezeMelt { } public static void handleFrozenBlocks() { - int size = frozenblocks.keySet().size(); - overloadCounter++; - overloadCounter %= 10; - if (overloadCounter == 0) - overloading = size > OVERLOADING_LIMIT ? true : false; - - // We only want to run this method once every 10 ticks if we are overloading. - if (overloading && overloadCounter != 0) - return; - - if (overloading) { - int i = 0; - for (Block block : frozenblocks.keySet()) { - final Block fblock = block; - new BukkitRunnable() { - public void run() { - if (canThaw(fblock)) - thaw(fblock); - } - }.runTaskLater(ProjectKorra.plugin, i % 10); - i++; - } - } else { - for (Block block : frozenblocks.keySet()) { - if (canThaw(block)) - thaw(block); - } - } + new BukkitRunnable() { + public void run() { + canThaw(); + } + }.runTaskLater(ProjectKorra.plugin, 100); } - - public static boolean canThaw(Block block) { - if (frozenblocks.containsKey(block)) { + + public static void canThaw() { + for (Block block : frozenblocks.keySet()) { + int canThaw = 0; for (Player player : block.getWorld().getPlayers()) { - if (!player.isOnline()) { - return true; + double range = WaterMethods.waterbendingNightAugment(defaultrange, player.getWorld()); + if (AvatarState.isAvatarState(player)) { + range = AvatarState.getValue(range); } - if (GeneralMethods.getBoundAbility(player) == null) { - return true; + + if (player == null || !player.isOnline()) { + canThaw++; } - if (GeneralMethods.getBoundAbility(player).equalsIgnoreCase("OctopusForm")) { - if (block.getLocation().distance(player.getLocation()) <= OctopusForm.RADIUS + 2) - return false; + else if (!GeneralMethods.canBend(player.getName(), "PhaseChange")) { + canThaw++; } - if (GeneralMethods.canBend(player.getName(), "PhaseChange")) { - double range = WaterMethods.waterbendingNightAugment(defaultrange, player.getWorld()); - if (AvatarState.isAvatarState(player)) { - range = AvatarState.getValue(range); - } - if (block.getLocation().distance(player.getLocation()) <= range) - return false; + else if (block.getLocation().distance(player.getLocation()) > range) { + canThaw++; } } + if(canThaw >= block.getWorld().getPlayers().size()) { + thaw(block); + } } - if (!WaterManipulation.canPhysicsChange(block)) - return false; - return true; } @SuppressWarnings("deprecation") diff --git a/src/com/projectkorra/projectkorra/waterbending/HealingWaters.java b/src/com/projectkorra/projectkorra/waterbending/HealingWaters.java index 0a009602..2e267960 100644 --- a/src/com/projectkorra/projectkorra/waterbending/HealingWaters.java +++ b/src/com/projectkorra/projectkorra/waterbending/HealingWaters.java @@ -1,4 +1,4 @@ -package com.projectkorra.projectkorra.waterbending; + package com.projectkorra.projectkorra.waterbending; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; @@ -18,6 +18,7 @@ import java.util.ArrayList; public class HealingWaters { + private static final boolean shift = ProjectKorra.plugin.getConfig().getBoolean("Abilities.Water.HealingWaters.ShiftRequired"); private static final double range = ProjectKorra.plugin.getConfig().getDouble("Abilities.Water.HealingWaters.Radius"); private static final long interval = ProjectKorra.plugin.getConfig().getLong("Abilities.Water.HealingWaters.Interval"); private static final int power = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.HealingWaters.Power"); @@ -39,17 +40,16 @@ public class HealingWaters { private static void heal(Player player) { if (inWater(player)) { - if (player.isSneaking()) { - Entity entity = GeneralMethods.getTargetedEntity(player, range, new ArrayList()); - if (entity instanceof LivingEntity && inWater(entity)) { - giveHPToEntity((LivingEntity) entity); - } - } else { + Entity entity = GeneralMethods.getTargetedEntity(player, range, new ArrayList()); + if (entity instanceof LivingEntity && inWater(entity) && player.isSneaking()) { + giveHPToEntity((LivingEntity) entity); + } else if ((player.isSneaking() && shift) || (player.isSneaking() && shift)){ giveHP(player); } } } + private static void giveHPToEntity(LivingEntity le) { if (!le.isDead() && le.getHealth() < le.getMaxHealth()) { applyHealingToEntity(le); diff --git a/src/com/projectkorra/projectkorra/waterbending/IceBlast.java b/src/com/projectkorra/projectkorra/waterbending/IceBlast.java index 20b602d8..ef3fc9e8 100644 --- a/src/com/projectkorra/projectkorra/waterbending/IceBlast.java +++ b/src/com/projectkorra/projectkorra/waterbending/IceBlast.java @@ -31,13 +31,9 @@ public class IceBlast { private static double defaultrange = ProjectKorra.plugin.getConfig().getDouble("Abilities.Water.IceBlast.Range"); private static int DAMAGE = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.IceBlast.Damage"); private static int COOLDOWN = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.IceBlast.Cooldown"); - private static int autoSelectRange = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.IceBlast.AutoSourcing.SelectRange"); private static int selectRange = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.IceBlast.SelectRange"); - private static boolean auto = ProjectKorra.plugin.getConfig().getBoolean("Abilities.Water.IceBlast.AutoSourcing.Enabled"); - private static long autocooldown = ProjectKorra.plugin.getConfig().getLong("Abilities.Water.IceBlast.AutoSourcing.Cooldown"); private static boolean dynamic = ProjectKorra.plugin.getConfig().getBoolean("Abilities.Water.IceBlast.DynamicSourcing.Enabled"); - private boolean isAuto; private static int ID = Integer.MIN_VALUE; private static final long interval = 20; @@ -71,13 +67,8 @@ public class IceBlast { block(player); range = WaterMethods.waterbendingNightAugment(defaultrange, player.getWorld()); this.player = player; - Block sourceblock = BlockSource.getWaterSourceBlock(player, autoSelectRange, selectRange, ClickType.SHIFT_DOWN, auto, dynamic, false, false, + Block sourceblock = BlockSource.getWaterSourceBlock(player, selectRange, selectRange, ClickType.SHIFT_DOWN, false, dynamic, false, false, WaterMethods.canIcebend(player), false); - if (BlockSource.isAuto(sourceblock)) { - isAuto = true; - } else { - isAuto = false; - } if (sourceblock == null) { return; @@ -174,11 +165,7 @@ public class IceBlast { if (player.isOnline()) { BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); if (bPlayer != null) { - if (isAuto) { - bPlayer.addCooldown("IceBlast", autocooldown); - } else { - bPlayer.addCooldown("IceBlast", cooldown); - } + bPlayer.addCooldown("IceBlast", cooldown); } } instances.remove(id); diff --git a/src/com/projectkorra/projectkorra/waterbending/Torrent.java b/src/com/projectkorra/projectkorra/waterbending/Torrent.java index 618d26f1..7feda4c0 100644 --- a/src/com/projectkorra/projectkorra/waterbending/Torrent.java +++ b/src/com/projectkorra/projectkorra/waterbending/Torrent.java @@ -35,6 +35,7 @@ public class Torrent { static double RANGE = config.getInt("Abilities.Water.Torrent.Range"); private static int defaultrange = 20; private static int DAMAGE = config.getInt("Abilities.Water.Torrent.Damage"); + private static long cooldown = config.getLong("Abilities.Water.Torrent.Cooldown"); private static int DEFLECT_DAMAGE = config.getInt("Abilities.Water.Torrent.DeflectDamage"); private static int maxlayer = 3; private static double factor = 1; @@ -44,12 +45,10 @@ public class Torrent { private static final byte full = 0x0; private static int selectRange = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.Torrent.SelectRange"); - private static int autoSelectRange = ProjectKorra.plugin.getConfig() - .getInt("Abilities.Water.Torrent.AutoSourcing.SelectRange"); + private static int autoSelectRange = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.Torrent.AutoSourcing.SelectRange"); private static boolean auto = ProjectKorra.plugin.getConfig().getBoolean("Abilities.Water.Torrent.AutoSourcing.Enabled"); private static long autocooldown = ProjectKorra.plugin.getConfig().getLong("Abilities.Water.Torrent.AutoSourcing.Cooldown"); - private static boolean dynamic = ProjectKorra.plugin.getConfig() - .getBoolean("Abilities.Water.Torrent.DynamicSourcing.Enabled"); + private static boolean dynamic = ProjectKorra.plugin.getConfig().getBoolean("Abilities.Water.Torrent.DynamicSourcing.Enabled"); private Block sourceblock; private TempBlock source; @@ -85,6 +84,12 @@ public class Torrent { } } this.player = player; + BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); + + if(bPlayer.isOnCooldown("Torrent")) { + return; + } + time = System.currentTimeMillis(); sourceblock = BlockSource.getWaterSourceBlock(player, autoSelectRange, selectRange, ClickType.LEFT_CLICK, auto, dynamic, true, true, WaterMethods.canIcebend(player), WaterMethods.canPlantbend(player)); @@ -94,6 +99,7 @@ public class Torrent { } else { isAuto = false; } + sourceselected = true; instances.put(player, this); } @@ -174,13 +180,14 @@ public class Torrent { returnWater(source.getLocation()); return; } + BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); Location eyeloc = player.getEyeLocation(); double startangle = player.getEyeLocation().getDirection().angle(new Vector(1, 0, 0)); double dx = radius * Math.cos(startangle); double dy = 0; double dz = radius * Math.sin(startangle); Location setup = eyeloc.clone().add(dx, dy, dz); - + if (!location.getWorld().equals(player.getWorld())) { remove(); return; @@ -190,6 +197,12 @@ public class Torrent { remove(); return; } + + if (isAuto) { + bPlayer.addCooldown("Torrent", autocooldown); + } else { + bPlayer.addCooldown("Torrent", cooldown); + } if (location.getBlockY() > setup.getBlockY()) { Vector direction = new Vector(0, -1, 0); @@ -469,12 +482,6 @@ public class Torrent { launchblocks.clear(); if (source != null) source.revertBlock(); - BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); - if (isAuto) { - bPlayer.addCooldown("Torrent", autocooldown); - } else { - bPlayer.addCooldown("Torrent", GeneralMethods.getGlobalCooldown()); - } instances.remove(player); } diff --git a/src/com/projectkorra/projectkorra/waterbending/WaterCombo.java b/src/com/projectkorra/projectkorra/waterbending/WaterCombo.java index 87a6d1e6..df5aa2ee 100644 --- a/src/com/projectkorra/projectkorra/waterbending/WaterCombo.java +++ b/src/com/projectkorra/projectkorra/waterbending/WaterCombo.java @@ -10,8 +10,6 @@ import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.earthbending.EarthMethods; import com.projectkorra.projectkorra.firebending.FireCombo; import com.projectkorra.projectkorra.firebending.FireCombo.FireComboStream; -import com.projectkorra.projectkorra.util.BlockSource; -import com.projectkorra.projectkorra.util.ClickType; import com.projectkorra.projectkorra.util.ParticleEffect; import com.projectkorra.projectkorra.util.TempBlock; @@ -269,12 +267,11 @@ public class WaterCombo { remove(); return; } - Block waterBlock = BlockSource.getWaterSourceBlock(player, icebullet_selectRange, icebullet_selectRange, ClickType.SHIFT_DOWN, false, false, true, true, WaterMethods.canIcebend(player), WaterMethods.canPlantbend(player)); + Block waterBlock = WaterMethods.getRandomWaterBlock(player, player.getLocation(), (int) range, true, WaterMethods.canIcebend(player), WaterMethods.canPlantbend(player)); if (waterBlock == null) { remove(); return; } - //IceBulletisAuto = false; this.time = 0; origin = waterBlock.getLocation(); currentLoc = origin.clone(); diff --git a/src/com/projectkorra/projectkorra/waterbending/WaterManipulation.java b/src/com/projectkorra/projectkorra/waterbending/WaterManipulation.java index bb8b1a56..50fe8da2 100644 --- a/src/com/projectkorra/projectkorra/waterbending/WaterManipulation.java +++ b/src/com/projectkorra/projectkorra/waterbending/WaterManipulation.java @@ -86,6 +86,9 @@ public class WaterManipulation { water.add((byte) 9); } this.player = player; + BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); + if (bPlayer.isOnCooldown("WaterManipulation")) + return; if (prepare()) { id = ID; instances.put(id, this); @@ -534,9 +537,6 @@ public class WaterManipulation { public static void moveWater(Player player) { BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); - if (bPlayer.isOnCooldown("WaterManipulation")) - return; - if (prepared.containsKey(player)) { if (instances.containsKey(prepared.get(player))) { instances.get(prepared.get(player)).moveWater(); diff --git a/src/plugin.yml b/src/plugin.yml index 6a62862b..4d5521f5 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -35,6 +35,7 @@ permissions: bending.command.check: true bending.command.preset.bind.external: true bending.command.preset.bind.external.other: true + bending.command.copy.assign: true bending.admin.debug: true bending.admin.remove: true bending.player: @@ -44,6 +45,7 @@ permissions: bending.command.bind: true bending.command.display: true bending.command.toggle: true + bending.command.copy: true bending.command.choose: true bending.command.version: true bending.command.help: true