Lots of Small Changes

Removed WaterReturn (Each Ability is responsible for handling it)
Added FreezeMelt (Just contains the basic methods, not an ability)
Improved physics handling.
Removed WaterPassive where water would automatically spread (Until I
find a workaround, exponentially flooding worlds weren't very fun)
This commit is contained in:
MistPhizzle 2014-06-14 14:59:11 -04:00
parent 7c0a28be99
commit 41109c5251
6 changed files with 108 additions and 337 deletions

View file

@ -5,10 +5,6 @@
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/Bending Plugins/TagAPI.jar"/> <classpathentry kind="lib" path="C:/Users/Shawn/Documents/Bending Plugins/TagAPI.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/LocalServer/plugins/ProjectKorra/Abilities/RaiseEarth.jar"/> <classpathentry kind="lib" path="C:/Users/Shawn/Documents/LocalServer/plugins/ProjectKorra/Abilities/RaiseEarth.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/LocalServer/plugins/ProjectKorra/Abilities/OctopusForm.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/LocalServer/plugins/ProjectKorra/Abilities/WaterSpout.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/LocalServer/plugins/ProjectKorra/Abilities/WaterManipulation.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/LocalServer/plugins/ProjectKorra/Abilities/Surge.jar"/> <classpathentry kind="lib" path="C:/Users/Shawn/Documents/LocalServer/plugins/ProjectKorra/Abilities/Surge.jar"/>
<classpathentry kind="lib" path="C:/Users/Shawn/Documents/LocalServer/plugins/ProjectKorra/Abilities/IceSpike.jar"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>

View file

@ -18,7 +18,6 @@ import com.projectkorra.ProjectKorra.firebending.FirePassive;
import com.projectkorra.ProjectKorra.firebending.FireStream; import com.projectkorra.ProjectKorra.firebending.FireStream;
import com.projectkorra.ProjectKorra.waterbending.Plantbending; import com.projectkorra.ProjectKorra.waterbending.Plantbending;
import com.projectkorra.ProjectKorra.waterbending.WaterPassive; import com.projectkorra.ProjectKorra.waterbending.WaterPassive;
import com.projectkorra.ProjectKorra.waterbending.WaterReturn;
public class BendingManager implements Runnable { public class BendingManager implements Runnable {
@ -54,7 +53,6 @@ public class BendingManager implements Runnable {
EarthPassive.revertSands(); EarthPassive.revertSands();
Plantbending.regrow(); Plantbending.regrow();
handleDayNight(); handleDayNight();
WaterReturn.progressAll();
for (int id: FireStream.instances.keySet()) { for (int id: FireStream.instances.keySet()) {
FireStream.progress(id); FireStream.progress(id);

View file

@ -11,7 +11,6 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockFadeEvent; import org.bukkit.event.block.BlockFadeEvent;
import org.bukkit.event.block.BlockFormEvent; import org.bukkit.event.block.BlockFormEvent;
import org.bukkit.event.block.BlockFromToEvent; 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.EntityCombustEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent; 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.firebending.FireStream;
import com.projectkorra.ProjectKorra.waterbending.WaterCore; import com.projectkorra.ProjectKorra.waterbending.WaterCore;
import com.projectkorra.ProjectKorra.waterbending.WaterPassive; import com.projectkorra.ProjectKorra.waterbending.WaterPassive;
import com.projectkorra.abilities.Surge.WaterWall;
import com.projectkorra.abilities.Surge.WaveAbility;
public class PKListener implements Listener { public class PKListener implements Listener {
@ -48,7 +44,9 @@ public class PKListener implements Listener {
Block fromblock = event.getBlock(); Block fromblock = event.getBlock();
if (Methods.isWater(fromblock)) { if (Methods.isWater(fromblock)) {
if (!event.isCancelled()) { 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 @EventHandler
public void onPlayerDamage(EntityDamageEvent e) { public void onPlayerDamage(EntityDamageEvent e) {
Entity en = e.getEntity(); Entity en = e.getEntity();
@ -202,7 +166,9 @@ public class PKListener implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onBlockPhysics(BlockPhysicsEvent event) { public void onBlockPhysics(BlockPhysicsEvent event) {
Block block = event.getBlock(); 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) @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)

View file

@ -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<Block, Byte> frozenblocks = new ConcurrentHashMap<Block, Byte>();
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();
}
}

View file

@ -2,15 +2,10 @@ package com.projectkorra.ProjectKorra.waterbending;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import com.projectkorra.ProjectKorra.Methods; import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.TempBlock; import com.projectkorra.ProjectKorra.TempBlock;
import com.projectkorra.abilities.Surge.WaveAbility;
import com.projectkorra.abilities.WaterSpout.WaterSpoutAbility;
public class WaterCore { public class WaterCore {
@ -18,40 +13,24 @@ public class WaterCore {
public static ConcurrentHashMap<Block, Block> waterSpoutAffectedBlocks = new ConcurrentHashMap<Block, Block>(); public static ConcurrentHashMap<Block, Block> waterSpoutAffectedBlocks = new ConcurrentHashMap<Block, Block>();
public static ConcurrentHashMap<Block, Block> waterManipulationAffectedBlocks = new ConcurrentHashMap<Block, Block>(); public static ConcurrentHashMap<Block, Block> waterManipulationAffectedBlocks = new ConcurrentHashMap<Block, Block>();
public static ConcurrentHashMap<Block, Block> waterWallAffectedBlocks = new ConcurrentHashMap<Block, Block>(); // public static void removeSpouts(Location loc0, double radius,
public static ConcurrentHashMap<Block, Player> waterwallblocks = new ConcurrentHashMap<Block, Player>(); // Player sourceplayer) {
// if (!Methods.isAbilityInstalled("WaterSpout", "orion304")) return;
// for (Player player : WaterSpoutAbility.instances.keySet()) {
// if (!player.equals(sourceplayer)) {
public static void freeze(Player player, Block block) { // Location loc1 = player.getLocation().getBlock().getLocation();
// if (Methods.isRegionProtectedFromBuild(player, Abilities.PhaseChange, // loc0 = loc0.getBlock().getLocation();
// block.getLocation())) // double dx = loc1.getX() - loc0.getX();
// return; // double dy = loc1.getY() - loc0.getY();
if (TempBlock.isTempBlock(block)) // double dz = loc1.getZ() - loc0.getZ();
return; //
byte data = block.getData(); // double distance = Math.sqrt(dx * dx + dz * dz);
block.setType(Material.ICE); //
frozenblocks.put(block, data); // 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) { public static void thaw(Block block) {
if (frozenblocks.containsKey(block)) { if (frozenblocks.containsKey(block)) {
@ -70,19 +49,6 @@ public class WaterCore {
return false; 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)) { if (TempBlock.isTempBlock(to) || TempBlock.isTempBlock(from)) {
return false; return false;
} }
@ -101,14 +67,14 @@ public class WaterCore {
if (waterSpoutAffectedBlocks.containsKey(block)) if (waterSpoutAffectedBlocks.containsKey(block))
return false; return false;
} }
if (Methods.isAbilityInstalled("Surge", "orion304")) { // if (Methods.isAbilityInstalled("Surge", "orion304")) {
if (waterWallAffectedBlocks.containsKey(block)) // if (waterWallAffectedBlocks.containsKey(block))
return false;
if (waterwallblocks.containsKey(block))
return false;
// if (WaveAbility.isBlockWave(block))
// return false; // return false;
} // if (waterwallblocks.containsKey(block))
// return false;
//// if (WaveAbility.isBlockWave(block))
//// return false;
// }
if (TempBlock.isTempBlock(block)) if (TempBlock.isTempBlock(block))
return false; return false;
if (TempBlock.isTouchingTempBlock(block)) if (TempBlock.isTouchingTempBlock(block))

View file

@ -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<Player, WaterReturn> instances = new ConcurrentHashMap<Player, WaterReturn>();
// 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<Integer, ItemStack> 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<Integer, ItemStack> 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();
}
}