diff --git a/.classpath b/.classpath index 94adf55b..4cb7da63 100644 --- a/.classpath +++ b/.classpath @@ -5,10 +5,6 @@ - - - - diff --git a/src/com/projectkorra/ProjectKorra/BendingManager.java b/src/com/projectkorra/ProjectKorra/BendingManager.java index cd978b40..67bf9a9c 100644 --- a/src/com/projectkorra/ProjectKorra/BendingManager.java +++ b/src/com/projectkorra/ProjectKorra/BendingManager.java @@ -18,7 +18,6 @@ import com.projectkorra.ProjectKorra.firebending.FirePassive; import com.projectkorra.ProjectKorra.firebending.FireStream; import com.projectkorra.ProjectKorra.waterbending.Plantbending; import com.projectkorra.ProjectKorra.waterbending.WaterPassive; -import com.projectkorra.ProjectKorra.waterbending.WaterReturn; public class BendingManager implements Runnable { @@ -54,7 +53,6 @@ public class BendingManager implements Runnable { EarthPassive.revertSands(); Plantbending.regrow(); handleDayNight(); - WaterReturn.progressAll(); for (int id: FireStream.instances.keySet()) { FireStream.progress(id); diff --git a/src/com/projectkorra/ProjectKorra/PKListener.java b/src/com/projectkorra/ProjectKorra/PKListener.java index 58ee0597..d7802dfd 100644 --- a/src/com/projectkorra/ProjectKorra/PKListener.java +++ b/src/com/projectkorra/ProjectKorra/PKListener.java @@ -11,7 +11,6 @@ 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.BlockBreakEvent; import org.bukkit.event.block.BlockFadeEvent; import org.bukkit.event.block.BlockFormEvent; import org.bukkit.event.block.BlockFromToEvent; @@ -19,7 +18,6 @@ import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; @@ -31,8 +29,6 @@ import com.projectkorra.ProjectKorra.firebending.Enflamed; import com.projectkorra.ProjectKorra.firebending.FireStream; import com.projectkorra.ProjectKorra.waterbending.WaterCore; import com.projectkorra.ProjectKorra.waterbending.WaterPassive; -import com.projectkorra.abilities.Surge.WaterWall; -import com.projectkorra.abilities.Surge.WaveAbility; public class PKListener implements Listener { @@ -48,7 +44,9 @@ public class PKListener implements Listener { Block fromblock = event.getBlock(); if (Methods.isWater(fromblock)) { if (!event.isCancelled()) { - event.setCancelled(!WaterCore.canFlowFromTo(fromblock, toblock)); + if (Methods.isAdjacentToFrozenBlock(toblock) || Methods.isAdjacentToFrozenBlock(fromblock)) { + event.setCancelled(true); + } } } } @@ -135,40 +133,6 @@ public class PKListener implements Listener { } } - @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) - public void onBlockBreak(BlockBreakEvent event) { - Block block = event.getBlock(); - Player player = event.getPlayer(); - if (Methods.isAbilityInstalled("Surge", "orion304")) { - if (WaterWall.wasBrokenFor(player, block)) { - event.setCancelled(true); - return; - } - if (WaterCore.waterwallblocks.containsKey(block)) { - WaterWall.thaw(block); - event.setCancelled(true); - } - if (!WaveAbility.canThaw(block)) { - WaveAbility.thaw(block); - event.setCancelled(true); - } - } - } - - @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) - public void onEntityExplode(EntityExplodeEvent event) { - for (Block block: event.blockList()) { - if (Methods.isAbilityInstalled("Surge", "orion304")) { - if (WaterCore.waterwallblocks.containsKey(block)) { - block.setType(Material.AIR); - } - if (!WaveAbility.canThaw(block)) { - WaveAbility.thaw(block); - } - } - } - } - @EventHandler public void onPlayerDamage(EntityDamageEvent e) { Entity en = e.getEntity(); @@ -202,7 +166,9 @@ public class PKListener implements Listener { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onBlockPhysics(BlockPhysicsEvent event) { Block block = event.getBlock(); - event.setCancelled(!WaterCore.canPhysicsChange(block)); + if (TempBlock.isTempBlock(block) || TempBlock.isTouchingTempBlock(block)) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) diff --git a/src/com/projectkorra/ProjectKorra/waterbending/FreezeMelt.java b/src/com/projectkorra/ProjectKorra/waterbending/FreezeMelt.java new file mode 100644 index 00000000..244ea7af --- /dev/null +++ b/src/com/projectkorra/ProjectKorra/waterbending/FreezeMelt.java @@ -0,0 +1,77 @@ +package com.projectkorra.ProjectKorra.waterbending; + +import java.util.concurrent.ConcurrentHashMap; + +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; + +import com.projectkorra.ProjectKorra.TempBlock; + + +public class FreezeMelt { + + public static ConcurrentHashMap frozenblocks = new ConcurrentHashMap(); + + public static void freeze(Player player, Block block) { + if (TempBlock.isTempBlock(block)) + return; + byte data = block.getData(); + block.setType(Material.ICE); + frozenblocks.put(block, data); + } + + public static void thaw(Block block) { + if (frozenblocks.containsKey(block)) { + byte data = frozenblocks.get(block); + frozenblocks.remove(block); + block.setType(Material.WATER); + block.setData(data); + } + } + +// public static void handleFrozenBlocks() { +// for (Block block : frozenblocks.keySet()) { +// if (canThaw(block)) +// thaw(block); +// } +// } + +// public static boolean canThaw(Block block) { +// if (frozenblocks.containsKey(block)) { +// for (Player player : block.getWorld().getPlayers()) { +// // if (Tools.getBendingAbility(player) == Abilities.OctopusForm) { +// // if (block.getLocation().distance(player.getLocation()) <= OctopusForm.radius + 2) +// // return false; +// // } +// if (Tools.hasAbility(player, Abilities.PhaseChange) && Tools.canBend(player, Abilities.PhaseChange)) { +// double range = Tools.waterbendingNightAugment(defaultrange, +// player.getWorld()); +// if (AvatarState.isAvatarState(player)) { +// range = AvatarState.getValue(range); +// } +// if (block.getLocation().distance(player.getLocation()) <= range) +// return false; +// } +// } +// } +// if (!WaterManipulation.canPhysicsChange(block)) +// return false; +// return true; +// } + + private static void thawAll() { + for (Block block : frozenblocks.keySet()) { + if (block.getType() == Material.ICE) { + byte data = frozenblocks.get(block); + block.setType(Material.WATER); + block.setData(data); + frozenblocks.remove(block); + } + } + } + + public static void removeAll() { + thawAll(); + } +} \ No newline at end of file diff --git a/src/com/projectkorra/ProjectKorra/waterbending/WaterCore.java b/src/com/projectkorra/ProjectKorra/waterbending/WaterCore.java index ff32eb69..d9637224 100644 --- a/src/com/projectkorra/ProjectKorra/waterbending/WaterCore.java +++ b/src/com/projectkorra/ProjectKorra/waterbending/WaterCore.java @@ -2,15 +2,10 @@ package com.projectkorra.ProjectKorra.waterbending; import java.util.concurrent.ConcurrentHashMap; -import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.entity.Player; - import com.projectkorra.ProjectKorra.Methods; import com.projectkorra.ProjectKorra.TempBlock; -import com.projectkorra.abilities.Surge.WaveAbility; -import com.projectkorra.abilities.WaterSpout.WaterSpoutAbility; public class WaterCore { @@ -18,40 +13,24 @@ public class WaterCore { public static ConcurrentHashMap waterSpoutAffectedBlocks = new ConcurrentHashMap(); public static ConcurrentHashMap waterManipulationAffectedBlocks = new ConcurrentHashMap(); - public static ConcurrentHashMap waterWallAffectedBlocks = new ConcurrentHashMap(); - public static ConcurrentHashMap waterwallblocks = new ConcurrentHashMap(); - - - - public static void freeze(Player player, Block block) { - // if (Methods.isRegionProtectedFromBuild(player, Abilities.PhaseChange, - // block.getLocation())) - // return; - if (TempBlock.isTempBlock(block)) - return; - byte data = block.getData(); - block.setType(Material.ICE); - frozenblocks.put(block, data); - } - - public static void removeSpouts(Location loc0, double radius, - Player sourceplayer) { - if (!Methods.isAbilityInstalled("WaterSpout", "orion304")) return; - for (Player player : WaterSpoutAbility.instances.keySet()) { - if (!player.equals(sourceplayer)) { - Location loc1 = player.getLocation().getBlock().getLocation(); - loc0 = loc0.getBlock().getLocation(); - double dx = loc1.getX() - loc0.getX(); - double dy = loc1.getY() - loc0.getY(); - double dz = loc1.getZ() - loc0.getZ(); - - double distance = Math.sqrt(dx * dx + dz * dz); - - if (distance <= radius && dy > 0 && dy < WaterSpoutAbility.defaultheight) - WaterSpoutAbility.instances.get(player).remove(); - } - } - } +// public static void removeSpouts(Location loc0, double radius, +// Player sourceplayer) { +// if (!Methods.isAbilityInstalled("WaterSpout", "orion304")) return; +// for (Player player : WaterSpoutAbility.instances.keySet()) { +// if (!player.equals(sourceplayer)) { +// Location loc1 = player.getLocation().getBlock().getLocation(); +// loc0 = loc0.getBlock().getLocation(); +// double dx = loc1.getX() - loc0.getX(); +// double dy = loc1.getY() - loc0.getY(); +// double dz = loc1.getZ() - loc0.getZ(); +// +// double distance = Math.sqrt(dx * dx + dz * dz); +// +// if (distance <= radius && dy > 0 && dy < WaterSpoutAbility.defaultheight) +// WaterSpoutAbility.instances.get(player).remove(); +// } +// } +// } public static void thaw(Block block) { if (frozenblocks.containsKey(block)) { @@ -70,19 +49,6 @@ public class WaterCore { return false; } - if (waterWallAffectedBlocks.containsKey(to) - || waterWallAffectedBlocks.containsKey(from)) { - return false; - } - - if (waterwallblocks.containsKey(to) - || waterwallblocks.containsKey(from)) { - return false; - } -// if (WaveAbility.isBlockWave(to) || WaveAbility.isBlockWave(from)) { -// return false; -// } - if (TempBlock.isTempBlock(to) || TempBlock.isTempBlock(from)) { return false; } @@ -101,14 +67,14 @@ public class WaterCore { if (waterSpoutAffectedBlocks.containsKey(block)) return false; } - if (Methods.isAbilityInstalled("Surge", "orion304")) { - if (waterWallAffectedBlocks.containsKey(block)) - return false; - if (waterwallblocks.containsKey(block)) - return false; -// if (WaveAbility.isBlockWave(block)) +// if (Methods.isAbilityInstalled("Surge", "orion304")) { +// if (waterWallAffectedBlocks.containsKey(block)) // return false; - } +// if (waterwallblocks.containsKey(block)) +// return false; +//// if (WaveAbility.isBlockWave(block)) +//// return false; +// } if (TempBlock.isTempBlock(block)) return false; if (TempBlock.isTouchingTempBlock(block)) diff --git a/src/com/projectkorra/ProjectKorra/waterbending/WaterReturn.java b/src/com/projectkorra/ProjectKorra/waterbending/WaterReturn.java deleted file mode 100644 index a80344ab..00000000 --- a/src/com/projectkorra/ProjectKorra/waterbending/WaterReturn.java +++ /dev/null @@ -1,232 +0,0 @@ -package com.projectkorra.ProjectKorra.waterbending; - -import java.util.HashMap; -import java.util.concurrent.ConcurrentHashMap; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.PlayerInventory; -import org.bukkit.util.Vector; - -import com.projectkorra.ProjectKorra.Methods; -import com.projectkorra.ProjectKorra.TempBlock; -import com.projectkorra.abilities.IceSpike.IceSpike2; -import com.projectkorra.abilities.OctopusForm.OctopusFormAbility; -import com.projectkorra.abilities.Surge.WaterWall; -import com.projectkorra.abilities.Surge.WaveAbility; -import com.projectkorra.abilities.WaterManipulation.WaterManipulationAbility; - -public class WaterReturn { - - private static ConcurrentHashMap instances = new ConcurrentHashMap(); - // private static int ID = Integer.MIN_VALUE; - private static long interval = 50; - - private static final byte full = 0x0; - private static double range = 30; - - private Player player; - // private int id; - private Location location; - private TempBlock block; - private long time; - - public WaterReturn(Player player, Block block) { - if (instances.containsKey(player)) - return; - this.player = player; - location = block.getLocation(); - // if (!Tools.isRegionProtectedFromBuild(player, - // Abilities.WaterManipulation, location) - // && Tools.canBend(player, Abilities.WaterManipulation)) { - if (Methods.isAbilityInstalled("WaterManipulation", "orion304") && Methods.canBend(player.getName(), "WaterManipulation")) { - if (Methods.isTransparentToEarthbending(player, block) - && !block.isLiquid()) - this.block = new TempBlock(block, Material.WATER, full); - } - // } - // if (ID >= Integer.MAX_VALUE) { - // ID = Integer.MIN_VALUE; - // } - // id = ID++; - instances.put(player, this); - } - - private void progress() { - if (!hasEmptyWaterBottle()) { - remove(); - return; - } - - if (player.isDead() || !player.isOnline()) { - remove(); - return; - } - - if (player.getWorld() != location.getWorld()) { - remove(); - return; - } - - if (System.currentTimeMillis() < time + interval) - return; - - time = System.currentTimeMillis(); - - Vector direction = Methods - .getDirection(location, player.getEyeLocation()).normalize(); - location = location.clone().add(direction); - - if (location == null || block == null) { - remove(); - return; - } - - if (location.getBlock().equals(block.getLocation().getBlock())) - return; - - // if (Tools.isRegionProtectedFromBuild(player, - // Abilities.WaterManipulation, location)) { - // remove(); - // return; - // } - - if (location.distance(player.getEyeLocation()) > Methods - .waterbendingNightAugment(range, player.getWorld())) { - remove(); - return; - } - - if (location.distance(player.getEyeLocation()) <= 1.5) { - fillBottle(); - return; - } - - Block newblock = location.getBlock(); - if (Methods.isTransparentToEarthbending(player, newblock) - && !newblock.isLiquid()) { - block.revertBlock(); - block = new TempBlock(newblock, Material.WATER, full); - } else { - remove(); - return; - } - - } - - private void remove() { - if (block != null) { - block.revertBlock(); - block = null; - } - instances.remove(player); - } - - private boolean hasEmptyWaterBottle() { - PlayerInventory inventory = player.getInventory(); - if (inventory.contains(Material.GLASS_BOTTLE)) { - return true; - } - return false; - } - - private void fillBottle() { - PlayerInventory inventory = player.getInventory(); - if (inventory.contains(Material.GLASS_BOTTLE)) { - int index = inventory.first(Material.GLASS_BOTTLE); - ItemStack item = inventory.getItem(index); - if (item.getAmount() == 1) { - inventory.setItem(index, new ItemStack(Material.POTION)); - } else { - item.setAmount(item.getAmount() - 1); - inventory.setItem(index, item); - HashMap leftover = inventory - .addItem(new ItemStack(Material.POTION)); - for (int left : leftover.keySet()) { - player.getWorld().dropItemNaturally(player.getLocation(), - leftover.get(left)); - } - } - } - - remove(); - } - - private static boolean isBending(Player player) { - if (Methods.isAbilityInstalled("WaterManipulation", "orion304")) { - for (int id : WaterManipulationAbility.instances.keySet()) { - WaterManipulationAbility.instances.get(id); - if (WaterManipulationAbility.player.equals(player)) - return true; - } - } - if (Methods.isAbilityInstalled("OctopusForm", "orion304")) { - if (OctopusFormAbility.instances.containsKey(player)) - return true; - } - if (Methods.isAbilityInstalled("Surge", "orion304")) { - for (int id : WaveAbility.instances.keySet()) { - if (WaveAbility.instances.get(id).player.equals(player)) - return true; - } - for (int id : WaterWall.instances.keySet()) { - if (WaterWall.instances.get(id).player.equals(player)) - return true; - } - } - - if (Methods.isAbilityInstalled("IceSpike", "orion304")) { - if (IceSpike2.isBending(player)) - return true; - } - return false; - } - - public static boolean hasWaterBottle(Player player) { - if (instances.containsKey(player)) - return false; - if (isBending(player)) - return false; - PlayerInventory inventory = player.getInventory(); - return (inventory.contains(new ItemStack(Material.POTION), 1)); - } - - public static void emptyWaterBottle(Player player) { - PlayerInventory inventory = player.getInventory(); - int index = inventory.first(new ItemStack(Material.POTION)); - if (index != -1) { - ItemStack item = inventory.getItem(index); - if (item.getAmount() == 1) { - inventory.setItem(index, new ItemStack(Material.GLASS_BOTTLE)); - } else { - item.setAmount(item.getAmount() - 1); - inventory.setItem(index, item); - HashMap leftover = inventory - .addItem(new ItemStack(Material.GLASS_BOTTLE)); - for (int left : leftover.keySet()) { - player.getWorld().dropItemNaturally(player.getLocation(), - leftover.get(left)); - } - } - } - } - - public static void progressAll() { - for (Player player : instances.keySet()) { - instances.get(player).progress(); - } - } - - public static void removeAll() { - for (Player player : instances.keySet()) { - WaterReturn wr = instances.get(player); - if (wr.block != null) - wr.block.revertBlock(); - } - instances.clear(); - } - -} \ No newline at end of file