Merge remote-tracking branch 'upstream/master'

This commit is contained in:
jedk1 2016-01-01 13:21:25 +00:00
commit 77bd84f35d
15 changed files with 223 additions and 125 deletions

View file

@ -80,6 +80,7 @@ public class Commands {
PluginCommand projectkorra = plugin.getCommand("projectkorra"); PluginCommand projectkorra = plugin.getCommand("projectkorra");
new AddCommand(); new AddCommand();
new BindCommand(); new BindCommand();
new CopyCommand();
new CheckCommand(); new CheckCommand();
new ChooseCommand(); new ChooseCommand();
new ClearCommand(); new ClearCommand();

View file

@ -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> [Player]", "This command will allow the user to copy the binds of another player either for himself or assign them to <Player> if specified.", new String[] { "copy", "co" });
}
@Override
public void execute(CommandSender sender, List<String> 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<Integer, String> abilities = (HashMap<Integer, String>) 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;
}
}

View file

@ -5,6 +5,10 @@ import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ability.multiability.MultiAbilityManager; import com.projectkorra.projectkorra.ability.multiability.MultiAbilityManager;
import com.projectkorra.projectkorra.object.Preset; import com.projectkorra.projectkorra.object.Preset;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -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" }); 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 @Override
public void execute(CommandSender sender, List<String> args) { public void execute(CommandSender sender, List<String> args) {
if (!isPlayer(sender) || !correctLength(sender, args.size(), 1, 3)) { if (!isPlayer(sender) || !correctLength(sender, args.size(), 1, 3)) {
@ -128,9 +133,11 @@ public class PresetCommand extends PKCommand {
} }
BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName());
if (bPlayer == null) if (bPlayer == null) {
return; return;
HashMap<Integer, String> abilities = bPlayer.getAbilities(); }
HashMap<Integer, String> abilities = (HashMap<Integer, String>) bPlayer.getAbilities().clone();
Preset preset = new Preset(player.getUniqueId(), name, abilities); Preset preset = new Preset(player.getUniqueId(), name, abilities);
preset.save(player); preset.save(player);
sender.sendMessage(ChatColor.GREEN + "Created preset with the name: " + ChatColor.YELLOW + name); sender.sendMessage(ChatColor.GREEN + "Created preset with the name: " + ChatColor.YELLOW + name);

View file

@ -80,7 +80,7 @@ public class WhoCommand extends PKCommand {
List<String> players = new ArrayList<String>(); List<String> players = new ArrayList<String>();
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
String playerName = player.getName(); String playerName = player.getName();
String result = ChatColor.WHITE + playerName; String result = "";
BendingPlayer bp = GeneralMethods.getBendingPlayer(playerName); BendingPlayer bp = GeneralMethods.getBendingPlayer(playerName);
if (bp == null) { if (bp == null) {
GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName());
@ -119,11 +119,14 @@ public class WhoCommand extends PKCommand {
} }
if (staff.containsKey(player.getUniqueId().toString())) { if (staff.containsKey(player.getUniqueId().toString())) {
if (result == "") { if (result == "") {
result = ChatColor.WHITE + playerName + staff.get(player.getUniqueId().toString()); result = ChatColor.WHITE + playerName + " | " + staff.get(player.getUniqueId().toString());
} else { } else {
result = result + ChatColor.WHITE + " | " + staff.get(player.getUniqueId().toString()); result = result + ChatColor.WHITE + " | " + staff.get(player.getUniqueId().toString());
} }
} }
if (result == ""){
result = ChatColor.WHITE + playerName;
}
players.add(result); players.add(result);
} }
if (players.isEmpty()) { if (players.isEmpty()) {

View file

@ -356,6 +356,7 @@ public class ConfigManager {
config.addDefault("Abilities.Water.HealingWaters.Enabled", true); 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.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.Radius", 5);
config.addDefault("Abilities.Water.HealingWaters.Interval", 750); config.addDefault("Abilities.Water.HealingWaters.Interval", 750);
config.addDefault("Abilities.Water.HealingWaters.Power", 1); 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.Range", 20);
config.addDefault("Abilities.Water.IceBlast.Cooldown", 1500); config.addDefault("Abilities.Water.IceBlast.Cooldown", 1500);
config.addDefault("Abilities.Water.IceBlast.SelectRange", 12); 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.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); 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.Wave.DynamicSourcing.Enabled", true);
config.addDefault("Abilities.Water.Surge.VerticalPush", 0.2); config.addDefault("Abilities.Water.Surge.VerticalPush", 0.2);
config.addDefault("Abilities.Water.Surge.Wall.Radius", 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.Surge.Wall.DynamicSourcing.Enabled", true);
config.addDefault("Abilities.Water.Torrent.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.Range", 25);
config.addDefault("Abilities.Water.Torrent.DeflectDamage", 1); config.addDefault("Abilities.Water.Torrent.DeflectDamage", 1);
config.addDefault("Abilities.Water.Torrent.Damage", 3); 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.Radius", 15);
config.addDefault("Abilities.Water.Torrent.Wave.Knockback", 1.5); config.addDefault("Abilities.Water.Torrent.Wave.Knockback", 1.5);
config.addDefault("Abilities.Water.Torrent.Wave.Height", 1); config.addDefault("Abilities.Water.Torrent.Wave.Height", 1);

View file

@ -650,8 +650,8 @@ public class EarthMethods {
Block block = info.getState().getBlock(); Block block = info.getState().getBlock();
if (block.getType() != Material.AIR && !block.isLiquid()) { if (block.getType() != Material.AIR && !block.isLiquid()) {
if (force || !movedearth.containsKey(block)) { if (force || !movedearth.containsKey(block)) {
GeneralMethods.dropItems(block, // GeneralMethods.dropItems(block,
GeneralMethods.getDrops(block, info.getState().getType(), info.getState().getRawData(), pickaxe)); // GeneralMethods.getDrops(block, info.getState().getType(), info.getState().getRawData(), pickaxe));
tempair.remove(i); tempair.remove(i);
} else { } else {
info.setTime(info.getTime() + 10000); info.setTime(info.getTime() + 10000);

View file

@ -10,6 +10,7 @@ import com.projectkorra.projectkorra.util.ParticleEffect;
import com.projectkorra.projectkorra.util.TempBlock; import com.projectkorra.projectkorra.util.TempBlock;
import com.projectkorra.projectkorra.waterbending.WaterMethods; import com.projectkorra.projectkorra.waterbending.WaterMethods;
import org.bukkit.Bukkit;
import org.bukkit.Effect; import org.bukkit.Effect;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -105,14 +106,23 @@ public class EarthSmash {
return; return;
} }
EarthSmash grabbedSmash = aimingAtSmashCheck(player, State.LIFTED); EarthSmash grabbedSmash = aimingAtSmashCheck(player, null);
if (grabbedSmash == null) { if (grabbedSmash == null) {
grabbedSmash = aimingAtSmashCheck(player, State.SHOT);
}
if (grabbedSmash != null) {
if (bplayer.isOnCooldown("EarthSmash")) { if (bplayer.isOnCooldown("EarthSmash")) {
return; 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.state = State.GRABBED;
grabbedSmash.grabbedRange = grabbedSmash.loc.distance(player.getEyeLocation()); grabbedSmash.grabbedRange = grabbedSmash.loc.distance(player.getEyeLocation());
grabbedSmash.player = player; grabbedSmash.player = player;

View file

@ -6,7 +6,7 @@ import com.projectkorra.projectkorra.ProjectKorra;
import com.projectkorra.projectkorra.configuration.ConfigManager; import com.projectkorra.projectkorra.configuration.ConfigManager;
import com.projectkorra.projectkorra.storage.DBConnection; import com.projectkorra.projectkorra.storage.DBConnection;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
@ -42,9 +42,9 @@ public class Preset {
static String updateQuery1 = "UPDATE pk_presets SET slot"; static String updateQuery1 = "UPDATE pk_presets SET slot";
static String updateQuery2 = " = ? WHERE uuid = ? AND name = ?"; static String updateQuery2 = " = ? WHERE uuid = ? AND name = ?";
public UUID uuid; private UUID uuid;
public HashMap<Integer, String> abilities; private HashMap<Integer, String> abilities;
public String name; private String name;
/** /**
* Creates a new {@link Preset} * Creates a new {@link Preset}
@ -138,7 +138,8 @@ public class Preset {
if (!presets.containsKey(player.getUniqueId())) { if (!presets.containsKey(player.getUniqueId())) {
return false; return false;
} }
HashMap<Integer, String> abilities = preset.abilities; @SuppressWarnings("unchecked")
HashMap<Integer, String> abilities = (HashMap<Integer, String>) preset.abilities.clone();
boolean boundAll = true; boolean boundAll = true;
for (int i = 1; i <= 9; i++) { for (int i = 1; i <= 9; i++) {
if (!GeneralMethods.canBend(player.getName(), abilities.get(i))) { if (!GeneralMethods.canBend(player.getName(), abilities.get(i))) {
@ -158,13 +159,15 @@ public class Preset {
* @return true if the Preset exists, false otherwise * @return true if the Preset exists, false otherwise
*/ */
public static boolean presetExists(Player player, String name) { public static boolean presetExists(Player player, String name) {
if (!presets.containsKey(player.getUniqueId())) if (!presets.containsKey(player.getUniqueId())) {
return false; return false;
}
boolean exists = false; boolean exists = false;
for (Preset preset : presets.get(player.getUniqueId())) { for (Preset preset : presets.get(player.getUniqueId())) {
if (preset.name.equalsIgnoreCase(name)) if (preset.name.equalsIgnoreCase(name)) {
exists = true; exists = true;
} }
}
return exists; return exists;
} }
@ -176,13 +179,16 @@ public class Preset {
* @return The Preset, if it exists, or null otherwise * @return The Preset, if it exists, or null otherwise
*/ */
public static Preset getPreset(Player player, String name) { public static Preset getPreset(Player player, String name) {
if (!presets.containsKey(player.getUniqueId())) if (!presets.containsKey(player.getUniqueId())) {
return null; return null;
}
for (Preset preset : presets.get(player.getUniqueId())) { for (Preset preset : presets.get(player.getUniqueId())) {
if (preset.name.equalsIgnoreCase(name)) if (preset.name.equalsIgnoreCase(name)) {
return preset; return preset;
} }
}
return null; return null;
} }
public static void loadExternalPresets() { public static void loadExternalPresets() {

View file

@ -22,23 +22,22 @@ public class FreezeMelt {
public static final int defaultradius = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.PhaseChange.Radius"); 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"); 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) { public FreezeMelt(Player player) {
BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName());
if (!WaterMethods.canIcebend(player))
if (!WaterMethods.canIcebend(player)) {
return; return;
if (bPlayer.isOnCooldown("PhaseChange")) }
if (bPlayer.isOnCooldown("PhaseChange")) {
return; return;
}
bPlayer.addCooldown("PhaseChange", cooldown); bPlayer.addCooldown("PhaseChange", cooldown);
int range = (int) WaterMethods.waterbendingNightAugment(defaultrange, player.getWorld()); int range = (int) WaterMethods.waterbendingNightAugment(defaultrange, player.getWorld());
int radius = (int) WaterMethods.waterbendingNightAugment(defaultradius, player.getWorld()); int radius = (int) WaterMethods.waterbendingNightAugment(defaultradius, player.getWorld());
if (AvatarState.isAvatarState(player)) { if (AvatarState.isAvatarState(player)) {
range = AvatarState.getValue(range); range = AvatarState.getValue(range);
// radius = AvatarState.getValue(radius);
} }
Location location = GeneralMethods.getTargetedLocation(player, range); Location location = GeneralMethods.getTargetedLocation(player, range);
@ -47,28 +46,33 @@ public class FreezeMelt {
freeze(player, block); freeze(player, block);
} }
} }
} }
private static boolean isFreezable(Player player, Block 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; 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 true;
}
}
return false; return false;
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
static void freeze(Player player, Block block) { static void freeze(Player player, Block block) {
if (GeneralMethods.isRegionProtectedFromBuild(player, "PhaseChange", block.getLocation())) if (GeneralMethods.isRegionProtectedFromBuild(player, "PhaseChange", block.getLocation())) {
return; return;
if (TempBlock.isTempBlock(block)) }
if (TempBlock.isTempBlock(block)) {
return; return;
}
byte data = block.getData(); byte data = block.getData();
block.setType(Material.ICE); block.setType(Material.ICE);
if(frozenblocks.size() % 50 == 0) if(frozenblocks.size() % 50 == 0) {
WaterMethods.playIcebendingSound(block.getLocation()); WaterMethods.playIcebendingSound(block.getLocation());
}
frozenblocks.put(block, data); frozenblocks.put(block, data);
} }
@ -83,62 +87,36 @@ public class FreezeMelt {
} }
public static void handleFrozenBlocks() { 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() { new BukkitRunnable() {
public void run() { public void run() {
if (canThaw(fblock)) canThaw();
thaw(fblock);
}
}.runTaskLater(ProjectKorra.plugin, i % 10);
i++;
}
} else {
for (Block block : frozenblocks.keySet()) {
if (canThaw(block))
thaw(block);
}
} }
}.runTaskLater(ProjectKorra.plugin, 100);
} }
public static boolean canThaw(Block block) { public static void canThaw() {
if (frozenblocks.containsKey(block)) { for (Block block : frozenblocks.keySet()) {
int canThaw = 0;
for (Player player : block.getWorld().getPlayers()) { for (Player player : block.getWorld().getPlayers()) {
if (!player.isOnline()) {
return true;
}
if (GeneralMethods.getBoundAbility(player) == null) {
return true;
}
if (GeneralMethods.getBoundAbility(player).equalsIgnoreCase("OctopusForm")) {
if (block.getLocation().distance(player.getLocation()) <= OctopusForm.RADIUS + 2)
return false;
}
if (GeneralMethods.canBend(player.getName(), "PhaseChange")) {
double range = WaterMethods.waterbendingNightAugment(defaultrange, player.getWorld()); double range = WaterMethods.waterbendingNightAugment(defaultrange, player.getWorld());
if (AvatarState.isAvatarState(player)) { if (AvatarState.isAvatarState(player)) {
range = AvatarState.getValue(range); range = AvatarState.getValue(range);
} }
if (block.getLocation().distance(player.getLocation()) <= range)
return false; if (player == null || !player.isOnline()) {
canThaw++;
}
else if (!GeneralMethods.canBend(player.getName(), "PhaseChange")) {
canThaw++;
}
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") @SuppressWarnings("deprecation")

View file

@ -18,6 +18,7 @@ import java.util.ArrayList;
public class HealingWaters { 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 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 long interval = ProjectKorra.plugin.getConfig().getLong("Abilities.Water.HealingWaters.Interval");
private static final int power = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.HealingWaters.Power"); 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) { private static void heal(Player player) {
if (inWater(player)) { if (inWater(player)) {
if (player.isSneaking()) {
Entity entity = GeneralMethods.getTargetedEntity(player, range, new ArrayList<Entity>()); Entity entity = GeneralMethods.getTargetedEntity(player, range, new ArrayList<Entity>());
if (entity instanceof LivingEntity && inWater(entity)) { if (entity instanceof LivingEntity && inWater(entity) && player.isSneaking()) {
giveHPToEntity((LivingEntity) entity); giveHPToEntity((LivingEntity) entity);
} } else if ((player.isSneaking() && shift) || (player.isSneaking() && shift)){
} else {
giveHP(player); giveHP(player);
} }
} }
} }
private static void giveHPToEntity(LivingEntity le) { private static void giveHPToEntity(LivingEntity le) {
if (!le.isDead() && le.getHealth() < le.getMaxHealth()) { if (!le.isDead() && le.getHealth() < le.getMaxHealth()) {
applyHealingToEntity(le); applyHealingToEntity(le);

View file

@ -31,13 +31,9 @@ public class IceBlast {
private static double defaultrange = ProjectKorra.plugin.getConfig().getDouble("Abilities.Water.IceBlast.Range"); 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 DAMAGE = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.IceBlast.Damage");
private static int COOLDOWN = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.IceBlast.Cooldown"); 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 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 static boolean dynamic = ProjectKorra.plugin.getConfig().getBoolean("Abilities.Water.IceBlast.DynamicSourcing.Enabled");
private boolean isAuto;
private static int ID = Integer.MIN_VALUE; private static int ID = Integer.MIN_VALUE;
private static final long interval = 20; private static final long interval = 20;
@ -71,13 +67,8 @@ public class IceBlast {
block(player); block(player);
range = WaterMethods.waterbendingNightAugment(defaultrange, player.getWorld()); range = WaterMethods.waterbendingNightAugment(defaultrange, player.getWorld());
this.player = player; 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); WaterMethods.canIcebend(player), false);
if (BlockSource.isAuto(sourceblock)) {
isAuto = true;
} else {
isAuto = false;
}
if (sourceblock == null) { if (sourceblock == null) {
return; return;
@ -174,13 +165,9 @@ public class IceBlast {
if (player.isOnline()) { if (player.isOnline()) {
BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName());
if (bPlayer != null) { if (bPlayer != null) {
if (isAuto) {
bPlayer.addCooldown("IceBlast", autocooldown);
} else {
bPlayer.addCooldown("IceBlast", cooldown); bPlayer.addCooldown("IceBlast", cooldown);
} }
} }
}
instances.remove(id); instances.remove(id);
} }

View file

@ -35,6 +35,7 @@ public class Torrent {
static double RANGE = config.getInt("Abilities.Water.Torrent.Range"); static double RANGE = config.getInt("Abilities.Water.Torrent.Range");
private static int defaultrange = 20; private static int defaultrange = 20;
private static int DAMAGE = config.getInt("Abilities.Water.Torrent.Damage"); 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 DEFLECT_DAMAGE = config.getInt("Abilities.Water.Torrent.DeflectDamage");
private static int maxlayer = 3; private static int maxlayer = 3;
private static double factor = 1; private static double factor = 1;
@ -44,12 +45,10 @@ public class Torrent {
private static final byte full = 0x0; private static final byte full = 0x0;
private static int selectRange = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.Torrent.SelectRange"); private static int selectRange = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.Torrent.SelectRange");
private static int autoSelectRange = ProjectKorra.plugin.getConfig() private static int autoSelectRange = ProjectKorra.plugin.getConfig().getInt("Abilities.Water.Torrent.AutoSourcing.SelectRange");
.getInt("Abilities.Water.Torrent.AutoSourcing.SelectRange");
private static boolean auto = ProjectKorra.plugin.getConfig().getBoolean("Abilities.Water.Torrent.AutoSourcing.Enabled"); 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 long autocooldown = ProjectKorra.plugin.getConfig().getLong("Abilities.Water.Torrent.AutoSourcing.Cooldown");
private static boolean dynamic = ProjectKorra.plugin.getConfig() private static boolean dynamic = ProjectKorra.plugin.getConfig().getBoolean("Abilities.Water.Torrent.DynamicSourcing.Enabled");
.getBoolean("Abilities.Water.Torrent.DynamicSourcing.Enabled");
private Block sourceblock; private Block sourceblock;
private TempBlock source; private TempBlock source;
@ -85,6 +84,12 @@ public class Torrent {
} }
} }
this.player = player; this.player = player;
BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName());
if(bPlayer.isOnCooldown("Torrent")) {
return;
}
time = System.currentTimeMillis(); time = System.currentTimeMillis();
sourceblock = BlockSource.getWaterSourceBlock(player, autoSelectRange, selectRange, ClickType.LEFT_CLICK, auto, dynamic, sourceblock = BlockSource.getWaterSourceBlock(player, autoSelectRange, selectRange, ClickType.LEFT_CLICK, auto, dynamic,
true, true, WaterMethods.canIcebend(player), WaterMethods.canPlantbend(player)); true, true, WaterMethods.canIcebend(player), WaterMethods.canPlantbend(player));
@ -94,6 +99,7 @@ public class Torrent {
} else { } else {
isAuto = false; isAuto = false;
} }
sourceselected = true; sourceselected = true;
instances.put(player, this); instances.put(player, this);
} }
@ -174,6 +180,7 @@ public class Torrent {
returnWater(source.getLocation()); returnWater(source.getLocation());
return; return;
} }
BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName());
Location eyeloc = player.getEyeLocation(); Location eyeloc = player.getEyeLocation();
double startangle = player.getEyeLocation().getDirection().angle(new Vector(1, 0, 0)); double startangle = player.getEyeLocation().getDirection().angle(new Vector(1, 0, 0));
double dx = radius * Math.cos(startangle); double dx = radius * Math.cos(startangle);
@ -191,6 +198,12 @@ public class Torrent {
return; return;
} }
if (isAuto) {
bPlayer.addCooldown("Torrent", autocooldown);
} else {
bPlayer.addCooldown("Torrent", cooldown);
}
if (location.getBlockY() > setup.getBlockY()) { if (location.getBlockY() > setup.getBlockY()) {
Vector direction = new Vector(0, -1, 0); Vector direction = new Vector(0, -1, 0);
location = location.clone().add(direction); location = location.clone().add(direction);
@ -469,12 +482,6 @@ public class Torrent {
launchblocks.clear(); launchblocks.clear();
if (source != null) if (source != null)
source.revertBlock(); source.revertBlock();
BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName());
if (isAuto) {
bPlayer.addCooldown("Torrent", autocooldown);
} else {
bPlayer.addCooldown("Torrent", GeneralMethods.getGlobalCooldown());
}
instances.remove(player); instances.remove(player);
} }

View file

@ -10,8 +10,6 @@ import com.projectkorra.projectkorra.command.Commands;
import com.projectkorra.projectkorra.earthbending.EarthMethods; import com.projectkorra.projectkorra.earthbending.EarthMethods;
import com.projectkorra.projectkorra.firebending.FireCombo; import com.projectkorra.projectkorra.firebending.FireCombo;
import com.projectkorra.projectkorra.firebending.FireCombo.FireComboStream; 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.ParticleEffect;
import com.projectkorra.projectkorra.util.TempBlock; import com.projectkorra.projectkorra.util.TempBlock;
@ -269,12 +267,11 @@ public class WaterCombo {
remove(); remove();
return; 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) { if (waterBlock == null) {
remove(); remove();
return; return;
} }
//IceBulletisAuto = false;
this.time = 0; this.time = 0;
origin = waterBlock.getLocation(); origin = waterBlock.getLocation();
currentLoc = origin.clone(); currentLoc = origin.clone();

View file

@ -86,6 +86,9 @@ public class WaterManipulation {
water.add((byte) 9); water.add((byte) 9);
} }
this.player = player; this.player = player;
BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName());
if (bPlayer.isOnCooldown("WaterManipulation"))
return;
if (prepare()) { if (prepare()) {
id = ID; id = ID;
instances.put(id, this); instances.put(id, this);
@ -534,9 +537,6 @@ public class WaterManipulation {
public static void moveWater(Player player) { public static void moveWater(Player player) {
BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName());
if (bPlayer.isOnCooldown("WaterManipulation"))
return;
if (prepared.containsKey(player)) { if (prepared.containsKey(player)) {
if (instances.containsKey(prepared.get(player))) { if (instances.containsKey(prepared.get(player))) {
instances.get(prepared.get(player)).moveWater(); instances.get(prepared.get(player)).moveWater();

View file

@ -35,6 +35,7 @@ permissions:
bending.command.check: true bending.command.check: true
bending.command.preset.bind.external: true bending.command.preset.bind.external: true
bending.command.preset.bind.external.other: true bending.command.preset.bind.external.other: true
bending.command.copy.assign: true
bending.admin.debug: true bending.admin.debug: true
bending.admin.remove: true bending.admin.remove: true
bending.player: bending.player:
@ -44,6 +45,7 @@ permissions:
bending.command.bind: true bending.command.bind: true
bending.command.display: true bending.command.display: true
bending.command.toggle: true bending.command.toggle: true
bending.command.copy: true
bending.command.choose: true bending.command.choose: true
bending.command.version: true bending.command.version: true
bending.command.help: true bending.command.help: true