diff --git a/src/com/projectkorra/projectkorra/GeneralMethods.java b/src/com/projectkorra/projectkorra/GeneralMethods.java index d43fddd5..0f5fd6b9 100644 --- a/src/com/projectkorra/projectkorra/GeneralMethods.java +++ b/src/com/projectkorra/projectkorra/GeneralMethods.java @@ -133,6 +133,7 @@ import fr.neatmonster.nocheatplus.hooks.NCPExemptionManager; @SuppressWarnings("deprecation") public class GeneralMethods { + public static List invincible = new ArrayList<>(); static ProjectKorra plugin; @@ -147,6 +148,7 @@ public class GeneralMethods { public static ConcurrentHashMap> blockProtectionCache = new ConcurrentHashMap>(); public static Integer[] nonOpaque = { 0, 6, 8, 9, 10, 11, 27, 28, 30, 31, 32, 37, 38, 39, 40, 50, 51, 55, 59, 66, 68, 69, 70, 72, 75, 76, 77, 78, 83, 90, 93, 94, 104, 105, 106, 111, 115, 119, 127, 131, 132, 175 }; + public static Material[] interactable = { Material.ACACIA_DOOR, Material.ACACIA_FENCE_GATE, Material.ANVIL, Material.ARMOR_STAND, Material.BEACON, Material.BED, Material.BED_BLOCK, Material.BIRCH_DOOR, Material.BIRCH_FENCE_GATE, Material.BOAT, Material.BREWING_STAND, Material.BURNING_FURNACE, Material.CAKE_BLOCK, Material.CHEST, Material.COMMAND, Material.DARK_OAK_DOOR, Material.DARK_OAK_FENCE_GATE, Material.DISPENSER, Material.DRAGON_EGG, Material.DROPPER, Material.ENCHANTMENT_TABLE, Material.ENDER_CHEST, Material.ENDER_PORTAL_FRAME, Material.FENCE_GATE, Material.FURNACE, Material.HOPPER, Material.HOPPER_MINECART, Material.COMMAND_MINECART, Material.ITEM_FRAME, Material.JUKEBOX, Material.JUNGLE_DOOR, Material.JUNGLE_FENCE_GATE, Material.LEVER, Material.MINECART, Material.NOTE_BLOCK, Material.PAINTING, Material.SPRUCE_DOOR, Material.SPRUCE_FENCE_GATE, Material.STONE_BUTTON, Material.TRAPPED_CHEST, Material.TRAP_DOOR, Material.WOOD_BUTTON, Material.WOOD_DOOR, Material.WORKBENCH }; // Stands for toggled = false while logging out public static List toggedOut = new ArrayList(); @@ -1432,6 +1434,10 @@ public class GeneralMethods { public static boolean isImportEnabled() { return plugin.getConfig().getBoolean("Properties.ImportEnabled"); } + + public static boolean isInteractable(Block block) { + return Arrays.asList(interactable).contains(block.getType()); + } public static boolean isObstructed(Location location1, Location location2) { Vector loc1 = location1.toVector(); diff --git a/src/com/projectkorra/projectkorra/PKListener.java b/src/com/projectkorra/projectkorra/PKListener.java index b3a4438d..8d40b980 100644 --- a/src/com/projectkorra/projectkorra/PKListener.java +++ b/src/com/projectkorra/projectkorra/PKListener.java @@ -1,5 +1,65 @@ package com.projectkorra.projectkorra; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockFadeEvent; +import org.bukkit.event.block.BlockFormEvent; +import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.block.BlockPhysicsEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.entity.EntityCombustEvent; +import org.bukkit.event.entity.EntityDamageByBlockEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.EntityInteractEvent; +import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.event.entity.EntityTargetLivingEntityEvent; +import org.bukkit.event.entity.EntityTeleportEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.entity.SlimeSplitEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType.SlotType; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerAnimationEvent; +import org.bukkit.event.player.PlayerGameModeChangeEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerMoveEvent; +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.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + import com.projectkorra.projectkorra.ability.AvatarState; import com.projectkorra.projectkorra.ability.api.CoreAbility; import com.projectkorra.projectkorra.ability.combo.ComboManager; @@ -91,65 +151,6 @@ import com.projectkorra.projectkorra.waterbending.WaterWall; import com.projectkorra.projectkorra.waterbending.WaterWave; import com.projectkorra.projectkorra.waterbending.Wave; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockFadeEvent; -import org.bukkit.event.block.BlockFormEvent; -import org.bukkit.event.block.BlockFromToEvent; -import org.bukkit.event.block.BlockIgniteEvent; -import org.bukkit.event.block.BlockPhysicsEvent; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.EntityChangeBlockEvent; -import org.bukkit.event.entity.EntityCombustEvent; -import org.bukkit.event.entity.EntityDamageByBlockEvent; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.entity.EntityExplodeEvent; -import org.bukkit.event.entity.EntityInteractEvent; -import org.bukkit.event.entity.EntityShootBowEvent; -import org.bukkit.event.entity.EntityTargetEvent; -import org.bukkit.event.entity.EntityTargetLivingEntityEvent; -import org.bukkit.event.entity.EntityTeleportEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.event.entity.ProjectileLaunchEvent; -import org.bukkit.event.entity.SlimeSplitEvent; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType.SlotType; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerAnimationEvent; -import org.bukkit.event.player.PlayerGameModeChangeEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerKickEvent; -import org.bukkit.event.player.PlayerMoveEvent; -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.PotionEffectType; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - public class PKListener implements Listener { ProjectKorra plugin; @@ -1301,6 +1302,11 @@ public class PKListener implements Listener { event.setCancelled(true); return; } + + if (GeneralMethods.isInteractable(player.getTargetBlock((Set)null, 5))) { + event.setCancelled(true); + return; + } BlockSource.update(player, ClickType.LEFT_CLICK); diff --git a/src/com/projectkorra/projectkorra/airbending/AirBlast.java b/src/com/projectkorra/projectkorra/airbending/AirBlast.java index a9f29a3d..9498eebd 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirBlast.java +++ b/src/com/projectkorra/projectkorra/airbending/AirBlast.java @@ -76,6 +76,7 @@ public class AirBlast extends CoreAbility { if (location.getBlock().isLiquid()) { return; } + //reloadVariables(); source = burst; @@ -146,7 +147,7 @@ public class AirBlast extends CoreAbility { return; } - AirMethods.playAirbendingParticles(origin, 6); + AirMethods.playAirbendingParticles(origin, 4); // origin.getWorld().playEffect(origin, Effect.SMOKE, 4, // (int) originselectrange); } @@ -175,7 +176,7 @@ public class AirBlast extends CoreAbility { private void advanceLocation() { if (showParticles) - AirMethods.playAirbendingParticles(location, 6); + AirMethods.playAirbendingParticles(location, 6, 0.275F, 0.275F, 0.275F); if (GeneralMethods.rand.nextInt(4) == 0) { AirMethods.playAirbendingSound(location); } diff --git a/src/com/projectkorra/projectkorra/airbending/AirMethods.java b/src/com/projectkorra/projectkorra/airbending/AirMethods.java index 1ff61f63..9bad24c8 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirMethods.java +++ b/src/com/projectkorra/projectkorra/airbending/AirMethods.java @@ -116,6 +116,8 @@ public class AirMethods { return ParticleEffect.SMOKE; else if (particle.equalsIgnoreCase("smoke")) return ParticleEffect.CLOUD; + else if (particle.equalsIgnoreCase("smallsmoke")) + return ParticleEffect.SNOW_SHOVEL; else return ParticleEffect.CLOUD; } @@ -141,23 +143,7 @@ public class AirMethods { * @param zOffset The zOffset to use */ public static void playAirbendingParticles(Location loc, int amount, float xOffset, float yOffset, float zOffset) { - switch (getAirbendingParticles()) { - case SPELL: - for (int i = 0; i < amount; i++) { - ParticleEffect.SPELL.display(loc, xOffset, yOffset, zOffset, 0, 1); - } - break; - case SMOKE: - for (int i = 0; i < amount; i++) { - ParticleEffect.SMOKE.display(loc, xOffset, yOffset, zOffset, 0, 1); - } - break; - default: - for (int i = 0; i < amount; i++) { - ParticleEffect.CLOUD.display(loc, xOffset, yOffset, zOffset, 0, 1); - } - break; - } + getAirbendingParticles().display(loc, xOffset, yOffset, zOffset, 0, amount); } /** diff --git a/src/com/projectkorra/projectkorra/airbending/AirSpout.java b/src/com/projectkorra/projectkorra/airbending/AirSpout.java index 79f4d876..3021f9db 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirSpout.java +++ b/src/com/projectkorra/projectkorra/airbending/AirSpout.java @@ -147,10 +147,12 @@ public class AirSpout extends CoreAbility { } private void rotateAirColumn(Block block) { + if (player.getWorld() != block.getWorld()) + return; if (System.currentTimeMillis() >= time + interval) { time = System.currentTimeMillis(); - + Location location = block.getLocation(); Location playerloc = player.getLocation(); location = new Location(location.getWorld(), playerloc.getX(), location.getY(), playerloc.getZ()); @@ -172,7 +174,7 @@ public class AirSpout extends CoreAbility { Location effectloc2 = new Location(location.getWorld(), location.getX(), block.getY() + i, location.getZ()); - AirMethods.playAirbendingParticles(effectloc2, 6); + AirMethods.playAirbendingParticles(effectloc2, 3, 0.4F, 0.4F, 0.4F); // location.getWorld().playEffect(effectloc2, Effect.SMOKE, // (int) directions[index], (int) height + 5); diff --git a/src/com/projectkorra/projectkorra/airbending/AirSuction.java b/src/com/projectkorra/projectkorra/airbending/AirSuction.java index 67a47f6a..21525986 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirSuction.java +++ b/src/com/projectkorra/projectkorra/airbending/AirSuction.java @@ -8,6 +8,7 @@ import com.projectkorra.projectkorra.ability.StockAbility; import com.projectkorra.projectkorra.ability.api.CoreAbility; import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.earthbending.EarthMethods; +import com.projectkorra.projectkorra.object.HorizontalVelocityTracker; import com.projectkorra.projectkorra.util.Flight; import com.projectkorra.projectkorra.waterbending.WaterSpout; @@ -59,7 +60,7 @@ public class AirSuction extends CoreAbility { if (player.getEyeLocation().getBlock().isLiquid()) { return; } - if (AirSpout.getPlayers().contains(player.getUniqueId()) || WaterSpout.getPlayers().contains(player)) //TODO: UPDATE THIS LINE + if (AirSpout.getPlayers().contains(player) || WaterSpout.getPlayers().contains(player)) return; /* End Initial Check */ //reloadVariables(); @@ -146,7 +147,7 @@ public class AirSuction extends CoreAbility { } private void advanceLocation() { - AirMethods.playAirbendingParticles(location, 6); + AirMethods.playAirbendingParticles(location, 6, 0.275F, 0.275F, 0.275F); if (GeneralMethods.rand.nextInt(4) == 0) { AirMethods.playAirbendingSound(location); } @@ -257,6 +258,7 @@ public class AirSuction extends CoreAbility { continue; } GeneralMethods.setVelocity(entity, velocity); + new HorizontalVelocityTracker(entity, player, 200l); entity.setFallDistance(0); if (entity.getEntityId() != player.getEntityId() && entity instanceof Player) { new Flight((Player) entity, player); diff --git a/src/com/projectkorra/projectkorra/airbending/AirSwipe.java b/src/com/projectkorra/projectkorra/airbending/AirSwipe.java index f5701905..1dd9177b 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirSwipe.java +++ b/src/com/projectkorra/projectkorra/airbending/AirSwipe.java @@ -162,7 +162,7 @@ public class AirSwipe extends CoreAbility { } } } else { - AirMethods.playAirbendingParticles(location, 3); + AirMethods.playAirbendingParticles(location, 3, 0.2F, 0.2F, 0); if (GeneralMethods.rand.nextInt(4) == 0) { AirMethods.playAirbendingSound(location); } diff --git a/src/com/projectkorra/projectkorra/firebending/FireBlast.java b/src/com/projectkorra/projectkorra/firebending/FireBlast.java index 52a0fedf..3fc527ea 100644 --- a/src/com/projectkorra/projectkorra/firebending/FireBlast.java +++ b/src/com/projectkorra/projectkorra/firebending/FireBlast.java @@ -155,8 +155,8 @@ public class FireBlast extends CoreAbility { private void advanceLocation() { if (showParticles) { //ParticleEffect.RED_DUST.display((float) 16, (float) 111, (float) 227, 0.01F, 0, location, 256D); - ParticleEffect.FLAME.display(location, 0.4F, 0.4F, 0.4F, 0, 8); - ParticleEffect.SMOKE.display(location, 0.4F, 0.4F, 0.4F, 0, 3); + ParticleEffect.FLAME.display(location, 0.275F, 0.275F, 0.275F, 0, 6); + ParticleEffect.SMOKE.display(location, 0.3F, 0.3F, 0.3F, 0, 3); } location = location.add(direction.clone().multiply(speedfactor)); if (rand.nextInt(4) == 0) { diff --git a/src/com/projectkorra/projectkorra/firebending/FireMethods.java b/src/com/projectkorra/projectkorra/firebending/FireMethods.java index 07aea6fc..c7c1ec5c 100644 --- a/src/com/projectkorra/projectkorra/firebending/FireMethods.java +++ b/src/com/projectkorra/projectkorra/firebending/FireMethods.java @@ -5,11 +5,11 @@ import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.ability.AbilityModuleManager; import com.projectkorra.projectkorra.util.Information; +import com.projectkorra.projectkorra.util.ParticleEffect; import com.projectkorra.rpg.RPGMethods; import com.projectkorra.rpg.WorldEvents; import org.bukkit.ChatColor; -import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; @@ -152,8 +152,8 @@ public class FireMethods { GeneralMethods.displayColoredParticle(loc, "#01E1FF"); } - public static void playFirebendingParticles(Location loc) { - loc.getWorld().playEffect(loc, Effect.MOBSPAWNER_FLAMES, 0, 15); + public static void playFirebendingParticles(Location loc, int amount, float xOffset, float yOffset, float zOffset) { + ParticleEffect.FLAME.display(loc, xOffset, yOffset, zOffset, 0, amount); } public static void playFirebendingSound(Location loc) { diff --git a/src/com/projectkorra/projectkorra/object/HorizontalVelocityTracker.java b/src/com/projectkorra/projectkorra/object/HorizontalVelocityTracker.java index 4cd03e44..cbb62cdd 100644 --- a/src/com/projectkorra/projectkorra/object/HorizontalVelocityTracker.java +++ b/src/com/projectkorra/projectkorra/object/HorizontalVelocityTracker.java @@ -57,17 +57,13 @@ public class HorizontalVelocityTracker { List blocks = GeneralMethods.getBlocksAroundPoint(entity.getLocation(), 1.5); - if (entity.isOnGround()) { - remove(); - return; - } - for (Block b : blocks) { if (WaterMethods.isWater(b)) { remove(); return; } } + if (thisVelocity.length() < lastVelocity.length()) { if ((diff.getX() > 1 || diff.getX() < -1) || (diff.getZ() > 1 || diff.getZ() < -1)) { impactLocation = entity.getLocation();