From 65f1b12fc07670a218325c29d50868f6eb50aefb Mon Sep 17 00:00:00 2001 From: MistPhizzle Date: Mon, 1 Sep 2014 16:04:42 -0400 Subject: [PATCH] Add /bending invincible Makes you invincible to Bending damage. --- .../projectkorra/ProjectKorra/Commands.java | 40 +++++++++++++++++ .../projectkorra/ProjectKorra/Methods.java | 4 ++ .../projectkorra/ProjectKorra/PKListener.java | 4 +- .../ProjectKorra/airbending/AirBlast.java | 43 +++---------------- .../ProjectKorra/airbending/AirShield.java | 7 +++ .../ProjectKorra/airbending/AirSuction.java | 37 +++------------- .../ProjectKorra/airbending/AirSwipe.java | 10 ++--- .../ProjectKorra/airbending/Suffocate.java | 6 +++ .../ProjectKorra/airbending/Tornado.java | 5 +++ .../ProjectKorra/chiblocking/Paralyze.java | 7 ++- .../ProjectKorra/chiblocking/Smokescreen.java | 3 ++ src/plugin.yml | 1 + 12 files changed, 90 insertions(+), 77 deletions(-) diff --git a/src/com/projectkorra/ProjectKorra/Commands.java b/src/com/projectkorra/ProjectKorra/Commands.java index 11c63a3d..f336e4eb 100644 --- a/src/com/projectkorra/ProjectKorra/Commands.java +++ b/src/com/projectkorra/ProjectKorra/Commands.java @@ -6,8 +6,10 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; +import java.util.Set; import java.util.UUID; import org.bukkit.Bukkit; @@ -61,11 +63,14 @@ public class Commands { String[] whoaliases = {"who", "w"}; String[] importaliases = {"import", "i"}; String[] givealiases = {"give", "g", "spawn"}; + String[] invinciblealiases = {"invincible", "inv"}; /* * Item Aliases */ + public static Set invincible = new HashSet(); + String[] grapplinghookaliases = {"grapplinghook", "grapplehook", "hook", "ghook"}; public static boolean debug = ProjectKorra.plugin.getConfig().getBoolean("debug"); @@ -86,9 +91,38 @@ public class Commands { s.sendMessage(ChatColor.RED + "/bending bind [Ability] # " + ChatColor.YELLOW + "Bind an ability."); return true; } + if (Arrays.asList(invinciblealiases).contains(args[0].toLowerCase())) { + if (!s.hasPermission("bending.command.invincible")) { + s.sendMessage(ChatColor.RED + "You don't have permission to do that."); + return true; + } + + if (!(s instanceof Player)) { + s.sendMessage(ChatColor.RED + "This command is only usable by players."); + return true; + } + + if (args.length != 1) { + s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending invincible"); + return true; + } + + if (!invincible.contains(s.getName())) { + /* + * Player is not invincible. + */ + invincible.add(s.getName()); + s.sendMessage(ChatColor.GREEN + "You are now invincible to all bending damage and effects. Use this command again to disable this."); + return true; + } else { + invincible.remove(s.getName()); + s.sendMessage(ChatColor.RED + "You are no longer invincible to all bending damage and effects."); + } + } if (Arrays.asList(givealiases).contains(args[0].toLowerCase())) { if (!s.hasPermission("bending.command.give")) { s.sendMessage(ChatColor.RED + "You don't have permission to do that."); + return true; } if (args.length < 3) { @@ -1022,6 +1056,7 @@ public class Commands { s.sendMessage(ChatColor.YELLOW + "/bending version"); s.sendMessage(ChatColor.YELLOW + "/bending who"); s.sendMessage(ChatColor.YELLOW + "/bending give [Player] [Item] "); + s.sendMessage(ChatColor.YELLOW + "/bending invincible"); return true; } if (Arrays.asList(airaliases).contains(args[1].toLowerCase())) { @@ -1064,6 +1099,11 @@ public class Commands { + "Equalists in The Legend of Korra."); s.sendMessage(ChatColor.YELLOW + "Learn More: " + ChatColor.DARK_AQUA + "http://tinyurl.com/mkp9n6y"); } + if (Arrays.asList(invinciblealiases).contains(args[1].toLowerCase())) { + s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending invincible"); + s.sendMessage(ChatColor.YELLOW + "This command will make you impervious to all Bending damage. Once you " + + "use this command, you will stay invincible until you either log off, or use this command again."); + } if (Arrays.asList(importaliases).contains(args[1].toLowerCase())) { s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending import"); s.sendMessage(ChatColor.YELLOW + "This command will import your old bendingPlayers.yml from the Bending plugin." diff --git a/src/com/projectkorra/ProjectKorra/Methods.java b/src/com/projectkorra/ProjectKorra/Methods.java index 71098a9a..6d39ec80 100644 --- a/src/com/projectkorra/ProjectKorra/Methods.java +++ b/src/com/projectkorra/ProjectKorra/Methods.java @@ -242,6 +242,7 @@ public class Methods { public static boolean canBeBloodbent(Player player) { if (AvatarState.isAvatarState(player)) return false; + if (Commands.invincible.contains(player.getName())) return false; if (isChiBlocked(player.getName())) return true; if (canBend(player.getName(), "Bloodbending") && Methods.getBendingPlayer(player.getName()).isToggled) @@ -382,6 +383,9 @@ public class Methods { */ public static void damageEntity(Player player, Entity entity, double damage) { if (entity instanceof LivingEntity) { + if (entity instanceof Player) { + if (Commands.invincible.contains(((Player) entity).getName())) return; + } ((LivingEntity) entity).damage(damage, player); ((LivingEntity) entity).setLastDamageCause( new EntityDamageByEntityEvent(player, entity, DamageCause.CUSTOM, damage)); diff --git a/src/com/projectkorra/ProjectKorra/PKListener.java b/src/com/projectkorra/ProjectKorra/PKListener.java index d53c8896..88945b1c 100644 --- a/src/com/projectkorra/ProjectKorra/PKListener.java +++ b/src/com/projectkorra/ProjectKorra/PKListener.java @@ -305,7 +305,9 @@ public class PKListener implements Listener { @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { - + if (Commands.invincible.contains(event.getPlayer().getName()) { + Commands.invincible.remove(event.getPlayer().getName()); + } BendingPlayer.players.remove(event.getPlayer().getName()); if (EarthArmor.instances.containsKey(event.getPlayer())) { EarthArmor.removeEffect(event.getPlayer()); diff --git a/src/com/projectkorra/ProjectKorra/airbending/AirBlast.java b/src/com/projectkorra/ProjectKorra/airbending/AirBlast.java index 09d5f5b9..822602c6 100644 --- a/src/com/projectkorra/ProjectKorra/airbending/AirBlast.java +++ b/src/com/projectkorra/ProjectKorra/airbending/AirBlast.java @@ -7,12 +7,14 @@ import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.configuration.MemorySection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.util.Vector; import com.projectkorra.ProjectKorra.BendingPlayer; +import com.projectkorra.ProjectKorra.Commands; import com.projectkorra.ProjectKorra.Flight; import com.projectkorra.ProjectKorra.Methods; import com.projectkorra.ProjectKorra.ProjectKorra; @@ -150,12 +152,6 @@ public class AirBlast { instances.remove(id); return false; } - - // if (player.isSneaking() - // && Methods.getBendingAbility(player) == Abilities.AirBlast) { - // new AirBlast(player); - // } - Block block = location.getBlock(); for (Block testblock : Methods.getBlocksAroundPoint(location, affectingradius)) { if (testblock.getType() == Material.FIRE) { @@ -193,21 +189,12 @@ public class AirBlast { return false; } - // Methods.verbose(location.distance(origin)); if (location.distance(origin) > range) { - // Methods.verbose(id); instances.remove(id); return false; } for (Entity entity : Methods.getEntitiesAroundPoint(location, affectingradius)) { - // if (source == null) { - // if (affectedentities.contains(entity)) - // continue; - // } else { - // if (source.isAffectedEntity(entity)) - // continue; - // } affect(entity); } @@ -218,16 +205,10 @@ public class AirBlast { private void advanceLocation() { Methods.playAirbendingParticles(location, 10); -// ParticleEffect.SPELL.display(location, (float)0, (float)0, (float)0, (float)speed, (int)20); -// location.getWorld().playEffect(location, Effect.SMOKE, 4, (int) range); location = location.add(direction.clone().multiply(speedfactor)); } private void affect(Entity entity) { - // if (source == null) - // affectedentities.add(entity); - // else - // source.addAffectedEntity(entity); boolean isUser = entity.getEntityId() == player.getEntityId(); if (!isUser || otherorigin) { @@ -263,22 +244,10 @@ public class AirBlast { } else { velocity.add(push.clone().multiply(factor * .5)); } - - // velocity = - // velocity.clone().add(direction.clone().multiply(factor)); - // double newmag = Math.abs(velocity.getY()); - // if (newmag > mag) { - // if (mag > max) { - // velocity = velocity.clone().multiply(mag / newmag); - // } else if (newmag > max) { - // velocity = velocity.clone().multiply(max / newmag); - // } - // } - // - // velocity.multiply(1 - location.distance(origin) / (2 * range)); - // - // if (entity instanceof Player) - // velocity.multiply(2); + + if (entity instanceof Player) { + if (Commands.invincible.contains(((Player) entity).getName())) return; + } entity.setVelocity(velocity); entity.setFallDistance(0); diff --git a/src/com/projectkorra/ProjectKorra/airbending/AirShield.java b/src/com/projectkorra/ProjectKorra/airbending/AirShield.java index cd5a8f40..a78d627b 100644 --- a/src/com/projectkorra/ProjectKorra/airbending/AirShield.java +++ b/src/com/projectkorra/ProjectKorra/airbending/AirShield.java @@ -9,6 +9,7 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.util.Vector; +import com.projectkorra.ProjectKorra.Commands; import com.projectkorra.ProjectKorra.Methods; import com.projectkorra.ProjectKorra.ProjectKorra; import com.projectkorra.ProjectKorra.Ability.AvatarState; @@ -83,6 +84,12 @@ public class AirShield { velocity.setX(vx); velocity.setZ(vz); } + + if (entity instanceof Player) { + if (Commands.invincible.contains(((Player) entity).getName())) { + continue; + } + } velocity.multiply(radius / maxradius); entity.setVelocity(velocity); diff --git a/src/com/projectkorra/ProjectKorra/airbending/AirSuction.java b/src/com/projectkorra/ProjectKorra/airbending/AirSuction.java index ef71ac7b..f670bd6f 100644 --- a/src/com/projectkorra/ProjectKorra/airbending/AirSuction.java +++ b/src/com/projectkorra/ProjectKorra/airbending/AirSuction.java @@ -11,6 +11,7 @@ import org.bukkit.entity.Player; import org.bukkit.util.Vector; import com.projectkorra.ProjectKorra.BendingPlayer; +import com.projectkorra.ProjectKorra.Commands; import com.projectkorra.ProjectKorra.Flight; import com.projectkorra.ProjectKorra.Methods; import com.projectkorra.ProjectKorra.ProjectKorra; @@ -154,38 +155,6 @@ public class AirSuction { // continue; // affectedentities.add(entity); if (entity.getEntityId() != player.getEntityId() || otherorigin) { - // Vector velocity = entity.getVelocity(); - // double mag = Math.abs(velocity.getY()); - // double max = maxspeed; - // if (AvatarState.isAvatarState(player)) { - // max = AvatarState.getValue(maxspeed); - // velocity = velocity.clone().add( - // direction.clone().multiply( - // AvatarState.getValue(pushfactor))); - // double newmag = Math.abs(velocity.getY()); - // if (newmag > mag) { - // if (mag > max) { - // velocity = velocity.clone().multiply(mag / newmag); - // } else if (newmag > max) { - // velocity = velocity.clone().multiply(max / newmag); - // } - // } - // } else { - // velocity = velocity.clone().add( - // direction.clone().multiply(pushfactor)); - // double newmag = Math.abs(velocity.getY()); - // if (newmag > mag) { - // if (mag > max) { - // velocity = velocity.clone().multiply(mag / newmag); - // } else if (newmag > max) { - // velocity = velocity.clone().multiply(max / newmag); - // } - // } - // } - // if (entity instanceof Player) - // velocity.multiply(2); - // entity.setVelocity(velocity); - // entity.setFallDistance(0); Vector velocity = entity.getVelocity(); double max = maxspeed; double factor = pushfactor; @@ -219,6 +188,10 @@ public class AirSuction { } else { velocity.add(push.clone().multiply(factor * .5)); } + + if (entity instanceof Player) { + if (Commands.invincible.contains(((Player) entity).getName())) continue; + } entity.setVelocity(velocity); entity.setFallDistance(0); if (entity.getEntityId() != player.getEntityId() diff --git a/src/com/projectkorra/ProjectKorra/airbending/AirSwipe.java b/src/com/projectkorra/ProjectKorra/airbending/AirSwipe.java index 2a8a131b..8fb8d9c5 100644 --- a/src/com/projectkorra/ProjectKorra/airbending/AirSwipe.java +++ b/src/com/projectkorra/ProjectKorra/airbending/AirSwipe.java @@ -14,6 +14,7 @@ import org.bukkit.entity.Player; import org.bukkit.util.Vector; import com.projectkorra.ProjectKorra.BendingPlayer; +import com.projectkorra.ProjectKorra.Commands; import com.projectkorra.ProjectKorra.Flight; import com.projectkorra.ProjectKorra.Methods; import com.projectkorra.ProjectKorra.ProjectKorra; @@ -158,10 +159,6 @@ public class AirSwipe { return true; } else if (System.currentTimeMillis() >= time + maxchargetime) { Methods.playAirbendingParticles(player.getEyeLocation(), 10); -// player.getWorld().playEffect( -// player.getEyeLocation(), -// Effect.SMOKE, -// Methods.getIntCardinalDirection(player.getEyeLocation().getDirection()), 3); } } return true; @@ -217,8 +214,6 @@ public class AirSwipe { } } else { Methods.playAirbendingParticles(location, 10); -// location.getWorld().playEffect(location, Effect.SMOKE, -// 4, (int) AirBlast.defaultrange); affectPeople(location, direction); } } @@ -239,6 +234,9 @@ public class AirSwipe { if (Methods.isRegionProtectedFromBuild(player, "AirSwipe", entity.getLocation())) continue; if (entity.getEntityId() != player.getEntityId()) { + if (entity instanceof Player) { + if (Commands.invincible.contains(((Player) entity).getName())) continue; + } if (AvatarState.isAvatarState(player)) { entity.setVelocity(direction.multiply(AvatarState.getValue(pushfactor))); } else { diff --git a/src/com/projectkorra/ProjectKorra/airbending/Suffocate.java b/src/com/projectkorra/ProjectKorra/airbending/Suffocate.java index f971be47..33290bcf 100644 --- a/src/com/projectkorra/ProjectKorra/airbending/Suffocate.java +++ b/src/com/projectkorra/ProjectKorra/airbending/Suffocate.java @@ -10,12 +10,14 @@ import org.bukkit.Location; import org.bukkit.entity.Creature; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.entity.HumanEntity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.util.Vector; +import com.projectkorra.ProjectKorra.Commands; import com.projectkorra.ProjectKorra.Methods; import com.projectkorra.ProjectKorra.ProjectKorra; import com.projectkorra.ProjectKorra.TempPotionEffect; @@ -120,6 +122,10 @@ public class Suffocate { } if (entity instanceof Player) { + if (Commands.invincible.contains(((Player) entity).getName())) { + breakSuffocate(entity); + continue; + } if (AvatarState.isAvatarState((Player) entity)) { breakSuffocate(entity); continue; diff --git a/src/com/projectkorra/ProjectKorra/airbending/Tornado.java b/src/com/projectkorra/ProjectKorra/airbending/Tornado.java index 58569f5b..a6363879 100644 --- a/src/com/projectkorra/ProjectKorra/airbending/Tornado.java +++ b/src/com/projectkorra/ProjectKorra/airbending/Tornado.java @@ -10,6 +10,7 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.util.Vector; +import com.projectkorra.ProjectKorra.Commands; import com.projectkorra.ProjectKorra.Flight; import com.projectkorra.ProjectKorra.Methods; import com.projectkorra.ProjectKorra.ProjectKorra; @@ -146,6 +147,10 @@ public class Tornado { vy = .6; } } + + if (entity instanceof Player) { + if (Commands.invincible.contains(((Player) entity).getName())) continue; + } Vector velocity = entity.getVelocity(); velocity.setX(vx); diff --git a/src/com/projectkorra/ProjectKorra/chiblocking/Paralyze.java b/src/com/projectkorra/ProjectKorra/chiblocking/Paralyze.java index a89c6fdf..07d6d979 100644 --- a/src/com/projectkorra/ProjectKorra/chiblocking/Paralyze.java +++ b/src/com/projectkorra/ProjectKorra/chiblocking/Paralyze.java @@ -4,8 +4,10 @@ import java.util.concurrent.ConcurrentHashMap; import org.bukkit.entity.Creature; import org.bukkit.entity.Entity; +import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; +import com.projectkorra.ProjectKorra.Commands; import com.projectkorra.ProjectKorra.Element; import com.projectkorra.ProjectKorra.Methods; import com.projectkorra.ProjectKorra.ProjectKorra; @@ -33,6 +35,9 @@ public class Paralyze { cooldowns.remove(targetentity); } } + if (targetentity instanceof Player) { + if (Commands.invincible.contains(((Player) targetentity).getName())) return; + } paralyze(targetentity); cooldowns.put(targetentity, System.currentTimeMillis()); } @@ -43,7 +48,7 @@ public class Paralyze { if (entity instanceof Creature) { ((Creature) entity).setTarget(null); } - + if (entity instanceof Player) { if(Suffocate.isChannelingSphere((Player) entity)) { Suffocate.remove((Player) entity); diff --git a/src/com/projectkorra/ProjectKorra/chiblocking/Smokescreen.java b/src/com/projectkorra/ProjectKorra/chiblocking/Smokescreen.java index 8aca50e1..2e9a1358 100644 --- a/src/com/projectkorra/ProjectKorra/chiblocking/Smokescreen.java +++ b/src/com/projectkorra/ProjectKorra/chiblocking/Smokescreen.java @@ -7,12 +7,14 @@ import java.util.List; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.entity.Entity; +import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Snowball; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import com.projectkorra.ProjectKorra.BendingPlayer; +import com.projectkorra.ProjectKorra.Commands; import com.projectkorra.ProjectKorra.Methods; import com.projectkorra.ProjectKorra.ProjectKorra; @@ -63,6 +65,7 @@ public class Smokescreen { public static void applyBlindness(Entity entity) { if (entity instanceof Player) { + if (Commands.invincible.contains(((Player) entity).getName())) return; Player p = (Player) entity; p.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, duration * 20, 2)); blinded.put(p.getName(), System.currentTimeMillis()); diff --git a/src/plugin.yml b/src/plugin.yml index 2dc8514e..462dba7a 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -23,6 +23,7 @@ permissions: bending.command.import: true bending.command.toggle.all: true bending.command.give: true + bending.command.invincible: true bending.player: default: true description: Grants access to most abilities and basic commands.