mirror of
https://github.com/TotalFreedomMC/TF-ProjectKorra.git
synced 2025-02-11 11:40:40 +00:00
Merge remote-tracking branch 'origin/master'
Conflicts: src/com/projectkorra/ProjectKorra/Ability/StockAbilities.java src/com/projectkorra/ProjectKorra/firebending/Lightning.java
This commit is contained in:
commit
1f041b8711
31 changed files with 406 additions and 13 deletions
|
@ -18,10 +18,14 @@ public enum StockAbilities {
|
|||
AvatarState,
|
||||
|
||||
// Project Korra
|
||||
<<<<<<< HEAD
|
||||
Extraction, Smokescreen, Combustion, LavaSurge;
|
||||
=======
|
||||
Extraction, Smokescreen, Combustion, BreathSphere;
|
||||
>>>>>>> origin/master
|
||||
|
||||
private enum AirbendingAbilities {
|
||||
AirBlast, AirBubble, AirShield, AirSuction, AirSwipe, Tornado, AirScooter, AirSpout, AirBurst;
|
||||
AirBlast, AirBubble, AirShield, AirSuction, AirSwipe, Tornado, AirScooter, AirSpout, AirBurst, BreathSphere;
|
||||
}
|
||||
|
||||
private enum WaterbendingAbilities {
|
||||
|
|
|
@ -188,6 +188,12 @@ public class ConfigManager {
|
|||
config.addDefault("Abilities.Air.AirSwipe.Speed", 25);
|
||||
config.addDefault("Abilities.Air.AirSwipe.Cooldown", 1500);
|
||||
config.addDefault("Abilities.Air.AirSwipe.ChargeFactor", 3);
|
||||
|
||||
config.addDefault("Abilities.Air.BreathSphere.Enabled", true);
|
||||
config.addDefault("Abilities.Air.BreathSphere.Description", "This ability is one of the most dangerous abilities an Airbender possesses. To use, simply look at an entity and hold shift. The entity will begin taking damage as you extract the air from their lungs. Any bender caught in this sphere will only be able to use basic moves, such as AirSwipe, WaterManipulation, FireBlast, or EarthBlast. An entity can be knocked out of the sphere by certain bending arts, and your attention will be disrupted if you are hit by bending.");
|
||||
config.addDefault("Abilities.Air.BreathSphere.CanBeUsedOnUndeadMobs", true);
|
||||
config.addDefault("Abilities.Air.BreathSphere.Range", 5);
|
||||
config.addDefault("Abilities.Air.BreathSphere.Damage", 0.5);
|
||||
|
||||
config.addDefault("Abilities.Air.Tornado.Radius", 10);
|
||||
config.addDefault("Abilities.Air.Tornado.Height", 25);
|
||||
|
|
|
@ -28,7 +28,10 @@ import net.sacredlabyrinth.Phaed.PreciousStones.PreciousStones;
|
|||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.FireworkEffect;
|
||||
import org.bukkit.FireworkEffect.Type;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
|
@ -69,6 +72,7 @@ import com.palmergames.bukkit.towny.war.flagwar.TownyWarConfig;
|
|||
import com.projectkorra.ProjectKorra.Ability.AbilityModule;
|
||||
import com.projectkorra.ProjectKorra.Ability.AbilityModuleManager;
|
||||
import com.projectkorra.ProjectKorra.Ability.AvatarState;
|
||||
import com.projectkorra.ProjectKorra.Utilities.FireworkEffectPlayer;
|
||||
import com.projectkorra.ProjectKorra.Utilities.ParticleEffect;
|
||||
import com.projectkorra.ProjectKorra.airbending.AirBlast;
|
||||
import com.projectkorra.ProjectKorra.airbending.AirBubble;
|
||||
|
@ -78,6 +82,7 @@ import com.projectkorra.ProjectKorra.airbending.AirShield;
|
|||
import com.projectkorra.ProjectKorra.airbending.AirSpout;
|
||||
import com.projectkorra.ProjectKorra.airbending.AirSuction;
|
||||
import com.projectkorra.ProjectKorra.airbending.AirSwipe;
|
||||
import com.projectkorra.ProjectKorra.airbending.BreathSphere;
|
||||
import com.projectkorra.ProjectKorra.airbending.Tornado;
|
||||
import com.projectkorra.ProjectKorra.chiblocking.Paralyze;
|
||||
import com.projectkorra.ProjectKorra.chiblocking.RapidPunch;
|
||||
|
@ -1890,5 +1895,25 @@ public class Methods {
|
|||
if(effect.equals(PotionEffectType.INVISIBILITY)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void breakBreathbendingHold(Entity entity) {
|
||||
if(BreathSphere.isBreathbent(entity)) {
|
||||
BreathSphere.breakBreathSphere(entity);
|
||||
return;
|
||||
}
|
||||
|
||||
if(entity instanceof Player) {
|
||||
Player player = (Player) entity;
|
||||
if(BreathSphere.isChannelingSphere(player)) {
|
||||
BreathSphere.remove(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static FireworkEffectPlayer fireworkeffectplayer = new FireworkEffectPlayer();
|
||||
|
||||
public static FireworkEffect customFireworkEffect(Type type, Color color) {
|
||||
return FireworkEffect.builder().with(type).withColor(color).build();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
|
@ -54,6 +53,7 @@ import org.bukkit.event.player.PlayerQuitEvent;
|
|||
import org.bukkit.event.player.PlayerToggleFlightEvent;
|
||||
import org.bukkit.event.player.PlayerToggleSneakEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
|
@ -68,6 +68,7 @@ import com.projectkorra.ProjectKorra.airbending.AirShield;
|
|||
import com.projectkorra.ProjectKorra.airbending.AirSpout;
|
||||
import com.projectkorra.ProjectKorra.airbending.AirSuction;
|
||||
import com.projectkorra.ProjectKorra.airbending.AirSwipe;
|
||||
import com.projectkorra.ProjectKorra.airbending.BreathSphere;
|
||||
import com.projectkorra.ProjectKorra.airbending.Tornado;
|
||||
import com.projectkorra.ProjectKorra.chiblocking.ChiPassive;
|
||||
import com.projectkorra.ProjectKorra.chiblocking.HighJump;
|
||||
|
@ -163,7 +164,7 @@ public class PKListener implements Listener {
|
|||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
if (Paralyze.isParalyzed(player) || Bloodbending.isBloodbended(player)) {
|
||||
if (Paralyze.isParalyzed(player) || Bloodbending.isBloodbended(player) || BreathSphere.isBreathbent(player)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
|
@ -239,7 +240,7 @@ public class PKListener implements Listener {
|
|||
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||
Methods.cooldowns.put(player.getName(), System.currentTimeMillis());
|
||||
}
|
||||
if (Paralyze.isParalyzed(player) || Bloodbending.isBloodbended(player)) {
|
||||
if (Paralyze.isParalyzed(player) || Bloodbending.isBloodbended(player) || BreathSphere.isBreathbent(player)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
@ -249,7 +250,7 @@ public class PKListener implements Listener {
|
|||
if (event.isCancelled()) return;
|
||||
Player player = event.getPlayer();
|
||||
Methods.cooldowns.put(player.getName(), System.currentTimeMillis());
|
||||
if (Paralyze.isParalyzed(player) || Bloodbending.isBloodbended(player)) {
|
||||
if (Paralyze.isParalyzed(player) || Bloodbending.isBloodbended(player) || BreathSphere.isBreathbent(player)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
@ -317,6 +318,12 @@ public class PKListener implements Listener {
|
|||
Player player = event.getPlayer();
|
||||
|
||||
if (event.isCancelled()) return;
|
||||
|
||||
if(BreathSphere.isBreathbent(player)) {
|
||||
if(!Methods.getBoundAbility(player).equalsIgnoreCase("AirSwipe") || !Methods.getBoundAbility(player).equalsIgnoreCase("FireBlast") || !Methods.getBoundAbility(player).equalsIgnoreCase("EarthBlast") || !Methods.getBoundAbility(player).equalsIgnoreCase("WaterManipulation")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
if (Paralyze.isParalyzed(player) || Bloodbending.isBloodbended(player)) {
|
||||
event.setCancelled(true);
|
||||
|
@ -359,6 +366,9 @@ public class PKListener implements Listener {
|
|||
if (abil.equalsIgnoreCase("AirShield")) {
|
||||
new AirShield(player);
|
||||
}
|
||||
if(abil.equalsIgnoreCase("BreathSphere")) {
|
||||
new BreathSphere(player);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -505,6 +515,10 @@ public class PKListener implements Listener {
|
|||
player.setVelocity(new Vector(0, 0, 0));
|
||||
}
|
||||
}
|
||||
|
||||
if(BreathSphere.isBreathbent(player)) {
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 1, 100));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
|
@ -532,7 +546,7 @@ public class PKListener implements Listener {
|
|||
if (event.isCancelled()) return;
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity))
|
||||
if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || BreathSphere.isBreathbent(entity))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
|
@ -576,7 +590,7 @@ public class PKListener implements Listener {
|
|||
Entity entity = event.getEntity();
|
||||
if (entity != null)
|
||||
if (Paralyze.isParalyzed(entity)
|
||||
|| Bloodbending.isBloodbended(entity))
|
||||
|| Bloodbending.isBloodbended(entity) || BreathSphere.isBreathbent(entity))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
|
@ -585,7 +599,7 @@ public class PKListener implements Listener {
|
|||
if (event.isCancelled()) return;
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity))
|
||||
if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || BreathSphere.isBreathbent(entity))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
|
@ -594,7 +608,7 @@ public class PKListener implements Listener {
|
|||
if (event.isCancelled()) return;
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity))
|
||||
if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || BreathSphere.isBreathbent(entity))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
|
@ -603,7 +617,7 @@ public class PKListener implements Listener {
|
|||
if (event.isCancelled()) return;
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity))
|
||||
if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || BreathSphere.isBreathbent(entity))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
|
@ -612,7 +626,7 @@ public class PKListener implements Listener {
|
|||
if (event.isCancelled()) return;
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity))
|
||||
if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || BreathSphere.isBreathbent(entity))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
|
@ -621,7 +635,7 @@ public class PKListener implements Listener {
|
|||
if (event.isCancelled()) return;
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity))
|
||||
if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || BreathSphere.isBreathbent(entity))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
|
@ -631,6 +645,12 @@ public class PKListener implements Listener {
|
|||
if (event.isCancelled()) return;
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if(BreathSphere.isBreathbent(player)) {
|
||||
if(!Methods.getBoundAbility(player).equalsIgnoreCase("AirSwipe") || !Methods.getBoundAbility(player).equalsIgnoreCase("FireBlast") || !Methods.getBoundAbility(player).equalsIgnoreCase("EarthBlast") || !Methods.getBoundAbility(player).equalsIgnoreCase("WaterManipulation")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
if (Bloodbending.isBloodbended(player) || Paralyze.isParalyzed(player)) {
|
||||
event.setCancelled(true);
|
||||
|
@ -837,7 +857,7 @@ public class PKListener implements Listener {
|
|||
if (event.isCancelled()) return;
|
||||
|
||||
Player p = event.getPlayer();
|
||||
if (Tornado.getPlayers().contains(p) || Bloodbending.isBloodbended(p)
|
||||
if (Tornado.getPlayers().contains(p) || Bloodbending.isBloodbended(p) || BreathSphere.isBreathbent(p)
|
||||
|| FireJet.getPlayers().contains(p)
|
||||
|| AvatarState.getPlayers().contains(p)) {
|
||||
event.setCancelled(p.getGameMode() != GameMode.CREATIVE);
|
||||
|
@ -1024,6 +1044,7 @@ public class PKListener implements Listener {
|
|||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Entity en = e.getEntity();
|
||||
if (en instanceof Player) {
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
package com.projectkorra.ProjectKorra.Utilities;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import org.bukkit.FireworkEffect;
|
||||
import org.bukkit.entity.Firework;
|
||||
import org.bukkit.inventory.meta.FireworkMeta;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
|
||||
/**
|
||||
* FireworkEffectPlayer v1.0
|
||||
*
|
||||
* FireworkEffectPlayer provides a thread-safe and (reasonably) version independant way to instantly explode a FireworkEffect at a given location.
|
||||
* You are welcome to use, redistribute, modify and destroy your own copies of this source with the following conditions:
|
||||
*
|
||||
* 1. No warranty is given or implied.
|
||||
* 2. All damage is your own responsibility.
|
||||
* 3. You provide credit publicly to the original source should you release the plugin.
|
||||
*
|
||||
* @author codename_B
|
||||
*/
|
||||
public class FireworkEffectPlayer {
|
||||
|
||||
private Method world_getHandle = null;
|
||||
private Method nms_world_broadcastEntityEffect = null;
|
||||
private Method firework_getHandle = null;
|
||||
|
||||
public void playFirework(World world, Location loc, FireworkEffect fe) throws Exception {
|
||||
Firework fw = (Firework) world.spawn(loc, Firework.class);
|
||||
Object nms_world = null;
|
||||
Object nms_firework = null;
|
||||
if(world_getHandle == null) {
|
||||
world_getHandle = getMethod(world.getClass(), "getHandle");
|
||||
firework_getHandle = getMethod(fw.getClass(), "getHandle");
|
||||
}
|
||||
nms_world = world_getHandle.invoke(world, (Object[]) null);
|
||||
nms_firework = firework_getHandle.invoke(fw, (Object[]) null);
|
||||
if(nms_world_broadcastEntityEffect == null) {
|
||||
nms_world_broadcastEntityEffect = getMethod(nms_world.getClass(), "broadcastEntityEffect");
|
||||
}
|
||||
|
||||
FireworkMeta data = (FireworkMeta) fw.getFireworkMeta();
|
||||
|
||||
data.clearEffects();
|
||||
|
||||
data.setPower(1);
|
||||
|
||||
data.addEffect(fe);
|
||||
|
||||
fw.setFireworkMeta(data);
|
||||
|
||||
nms_world_broadcastEntityEffect.invoke(nms_world, new Object[] {nms_firework, (byte) 17});
|
||||
|
||||
fw.remove();
|
||||
}
|
||||
|
||||
private static Method getMethod(Class<?> cl, String method) {
|
||||
for(Method m : cl.getMethods()) {
|
||||
if(m.getName().equals(method)) {
|
||||
return m;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -297,6 +297,7 @@ public class AirBlast {
|
|||
if (entity.getFireTicks() > 0)
|
||||
entity.getWorld().playEffect(entity.getLocation(), Effect.EXTINGUISH, 0);
|
||||
entity.setFireTicks(0);
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -256,6 +256,7 @@ public class AirSuction {
|
|||
entity.getWorld().playEffect(entity.getLocation(),
|
||||
Effect.EXTINGUISH, 0);
|
||||
entity.setFireTicks(0);
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -263,6 +263,8 @@ public class AirSwipe {
|
|||
if (entity instanceof Player) {
|
||||
new Flight((Player) entity, player);
|
||||
}
|
||||
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
|
||||
if (elements.containsKey(direction)) {
|
||||
elements.remove(direction);
|
||||
|
|
|
@ -18,6 +18,7 @@ public class AirbendingManager implements Runnable {
|
|||
AirPassive.handlePassive(Bukkit.getServer());
|
||||
AirBurst.progressAll();
|
||||
AirScooter.progressAll();
|
||||
BreathSphere.progressAll();
|
||||
AirSpout.spoutAll();
|
||||
AirBubble.handleBubbles(Bukkit.getServer());
|
||||
AirSuction.progressAll();
|
||||
|
|
213
src/com/projectkorra/ProjectKorra/airbending/BreathSphere.java
Normal file
213
src/com/projectkorra/ProjectKorra/airbending/BreathSphere.java
Normal file
|
@ -0,0 +1,213 @@
|
|||
package com.projectkorra.ProjectKorra.airbending;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Creature;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import com.projectkorra.ProjectKorra.Methods;
|
||||
import com.projectkorra.ProjectKorra.ProjectKorra;
|
||||
import com.projectkorra.ProjectKorra.TempPotionEffect;
|
||||
import com.projectkorra.ProjectKorra.Ability.AvatarState;
|
||||
|
||||
public class BreathSphere {
|
||||
|
||||
public static ConcurrentHashMap<Player, BreathSphere> instances = new ConcurrentHashMap<Player, BreathSphere>();
|
||||
|
||||
ConcurrentHashMap<Entity, Location> targetentities = new ConcurrentHashMap<Entity, Location>();
|
||||
|
||||
private static boolean canBeUsedOnUndead = ProjectKorra.plugin.getConfig().getBoolean("Abilities.Air.BreathSphere.CanBeUsedOnUndeadMobs");
|
||||
private int range = ProjectKorra.plugin.getConfig().getInt("Abilities.Air.BreathSphere.Range");
|
||||
private double damage = ProjectKorra.plugin.getConfig().getDouble("Abilities.Air.BreathSphere.Damage");
|
||||
|
||||
private Player player;
|
||||
|
||||
public BreathSphere(Player player) {
|
||||
if (instances.containsKey(player)) {
|
||||
remove(player);
|
||||
return;
|
||||
}
|
||||
|
||||
if (AvatarState.isAvatarState(player)) {
|
||||
range = AvatarState.getValue(range);
|
||||
for (Entity entity : Methods.getEntitiesAroundPoint(player.getLocation(), range)) {
|
||||
if (entity instanceof LivingEntity) {
|
||||
if (entity instanceof Player) {
|
||||
if (Methods.isRegionProtectedFromBuild(player, "Bloodbending", entity.getLocation()) || entity.getEntityId() == player.getEntityId())
|
||||
continue;
|
||||
}
|
||||
Methods.damageEntity(player, entity, 0);
|
||||
targetentities.put(entity, entity.getLocation().clone());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Entity target = Methods.getTargetedEntity(player, range, new ArrayList<Entity>());
|
||||
if (target == null)
|
||||
return;
|
||||
if (!(target instanceof LivingEntity)|| Methods.isRegionProtectedFromBuild(player, "Bloodbending", target.getLocation()))
|
||||
return;
|
||||
if (!canBeUsedOnUndead && isUndead(target)) {
|
||||
return;
|
||||
}
|
||||
Methods.damageEntity(player, target, 0);
|
||||
targetentities.put(target, target.getLocation().clone());
|
||||
}
|
||||
this.player = player;
|
||||
instances.put(player, this);
|
||||
}
|
||||
|
||||
private void progress() {
|
||||
PotionEffect slow = new PotionEffect(PotionEffectType.SLOW, 60, 1);
|
||||
PotionEffect nausea = new PotionEffect(PotionEffectType.SLOW, 60, 1);
|
||||
|
||||
if (!player.isSneaking()) {
|
||||
remove(player);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!canBeUsedOnUndead) {
|
||||
for (Entity entity: targetentities.keySet()) {
|
||||
if (isUndead(entity)) {
|
||||
targetentities.remove(entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!Methods.canBend(player.getName(), "BreathSphere")) {
|
||||
remove(player);
|
||||
return;
|
||||
}
|
||||
if (Methods.getBoundAbility(player) == null) {
|
||||
remove(player);
|
||||
return;
|
||||
}
|
||||
if (!Methods.getBoundAbility(player).equalsIgnoreCase("BreathSphere")) {
|
||||
remove(player);
|
||||
return;
|
||||
}
|
||||
|
||||
if (AvatarState.isAvatarState(player)) {
|
||||
ArrayList<Entity> entities = new ArrayList<Entity>();
|
||||
for (Entity entity : Methods.getEntitiesAroundPoint(player.getLocation(), range)) {
|
||||
if (Methods.isRegionProtectedFromBuild(player, "BreathSphere", entity.getLocation()))
|
||||
continue;
|
||||
entities.add(entity);
|
||||
if (!targetentities.containsKey(entity) && entity instanceof LivingEntity) {
|
||||
Methods.damageEntity(player, entity, 0);
|
||||
targetentities.put(entity, entity.getLocation().clone());
|
||||
}
|
||||
if (entity instanceof LivingEntity) {
|
||||
((LivingEntity) entity).damage(damage);
|
||||
new TempPotionEffect((LivingEntity) entity, slow);
|
||||
new TempPotionEffect((LivingEntity) entity, nausea);
|
||||
entity.setFallDistance(0);
|
||||
if (entity instanceof Creature) {
|
||||
((Creature) entity).setTarget(player);
|
||||
}
|
||||
if (entity.isDead()) {
|
||||
instances.remove(player);
|
||||
}
|
||||
entity.teleport(entity);
|
||||
for(Location airsphere : Methods.getCircle(entity.getLocation(), 3, 3, false, true, 0)) {
|
||||
Methods.playAirbendingParticles(airsphere, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (Entity entity : targetentities.keySet()) {
|
||||
if (!entities.contains(entity))
|
||||
targetentities.remove(entity);
|
||||
}
|
||||
} else {
|
||||
for (Entity entity : targetentities.keySet()) {
|
||||
if(entity instanceof LivingEntity) {
|
||||
((LivingEntity) entity).damage(damage);
|
||||
new TempPotionEffect((LivingEntity) entity, slow);
|
||||
new TempPotionEffect((LivingEntity) entity, nausea);
|
||||
entity.setFallDistance(0);
|
||||
if (entity instanceof Creature) {
|
||||
((Creature) entity).setTarget(null);
|
||||
}
|
||||
if (entity.isDead()) {
|
||||
instances.remove(player);
|
||||
}
|
||||
entity.teleport(entity);
|
||||
for(Location airsphere : Methods.getCircle(entity.getLocation(), 3, 3, true, true, 0)) {
|
||||
Methods.playAirbendingParticles(airsphere, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void progressAll() {
|
||||
for (Player player : instances.keySet()) {
|
||||
instances.get(player).progress();
|
||||
}
|
||||
}
|
||||
|
||||
public static void remove(Player player) {
|
||||
if (instances.containsKey(player)) {
|
||||
instances.remove(player);
|
||||
}
|
||||
}
|
||||
|
||||
public static void breakBreathSphere(Entity entity) {
|
||||
for (Player player : instances.keySet()) {
|
||||
if (instances.get(player).targetentities.containsKey(entity)) {
|
||||
instances.remove(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isBreathbent(Entity entity) {
|
||||
for (Player player : instances.keySet()) {
|
||||
if (instances.get(player).targetentities.containsKey(entity)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isUndead(Entity entity) {
|
||||
if (entity == null) return false;
|
||||
if (entity.getType() == EntityType.ZOMBIE
|
||||
|| entity.getType() == EntityType.BLAZE
|
||||
|| entity.getType() == EntityType.GIANT
|
||||
|| entity.getType() == EntityType.IRON_GOLEM
|
||||
|| entity.getType() == EntityType.MAGMA_CUBE
|
||||
|| entity.getType() == EntityType.PIG_ZOMBIE
|
||||
|| entity.getType() == EntityType.SKELETON
|
||||
|| entity.getType() == EntityType.SLIME
|
||||
|| entity.getType() == EntityType.SNOWMAN
|
||||
|| entity.getType() == EntityType.ZOMBIE) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static Location getBreathSphereLocation(Entity entity) {
|
||||
for (Player player : instances.keySet()) {
|
||||
if (instances.get(player).targetentities.containsKey(entity)) {
|
||||
return instances.get(player).targetentities.get(entity);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean isChannelingSphere(Player player){
|
||||
if(instances.containsKey(player)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void removeAll() {
|
||||
instances.clear();
|
||||
}
|
||||
|
||||
}
|
|
@ -150,6 +150,8 @@ public class Tornado {
|
|||
velocity.multiply(timefactor);
|
||||
entity.setVelocity(velocity);
|
||||
entity.setFallDistance(0);
|
||||
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
|
||||
if (entity instanceof Player) {
|
||||
new Flight((Player) entity);
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.projectkorra.ProjectKorra.BendingPlayer;
|
|||
import com.projectkorra.ProjectKorra.Element;
|
||||
import com.projectkorra.ProjectKorra.Methods;
|
||||
import com.projectkorra.ProjectKorra.ProjectKorra;
|
||||
import com.projectkorra.ProjectKorra.airbending.BreathSphere;
|
||||
|
||||
public class ChiPassive {
|
||||
|
||||
|
@ -37,9 +38,13 @@ public class ChiPassive {
|
|||
}
|
||||
|
||||
public static void blockChi(final Player player) {
|
||||
if(BreathSphere.isChannelingSphere(player)) {
|
||||
BreathSphere.remove(player);
|
||||
}
|
||||
final BendingPlayer bPlayer = Methods.getBendingPlayer(player.getName());
|
||||
if (bPlayer == null) return;
|
||||
bPlayer.blockChi();
|
||||
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(ProjectKorra.plugin, new Runnable() {
|
||||
public void run() {
|
||||
bPlayer.unblockChi();
|
||||
|
|
|
@ -10,6 +10,7 @@ import com.projectkorra.ProjectKorra.Element;
|
|||
import com.projectkorra.ProjectKorra.Methods;
|
||||
import com.projectkorra.ProjectKorra.ProjectKorra;
|
||||
import com.projectkorra.ProjectKorra.Ability.AvatarState;
|
||||
import com.projectkorra.ProjectKorra.airbending.BreathSphere;
|
||||
|
||||
public class Paralyze {
|
||||
|
||||
|
@ -42,6 +43,12 @@ public class Paralyze {
|
|||
if (entity instanceof Creature) {
|
||||
((Creature) entity).setTarget(null);
|
||||
}
|
||||
|
||||
if (entity instanceof Player) {
|
||||
if(BreathSphere.isChannelingSphere((Player) entity)) {
|
||||
BreathSphere.remove((Player) entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isParalyzed(Entity entity) {
|
||||
|
|
|
@ -12,6 +12,7 @@ import org.bukkit.entity.Player;
|
|||
|
||||
import com.projectkorra.ProjectKorra.Methods;
|
||||
import com.projectkorra.ProjectKorra.ProjectKorra;
|
||||
import com.projectkorra.ProjectKorra.airbending.BreathSphere;
|
||||
|
||||
public class RapidPunch {
|
||||
|
||||
|
@ -59,6 +60,9 @@ public class RapidPunch {
|
|||
if (ChiPassive.willChiBlock((Player) target)) {
|
||||
ChiPassive.blockChi((Player) target);
|
||||
}
|
||||
if(BreathSphere.isChannelingSphere((Player) target)) {
|
||||
BreathSphere.remove((Player) target);
|
||||
}
|
||||
lt.setNoDamageTicks(0);
|
||||
}
|
||||
cooldowns.put(p.getName(), System.currentTimeMillis());
|
||||
|
|
|
@ -389,6 +389,9 @@ public class EarthBlast {
|
|||
// || testblock.equals(block2)) {
|
||||
// entity.setVelocity(entity.getVelocity().clone()
|
||||
// .add(direction));
|
||||
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
|
||||
Location location = player.getEyeLocation();
|
||||
Vector vector = location.getDirection();
|
||||
entity.setVelocity(vector.normalize().multiply(pushfactor));
|
||||
|
|
|
@ -259,6 +259,8 @@ public class Ripple {
|
|||
Vector vector = direction.clone();
|
||||
vector.setY(.5);
|
||||
entity.setVelocity(vector);
|
||||
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -177,6 +177,7 @@ public class Combustion {
|
|||
if (entity instanceof LivingEntity) {
|
||||
if (entity.getLocation().distance(block) < radius) { // They are close enough to the explosion.
|
||||
Methods.damageEntity(player, entity, damage);
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -220,6 +220,7 @@ public class FireBlast {
|
|||
if (entity instanceof LivingEntity) {
|
||||
entity.setFireTicks(50);
|
||||
Methods.damageEntity(player, entity, (int) Methods.getFirebendingDayAugment((double) damage, entity.getWorld()));
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
new Enflamed(entity, player);
|
||||
instances.remove(id);
|
||||
}
|
||||
|
|
|
@ -158,6 +158,7 @@ public class Fireball {
|
|||
double damage = slope * (distance - innerradius) + maxdamage;
|
||||
// Methods.verbose(damage);
|
||||
Methods.damageEntity(player, entity, damage);
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
}
|
||||
|
||||
private void fireball() {
|
||||
|
|
|
@ -167,6 +167,11 @@ public class Lightning {
|
|||
Methods.damageEntity(player, entity, (int) damage);
|
||||
}
|
||||
hitentities.add(entity);
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
Methods.damageEntity(player, entity, (int) damage);
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
>>>>>>> origin/master
|
||||
}
|
||||
|
||||
public static boolean isNearbyChannel(Location location) {
|
||||
|
|
|
@ -187,6 +187,7 @@ public class WallOfFire {
|
|||
if (entity instanceof LivingEntity) {
|
||||
Methods.damageEntity(player, entity, damage);
|
||||
new Enflamed(entity, player);
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -54,6 +54,7 @@ public class Bloodbending {
|
|||
continue;
|
||||
}
|
||||
Methods.damageEntity(player, entity, 0);
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
targetentities.put(entity, entity.getLocation().clone());
|
||||
}
|
||||
}
|
||||
|
@ -73,6 +74,7 @@ public class Bloodbending {
|
|||
return;
|
||||
}
|
||||
Methods.damageEntity(player, target, 0);
|
||||
Methods.breakBreathbendingHold(target);
|
||||
targetentities.put(target, target.getLocation().clone());
|
||||
}
|
||||
this.player = player;
|
||||
|
@ -166,6 +168,7 @@ public class Bloodbending {
|
|||
if (entity instanceof Creature) {
|
||||
((Creature) entity).setTarget(null);
|
||||
}
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
}
|
||||
}
|
||||
for (Entity entity : targetentities.keySet()) {
|
||||
|
@ -199,6 +202,7 @@ public class Bloodbending {
|
|||
if (entity instanceof Creature) {
|
||||
((Creature) entity).setTarget(null);
|
||||
}
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,6 +82,7 @@ public class HealingWaters {
|
|||
if (!Methods.isRegionProtectedFromBuild(player, "HealingWaters", player.getLocation()))
|
||||
if(player.getHealth() < player.getMaxHealth()) {
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 70, 1));
|
||||
Methods.breakBreathbendingHold(player);
|
||||
}
|
||||
// for(PotionEffect effect : player.getActivePotionEffects()) {
|
||||
// if(Methods.isNegativeEffect(effect.getType())) {
|
||||
|
@ -93,6 +94,7 @@ public class HealingWaters {
|
|||
private static void applyHealingToEntity(LivingEntity le) {
|
||||
if(le.getHealth() < le.getMaxHealth()) {
|
||||
le.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 70, 1));
|
||||
Methods.breakBreathbendingHold(le);
|
||||
}
|
||||
// for(PotionEffect effect : le.getActivePotionEffects()) {
|
||||
// if(Methods.isNegativeEffect(effect.getType())) {
|
||||
|
|
|
@ -243,6 +243,7 @@ public class IceSpike {
|
|||
PotionEffect effect = new PotionEffect(PotionEffectType.SLOW, 70, mod);
|
||||
new TempPotionEffect(entity, effect);
|
||||
}
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -306,6 +306,7 @@ public class IceSpike2 {
|
|||
new TempPotionEffect(entity, effect);
|
||||
entity.damage(damage, player);
|
||||
}
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -134,6 +134,7 @@ public class OctopusForm {
|
|||
entity.setVelocity(Methods.getDirection(player.getLocation(), location).normalize().multiply(1.75));
|
||||
if (entity instanceof LivingEntity)
|
||||
Methods.damageEntity(player, entity, damage);
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -507,6 +507,7 @@ public class Torrent {
|
|||
damagedealt = (int) (Methods.getWaterbendingNightAugment(world) * (double) deflectdamage);
|
||||
}
|
||||
Methods.damageEntity(player, entity, damagedealt);
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -526,6 +527,7 @@ public class Torrent {
|
|||
}
|
||||
// if (((LivingEntity) entity).getNoDamageTicks() == 0) {
|
||||
Methods.damageEntity(player, entity, damagedealt);
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
// Methods.verbose("Hit! Health at "
|
||||
// + ((LivingEntity) entity).getHealth());
|
||||
hurtentities.add(entity);
|
||||
|
|
|
@ -367,6 +367,7 @@ public class WaterManipulation {
|
|||
if (AvatarState.isAvatarState(player))
|
||||
damage = AvatarState.getValue(damage);
|
||||
Methods.damageEntity(player, entity, (int) Methods.waterbendingNightAugment(damage, player.getWorld()));
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
progressing = false;
|
||||
// }
|
||||
}
|
||||
|
|
|
@ -304,6 +304,7 @@ public class Wave {
|
|||
if (entity.getFireTicks() > 0)
|
||||
entity.getWorld().playEffect(entity.getLocation(), Effect.EXTINGUISH, 0);
|
||||
entity.setFireTicks(0);
|
||||
Methods.breakBreathbendingHold(entity);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -138,6 +138,12 @@ Abilities:
|
|||
Speed: 25
|
||||
Cooldown: 1500
|
||||
ChargeFactor: 3
|
||||
BreathSphere:
|
||||
Enabled: true
|
||||
Description: "This ability is one of the most dangerous abilities an Airbender possesses. To use, simply look at an entity and hold shift. The entity will begin taking damage as you extract the air from their lungs. Any bender caught in this sphere will only be able to use basic moves, such as AirSwipe, WaterManipulation, FireBlast, or EarthBlast. An entity can be knocked out of the sphere by certain bending arts, and your attention will be disrupted if you are hit by bending."
|
||||
CanBeUsedOnUndeadMobs: true
|
||||
Range: 5
|
||||
Damage: 0.5
|
||||
Tornado:
|
||||
Enabled: true
|
||||
Description: "To use, simply sneak (default: shift). This will create a swirling vortex at the targeted location. Any creature or object caught in the vortex will be launched up and out in some random direction. If another player gets caught in the vortex, the launching effect is minimal. Tornado can also be used to transport the user. If the user gets caught in his/her own tornado, his/her movements are much more manageable. Provided the user doesn't fall out of the vortex, it will take him to a maximum height and move him in the general direction he/she is looking. Skilled airbenders can scale anything with this ability."
|
||||
|
|
|
@ -51,6 +51,7 @@ permissions:
|
|||
bending.ability.AirSpout: true
|
||||
bending.ability.AirSuction: true
|
||||
bending.ability.AirSwipe: true
|
||||
bending.ability.BreathSphere: true
|
||||
bending.ability.Tornado: true
|
||||
bending.air.passive: true
|
||||
bending.water:
|
||||
|
|
Loading…
Reference in a new issue