2014-06-12 23:21:20 +00:00
package com.projectkorra.ProjectKorra ;
2014-07-12 03:38:29 +00:00
import java.io.BufferedReader ;
import java.io.BufferedWriter ;
import java.io.DataInputStream ;
import java.io.DataOutputStream ;
import java.io.File ;
import java.io.FileInputStream ;
import java.io.FileOutputStream ;
import java.io.IOException ;
import java.io.InputStreamReader ;
import java.io.OutputStreamWriter ;
2014-06-12 23:21:20 +00:00
import java.sql.ResultSet ;
import java.sql.SQLException ;
import java.util.ArrayList ;
import java.util.Arrays ;
import java.util.Collection ;
import java.util.HashMap ;
import java.util.HashSet ;
import java.util.List ;
2014-06-28 21:06:05 +00:00
import java.util.Set ;
2014-06-12 23:21:20 +00:00
import java.util.UUID ;
2014-06-13 20:37:34 +00:00
import java.util.concurrent.ConcurrentHashMap ;
2014-06-12 23:21:20 +00:00
2014-06-28 20:25:27 +00:00
import me.ryanhamshire.GriefPrevention.GriefPrevention ;
import net.sacredlabyrinth.Phaed.PreciousStones.FieldFlag ;
import net.sacredlabyrinth.Phaed.PreciousStones.PreciousStones ;
2014-06-12 23:21:20 +00:00
import org.bukkit.Bukkit ;
2014-06-13 04:30:43 +00:00
import org.bukkit.ChatColor ;
2014-06-13 20:56:28 +00:00
import org.bukkit.Effect ;
2014-06-12 23:21:20 +00:00
import org.bukkit.Location ;
import org.bukkit.Material ;
import org.bukkit.World ;
import org.bukkit.World.Environment ;
import org.bukkit.block.Block ;
import org.bukkit.block.BlockFace ;
import org.bukkit.block.BlockState ;
import org.bukkit.entity.Entity ;
2014-06-25 15:44:02 +00:00
import org.bukkit.entity.FallingBlock ;
2014-06-12 23:21:20 +00:00
import org.bukkit.entity.LivingEntity ;
import org.bukkit.entity.Player ;
import org.bukkit.event.entity.EntityDamageByEntityEvent ;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause ;
import org.bukkit.inventory.ItemStack ;
2014-06-28 20:25:27 +00:00
import org.bukkit.plugin.Plugin ;
import org.bukkit.plugin.PluginManager ;
2014-08-11 14:11:49 +00:00
import org.bukkit.potion.PotionEffectType ;
2014-06-12 23:21:20 +00:00
import org.bukkit.util.Vector ;
2014-08-16 23:50:54 +00:00
import com.griefcraft.lwc.LWC ;
import com.griefcraft.lwc.LWCPlugin ;
import com.griefcraft.model.Protection ;
2014-06-28 20:25:27 +00:00
import com.massivecraft.factions.listeners.FactionsListenerMain ;
2014-07-29 21:13:51 +00:00
import com.massivecraft.massivecore.ps.PS ;
2014-06-28 20:25:27 +00:00
import com.palmergames.bukkit.towny.Towny ;
import com.palmergames.bukkit.towny.TownyMessaging ;
import com.palmergames.bukkit.towny.TownySettings ;
import com.palmergames.bukkit.towny.object.Coord ;
import com.palmergames.bukkit.towny.object.PlayerCache ;
import com.palmergames.bukkit.towny.object.PlayerCache.TownBlockStatus ;
import com.palmergames.bukkit.towny.object.TownyPermission ;
import com.palmergames.bukkit.towny.object.TownyUniverse ;
import com.palmergames.bukkit.towny.object.TownyWorld ;
import com.palmergames.bukkit.towny.object.WorldCoord ;
import com.palmergames.bukkit.towny.utils.PlayerCacheUtil ;
import com.palmergames.bukkit.towny.war.flagwar.TownyWar ;
import com.palmergames.bukkit.towny.war.flagwar.TownyWarConfig ;
2014-06-12 23:21:20 +00:00
import com.projectkorra.ProjectKorra.Ability.AbilityModule ;
import com.projectkorra.ProjectKorra.Ability.AbilityModuleManager ;
2014-06-25 00:42:24 +00:00
import com.projectkorra.ProjectKorra.Ability.AvatarState ;
2014-07-23 01:18:37 +00:00
import com.projectkorra.ProjectKorra.Utilities.ParticleEffect ;
2014-06-30 14:27:11 +00:00
import com.projectkorra.ProjectKorra.airbending.AirBlast ;
import com.projectkorra.ProjectKorra.airbending.AirBubble ;
import com.projectkorra.ProjectKorra.airbending.AirBurst ;
import com.projectkorra.ProjectKorra.airbending.AirScooter ;
import com.projectkorra.ProjectKorra.airbending.AirShield ;
2014-06-26 20:51:46 +00:00
import com.projectkorra.ProjectKorra.airbending.AirSpout ;
2014-06-30 14:27:11 +00:00
import com.projectkorra.ProjectKorra.airbending.AirSuction ;
import com.projectkorra.ProjectKorra.airbending.AirSwipe ;
2014-08-24 07:37:01 +00:00
import com.projectkorra.ProjectKorra.airbending.Breathbending ;
2014-06-30 14:27:11 +00:00
import com.projectkorra.ProjectKorra.airbending.Tornado ;
2014-07-29 15:42:26 +00:00
import com.projectkorra.ProjectKorra.chiblocking.Paralyze ;
2014-06-30 14:27:11 +00:00
import com.projectkorra.ProjectKorra.chiblocking.RapidPunch ;
import com.projectkorra.ProjectKorra.earthbending.Catapult ;
import com.projectkorra.ProjectKorra.earthbending.CompactColumn ;
import com.projectkorra.ProjectKorra.earthbending.EarthArmor ;
import com.projectkorra.ProjectKorra.earthbending.EarthBlast ;
2014-06-25 15:58:02 +00:00
import com.projectkorra.ProjectKorra.earthbending.EarthColumn ;
2014-06-12 23:21:20 +00:00
import com.projectkorra.ProjectKorra.earthbending.EarthPassive ;
2014-06-30 14:27:11 +00:00
import com.projectkorra.ProjectKorra.earthbending.EarthTunnel ;
import com.projectkorra.ProjectKorra.earthbending.Shockwave ;
import com.projectkorra.ProjectKorra.earthbending.Tremorsense ;
import com.projectkorra.ProjectKorra.firebending.Cook ;
import com.projectkorra.ProjectKorra.firebending.FireBlast ;
import com.projectkorra.ProjectKorra.firebending.FireBurst ;
import com.projectkorra.ProjectKorra.firebending.FireJet ;
import com.projectkorra.ProjectKorra.firebending.FireShield ;
import com.projectkorra.ProjectKorra.firebending.FireStream ;
import com.projectkorra.ProjectKorra.firebending.Fireball ;
import com.projectkorra.ProjectKorra.firebending.Illumination ;
import com.projectkorra.ProjectKorra.firebending.Lightning ;
import com.projectkorra.ProjectKorra.firebending.WallOfFire ;
import com.projectkorra.ProjectKorra.waterbending.Bloodbending ;
2014-06-25 16:48:05 +00:00
import com.projectkorra.ProjectKorra.waterbending.FreezeMelt ;
2014-06-30 14:27:11 +00:00
import com.projectkorra.ProjectKorra.waterbending.IceSpike ;
import com.projectkorra.ProjectKorra.waterbending.IceSpike2 ;
import com.projectkorra.ProjectKorra.waterbending.OctopusForm ;
import com.projectkorra.ProjectKorra.waterbending.Plantbending ;
2014-06-25 17:08:36 +00:00
import com.projectkorra.ProjectKorra.waterbending.WaterManipulation ;
2014-06-30 14:27:11 +00:00
import com.projectkorra.ProjectKorra.waterbending.WaterReturn ;
2014-06-26 20:51:46 +00:00
import com.projectkorra.ProjectKorra.waterbending.WaterSpout ;
2014-06-30 14:27:11 +00:00
import com.projectkorra.ProjectKorra.waterbending.WaterWall ;
import com.projectkorra.ProjectKorra.waterbending.Wave ;
2014-06-28 20:25:27 +00:00
import com.sk89q.worldguard.bukkit.WorldGuardPlugin ;
2014-06-28 21:06:05 +00:00
import com.sk89q.worldguard.protection.flags.DefaultFlag ;
2014-06-12 23:21:20 +00:00
public class Methods {
static ProjectKorra plugin ;
2014-07-29 11:34:46 +00:00
private static final ItemStack pickaxe = new ItemStack ( Material . DIAMOND_PICKAXE ) ;
2014-06-28 21:06:05 +00:00
2014-06-13 20:37:34 +00:00
public static ConcurrentHashMap < Block , Information > movedearth = new ConcurrentHashMap < Block , Information > ( ) ;
public static ConcurrentHashMap < Integer , Information > tempair = new ConcurrentHashMap < Integer , Information > ( ) ;
2014-08-03 04:55:52 +00:00
public static ConcurrentHashMap < String , Long > cooldowns = new ConcurrentHashMap < String , Long > ( ) ;
2014-06-13 20:37:34 +00:00
public static ArrayList < Block > tempnophysics = new ArrayList < Block > ( ) ;
2014-07-29 11:34:46 +00:00
private static Integer [ ] plantIds = { 6 , 18 , 31 , 32 , 37 , 38 , 39 , 40 , 59 , 81 , 83 , 86 , 99 , 100 , 103 , 104 , 105 , 106 , 111 , 161 , 175 } ;
2014-06-13 20:37:34 +00:00
2014-07-29 11:34:46 +00:00
public static Integer [ ] transparentToEarthbending = { 0 , 6 , 8 , 9 , 10 , 11 , 30 , 31 , 32 , 37 , 38 , 39 , 40 , 50 , 51 , 59 , 78 , 83 , 106 } ;
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 } ;
/ * *
* Checks to see if an AbilityExists . Uses method { @link # getAbility ( String ) } to check if it exists .
* @param string Ability Name
* @return true if ability exists
* /
public static boolean abilityExists ( String string ) {
if ( getAbility ( string ) = = null ) return false ;
return true ;
}
public static void addTempAirBlock ( Block block ) {
if ( movedearth . containsKey ( block ) ) {
Information info = movedearth . get ( block ) ;
block . setType ( Material . AIR ) ;
info . setTime ( System . currentTimeMillis ( ) ) ;
movedearth . remove ( block ) ;
tempair . put ( info . getID ( ) , info ) ;
} else {
Information info = new Information ( ) ;
info . setBlock ( block ) ;
info . setState ( block . getState ( ) ) ;
info . setTime ( System . currentTimeMillis ( ) ) ;
block . setType ( Material . AIR ) ;
tempair . put ( info . getID ( ) , info ) ;
}
}
/ * *
* Binds a Ability to the hotbar slot that the player is on .
* @param player The player to bind to
* @param ability The ability name to Bind
* @see { @link # bindAbility ( Player , String , int ) }
* /
public static void bindAbility ( Player player , String ability ) {
int slot = player . getInventory ( ) . getHeldItemSlot ( ) + 1 ;
BendingPlayer bPlayer = getBendingPlayer ( player . getName ( ) ) ;
bPlayer . abilities . put ( slot , ability ) ;
if ( isAirAbility ( ability ) ) {
player . sendMessage ( getAirColor ( ) + " Succesfully bound " + ability + " to slot " + slot ) ;
}
else if ( isWaterAbility ( ability ) ) {
player . sendMessage ( getWaterColor ( ) + " Succesfully bound " + ability + " to slot " + slot ) ;
}
else if ( isEarthAbility ( ability ) ) {
player . sendMessage ( getEarthColor ( ) + " Succesfully bound " + ability + " to slot " + slot ) ;
}
else if ( isFireAbility ( ability ) ) {
player . sendMessage ( getFireColor ( ) + " Succesfully bound " + ability + " to slot " + slot ) ;
}
else if ( isChiAbility ( ability ) ) {
player . sendMessage ( getChiColor ( ) + " Succesfully bound " + ability + " to slot " + slot ) ;
} else {
player . sendMessage ( getAvatarColor ( ) + " Successfully bound " + ability + " to slot " + slot ) ;
}
}
/ * *
* Binds a Ability to a specific hotbar slot .
* @param player The player to bind to
* @param ability
* @param slot
* @see { @link # bindAbility ( Player , String ) }
* /
public static void bindAbility ( Player player , String ability , int slot ) {
BendingPlayer bPlayer = getBendingPlayer ( player . getName ( ) ) ;
bPlayer . abilities . put ( slot , ability ) ;
if ( isAirAbility ( ability ) ) {
player . sendMessage ( getAirColor ( ) + " Succesfully bound " + ability + " to slot " + slot ) ;
}
else if ( isWaterAbility ( ability ) ) {
player . sendMessage ( getWaterColor ( ) + " Succesfully bound " + ability + " to slot " + slot ) ;
}
else if ( isEarthAbility ( ability ) ) {
player . sendMessage ( getEarthColor ( ) + " Succesfully bound " + ability + " to slot " + slot ) ;
}
else if ( isFireAbility ( ability ) ) {
player . sendMessage ( getFireColor ( ) + " Succesfully bound " + ability + " to slot " + slot ) ;
}
else if ( isChiAbility ( ability ) ) {
player . sendMessage ( getChiColor ( ) + " Succesfully bound " + ability + " to slot " + slot ) ;
} else {
player . sendMessage ( getAvatarColor ( ) + " Successfully bound " + ability + " to slot " + slot ) ;
}
}
/ * *
* Breaks a block and sets it to { @link Material # AIR AIR } .
* @param block The block to break
* /
public static void breakBlock ( Block block ) {
block . breakNaturally ( new ItemStack ( Material . AIR ) ) ;
}
/ * *
* Checks to see if a Player is effected by BloodBending .
* @param player The player to check
* < p >
* @return true If { @link # isChiBlocked ( String ) } is true
* < br / >
* false If player is BloodBender and Bending is toggled on , or if player is in AvatarState
* < / p >
* /
public static boolean canBeBloodbent ( Player player ) {
if ( AvatarState . isAvatarState ( player ) )
return false ;
if ( isChiBlocked ( player . getName ( ) ) )
return true ;
if ( canBend ( player . getName ( ) , " Bloodbending " ) & & Methods . getBendingPlayer ( player . getName ( ) ) . isToggled )
return false ;
return true ;
}
/ * *
* Checks to see if a Player can bend a specific Ability .
* @param player The player name to check
* @param ability The Ability name to check
* @return true If player can bend specified ability and has the permissions to do so
* /
public static boolean canBend ( String player , String ability ) {
2014-06-12 23:21:20 +00:00
BendingPlayer bPlayer = getBendingPlayer ( player ) ;
2014-07-29 11:34:46 +00:00
Player p = Bukkit . getPlayer ( player ) ;
2014-07-20 00:18:14 +00:00
if ( bPlayer = = null ) return false ;
2014-07-29 11:34:46 +00:00
if ( Commands . isToggledForAll ) return false ;
if ( ! bPlayer . isToggled ) return false ;
if ( p = = null ) return false ;
2014-08-03 04:55:52 +00:00
if ( cooldowns . containsKey ( p . getName ( ) ) ) {
if ( cooldowns . get ( p . getName ( ) ) + ProjectKorra . plugin . getConfig ( ) . getLong ( " Properties.GlobalCooldown " ) > = System . currentTimeMillis ( ) ) {
return false ;
}
cooldowns . remove ( p . getName ( ) ) ;
}
2014-08-10 23:30:09 +00:00
if ( bPlayer . blockedChi ) return false ;
2014-08-18 01:55:00 +00:00
// if (bPlayer.isChiBlocked()) return false;
2014-07-29 11:34:46 +00:00
if ( ! p . hasPermission ( " bending.ability. " + ability ) ) return false ;
if ( isAirAbility ( ability ) & & ! isBender ( player , Element . Air ) ) return false ;
if ( isWaterAbility ( ability ) & & ! isBender ( player , Element . Water ) ) return false ;
if ( isEarthAbility ( ability ) & & ! isBender ( player , Element . Earth ) ) return false ;
if ( isFireAbility ( ability ) & & ! isBender ( player , Element . Fire ) ) return false ;
if ( isChiAbility ( ability ) & & ! isBender ( player , Element . Chi ) ) return false ;
if ( isRegionProtectedFromBuild ( p , ability , p . getLocation ( ) ) ) return false ;
2014-07-29 15:42:26 +00:00
if ( Paralyze . isParalyzed ( p ) | | Bloodbending . isBloodbended ( p ) ) return false ;
2014-07-29 11:34:46 +00:00
return true ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
public static boolean canBendPassive ( String player , Element element ) {
BendingPlayer bPlayer = getBendingPlayer ( player ) ;
Player p = Bukkit . getPlayer ( player ) ;
if ( bPlayer = = null ) return false ;
if ( p = = null ) return false ;
if ( ! p . hasPermission ( " bending. " + element . toString ( ) . toLowerCase ( ) + " .passive " ) ) return false ;
if ( ! bPlayer . isToggled ) return false ;
if ( ! bPlayer . hasElement ( element ) ) return false ;
if ( isRegionProtectedFromBuild ( p , null , p . getLocation ( ) ) ) return false ;
return true ;
}
/ * *
* Checks to see if a player can BloodBend .
* @param player The player to check
* @return true If player has permission node " bending.earth.bloodbending "
* /
public static boolean canBloodbend ( Player player ) {
if ( player . hasPermission ( " bending.ability.bloodbending " ) ) return true ;
return false ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
/ * *
* Checks to see if a player can MetalBend .
* @param player The player to check
* @return true If player has permission node " bending.earth.metalbending "
* /
public static boolean canMetalbend ( Player player ) {
if ( player . hasPermission ( " bending.earth.metalbending " ) ) return true ;
return false ;
}
2014-07-29 14:15:35 +00:00
2014-07-29 11:34:46 +00:00
/ * *
* Checks to see if a player can PlantBend .
* @param player The player to check
* @return true If player has permission node " bending.ability.plantbending "
* /
public static boolean canPlantbend ( Player player ) {
return player . hasPermission ( " bending.ability.plantbending " ) ;
}
2014-07-29 14:15:35 +00:00
2014-07-29 11:34:46 +00:00
/ * *
* Creates a { @link BendingPlayer } with the data from the database . This runs when a player logs in .
* @param uuid The UUID of the player
* @param player The player name
* @throws SQLException
* /
2014-06-12 23:21:20 +00:00
public static void createBendingPlayer ( UUID uuid , String player ) {
ResultSet rs2 = DBConnection . sql . readQuery ( " SELECT * FROM pk_players WHERE uuid = ' " + uuid . toString ( ) + " ' " ) ;
try {
if ( ! rs2 . next ( ) ) { // Data doesn't exist, we want a completely new player.
new BendingPlayer ( uuid , player , new ArrayList < Element > ( ) , new HashMap < Integer , String > ( ) , false ) ;
DBConnection . sql . modifyQuery ( " INSERT INTO pk_players (uuid, player) VALUES (' " + uuid . toString ( ) + " ', ' " + player + " ') " ) ;
ProjectKorra . log . info ( " Created new BendingPlayer for " + player ) ;
} else {
// The player has at least played before.
String player2 = rs2 . getString ( " player " ) ;
if ( ! player . equalsIgnoreCase ( player2 ) ) DBConnection . sql . modifyQuery ( " UPDATE pk_players SET player = ' " + player2 + " ' WHERE uuid = ' " + uuid . toString ( ) + " ' " ) ; // They have changed names.
String element = rs2 . getString ( " element " ) ;
String permaremoved = rs2 . getString ( " permaremoved " ) ;
boolean p = false ;
ArrayList < Element > elements = new ArrayList < Element > ( ) ;
if ( element ! = null ) { // Player has an element.
if ( element . contains ( " a " ) ) elements . add ( Element . Air ) ;
if ( element . contains ( " w " ) ) elements . add ( Element . Water ) ;
if ( element . contains ( " e " ) ) elements . add ( Element . Earth ) ;
if ( element . contains ( " f " ) ) elements . add ( Element . Fire ) ;
if ( element . contains ( " c " ) ) elements . add ( Element . Chi ) ;
}
HashMap < Integer , String > abilities = new HashMap < Integer , String > ( ) ;
2014-07-29 11:34:46 +00:00
for ( int i = 1 ; i < = 9 ; i + + ) {
String slot = rs2 . getString ( " slot " + i ) ;
if ( slot ! = null ) abilities . put ( i , slot ) ;
}
2014-06-12 23:21:20 +00:00
2014-07-04 02:49:49 +00:00
if ( permaremoved = = null ) {
p = false ;
}
else if ( permaremoved . equals ( " true " ) ) {
p = true ;
}
else if ( permaremoved . equals ( " false " ) ) {
p = false ;
}
2014-06-12 23:21:20 +00:00
new BendingPlayer ( uuid , player2 , elements , abilities , p ) ;
}
} catch ( SQLException ex ) {
ex . printStackTrace ( ) ;
}
}
2014-07-29 14:15:35 +00:00
2014-07-29 11:34:46 +00:00
/ * *
* Damages an Entity by amount of damage specified . Starts a { @link EntityDamageByEntityEvent } .
* @param player The player dealing the damage
* @param entity The entity that is receiving the damage
* @param damage The amount of damage to deal
* /
public static void damageEntity ( Player player , Entity entity , double damage ) {
if ( entity instanceof LivingEntity ) {
( ( LivingEntity ) entity ) . damage ( damage , player ) ;
( ( LivingEntity ) entity ) . setLastDamageCause (
new EntityDamageByEntityEvent ( player , entity , DamageCause . CUSTOM , damage ) ) ;
2014-07-17 01:15:10 +00:00
}
2014-06-12 23:21:20 +00:00
}
2014-07-20 00:18:14 +00:00
2014-07-29 11:34:46 +00:00
/ * *
* Deserializes the configuration file " bendingPlayers.yml " of the old BendingPlugin and creates a converted . yml ready for conversion .
* @throws IOException If the " bendingPlayers.yml " file is not found
* /
2014-07-12 14:17:26 +00:00
public static void deserializeFile ( ) {
File readFile = new File ( " . " , " bendingPlayers.yml " ) ;
2014-07-20 00:18:14 +00:00
File writeFile = new File ( " . " , " converted.yml " ) ;
if ( readFile . exists ( ) ) {
try {
DataInputStream input = new DataInputStream ( new FileInputStream ( readFile ) ) ;
BufferedReader reader = new BufferedReader ( new InputStreamReader ( input ) ) ;
DataOutputStream output = new DataOutputStream ( new FileOutputStream ( writeFile ) ) ;
BufferedWriter writer = new BufferedWriter ( new OutputStreamWriter ( output ) ) ;
String line ;
while ( ( line = reader . readLine ( ) ) ! = null ) {
if ( ! line . trim ( ) . contains ( " ==: BendingPlayer " ) ) {
writer . write ( line + " \ n " ) ;
}
}
2014-06-12 23:21:20 +00:00
2014-07-20 00:18:14 +00:00
reader . close ( ) ;
input . close ( ) ;
writer . close ( ) ;
output . close ( ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
}
}
}
2014-07-20 20:27:40 +00:00
2014-07-29 11:34:46 +00:00
/ * *
* Drops a { @code Collection < ItemStack > } of items on a specified block .
* @param block The block to drop items on .
* @param items The items to drop .
* /
public static void dropItems ( Block block , Collection < ItemStack > items ) {
for ( ItemStack item : items )
block . getWorld ( ) . dropItem ( block . getLocation ( ) , item ) ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
/ * *
* Gets the ability from specified ability name .
* @param string The ability name
* @return Ability name if found in { @link AbilityModuleManager # abilities }
* < p >
* else null
* < / p >
* /
2014-06-12 23:21:20 +00:00
public static String getAbility ( String string ) {
for ( String st : AbilityModuleManager . abilities ) {
if ( st . equalsIgnoreCase ( string ) ) return st ;
}
return null ;
}
2014-07-29 11:34:46 +00:00
/ * *
* Gets the Element color from the Ability name specified .
* @param ability The ability name
* < p >
* @return
* { @link # getChiColor ( ) } < br / >
* { @link # getAirColor ( ) } < br / >
* { @link # getWaterColor ( ) } < br / >
* { @link # getEarthColor ( ) } < br / >
* { @link # getFireColor ( ) } < br / >
* else { @link # getAvatarColor ( ) }
* < / p >
* /
public static ChatColor getAbilityColor ( String ability ) {
if ( AbilityModuleManager . chiabilities . contains ( ability ) ) return getChiColor ( ) ;
if ( AbilityModuleManager . airbendingabilities . contains ( ability ) ) return getAirColor ( ) ;
if ( AbilityModuleManager . waterbendingabilities . contains ( ability ) ) return getWaterColor ( ) ;
if ( AbilityModuleManager . earthbendingabilities . contains ( ability ) ) return getEarthColor ( ) ;
if ( AbilityModuleManager . firebendingabilities . contains ( ability ) ) return getFireColor ( ) ;
else return getAvatarColor ( ) ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
/ * *
* Gets the AirColor from the config .
* @return Config specified ChatColor
* /
public static ChatColor getAirColor ( ) {
return ChatColor . valueOf ( plugin . getConfig ( ) . getString ( " Properties.Chat.Colors.Air " ) ) ;
}
/ * *
* Gets the AvatarColor from the config .
* @return Config specified ChatColor
* /
public static ChatColor getAvatarColor ( ) {
return ChatColor . valueOf ( plugin . getConfig ( ) . getString ( " Properties.Chat.Colors.Avatar " ) ) ;
}
/ * *
* Gets a { @link BendingPlayer } from specified player name .
* @param player The name of the Player
* @return The BendingPlayer object if { @link BendingPlayer # players } contains the player name
* /
public static BendingPlayer getBendingPlayer ( String player ) {
return BendingPlayer . players . get ( player ) ;
}
/ * *
* Gets a { @code List < Blocks > } within the specified radius around the specified location .
* @param location The base location
* @param radius The block radius from location to include within the list of blocks
* @return The list of Blocks
* /
public static List < Block > getBlocksAroundPoint ( Location location , double radius ) {
List < Block > blocks = new ArrayList < Block > ( ) ;
int xorg = location . getBlockX ( ) ;
int yorg = location . getBlockY ( ) ;
int zorg = location . getBlockZ ( ) ;
int r = ( int ) radius * 4 ;
for ( int x = xorg - r ; x < = xorg + r ; x + + ) {
for ( int y = yorg - r ; y < = yorg + r ; y + + ) {
for ( int z = zorg - r ; z < = zorg + r ; z + + ) {
Block block = location . getWorld ( ) . getBlockAt ( x , y , z ) ;
if ( block . getLocation ( ) . distance ( location ) < = radius ) {
blocks . add ( block ) ;
}
}
}
2014-06-30 00:44:05 +00:00
}
2014-07-29 11:34:46 +00:00
return blocks ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
/ * *
* Gets the Ability bound to the slot that the player is in .
* @param player The player to check
* @return The Ability name bounded to the slot
* < p >
* else null
* < / p >
* /
public static String getBoundAbility ( Player player ) {
BendingPlayer bPlayer = getBendingPlayer ( player . getName ( ) ) ;
if ( bPlayer = = null ) return null ;
int slot = player . getInventory ( ) . getHeldItemSlot ( ) + 1 ;
return bPlayer . abilities . get ( slot ) ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
public static BlockFace getCardinalDirection ( Vector vector ) {
BlockFace [ ] faces = { BlockFace . NORTH , BlockFace . NORTH_EAST ,
BlockFace . EAST , BlockFace . SOUTH_EAST , BlockFace . SOUTH ,
BlockFace . SOUTH_WEST , BlockFace . WEST , BlockFace . NORTH_WEST } ;
Vector n , ne , e , se , s , sw , w , nw ;
w = new Vector ( - 1 , 0 , 0 ) ;
n = new Vector ( 0 , 0 , - 1 ) ;
s = n . clone ( ) . multiply ( - 1 ) ;
e = w . clone ( ) . multiply ( - 1 ) ;
ne = n . clone ( ) . add ( e . clone ( ) ) . normalize ( ) ;
se = s . clone ( ) . add ( e . clone ( ) ) . normalize ( ) ;
nw = n . clone ( ) . add ( w . clone ( ) ) . normalize ( ) ;
sw = s . clone ( ) . add ( w . clone ( ) ) . normalize ( ) ;
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
Vector [ ] vectors = { n , ne , e , se , s , sw , w , nw } ;
double comp = 0 ;
int besti = 0 ;
for ( int i = 0 ; i < vectors . length ; i + + ) {
double dot = vector . dot ( vectors [ i ] ) ;
if ( dot > comp ) {
comp = dot ;
besti = i ;
2014-06-12 23:21:20 +00:00
}
}
2014-07-29 11:34:46 +00:00
return faces [ besti ] ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
/ * *
* Gets the ChiColor from the config .
* @return Config specified ChatColor
* /
public static ChatColor getChiColor ( ) {
return ChatColor . valueOf ( plugin . getConfig ( ) . getString ( " Properties.Chat.Colors.Chi " ) ) ;
}
public static List < Location > getCircle ( Location loc , int radius , int height , boolean hollow , boolean sphere , int plusY ) {
List < Location > circleblocks = new ArrayList < Location > ( ) ;
int cx = loc . getBlockX ( ) ;
int cy = loc . getBlockY ( ) ;
int cz = loc . getBlockZ ( ) ;
for ( int x = cx - radius ; x < = cx + radius ; x + + ) {
for ( int z = cz - radius ; z < = cz + radius ; z + + ) {
for ( int y = ( sphere ? cy - radius : cy ) ; y < ( sphere ? cy + radius : cy + height ) ; y + + ) {
double dist = ( cx - x ) * ( cx - x ) + ( cz - z ) * ( cz - z ) + ( sphere ? ( cy - y ) * ( cy - y ) : 0 ) ;
if ( dist < radius * radius & & ! ( hollow & & dist < ( radius - 1 ) * ( radius - 1 ) ) ) {
Location l = new Location ( loc . getWorld ( ) , x , y + plusY , z ) ;
circleblocks . add ( l ) ;
}
}
2014-06-12 23:21:20 +00:00
}
}
2014-07-29 11:34:46 +00:00
return circleblocks ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
public static Vector getDirection ( Location location , Location destination ) {
double x1 , y1 , z1 ;
double x0 , y0 , z0 ;
x1 = destination . getX ( ) ;
y1 = destination . getY ( ) ;
z1 = destination . getZ ( ) ;
x0 = location . getX ( ) ;
y0 = location . getY ( ) ;
z0 = location . getZ ( ) ;
return new Vector ( x1 - x0 , y1 - y0 , z1 - z0 ) ;
2014-06-12 23:21:20 +00:00
}
public static double getDistanceFromLine ( Vector line , Location pointonline ,
Location point ) {
Vector AP = new Vector ( ) ;
double Ax , Ay , Az ;
Ax = pointonline . getX ( ) ;
Ay = pointonline . getY ( ) ;
Az = pointonline . getZ ( ) ;
double Px , Py , Pz ;
Px = point . getX ( ) ;
Py = point . getY ( ) ;
Pz = point . getZ ( ) ;
AP . setX ( Px - Ax ) ;
AP . setY ( Py - Ay ) ;
AP . setZ ( Pz - Az ) ;
return ( AP . crossProduct ( line ) . length ( ) ) / ( line . length ( ) ) ;
}
2014-07-29 11:34:46 +00:00
/ * *
* Gets a { @code Collection < ItemStack > } of item drops from a single block .
* @param block The single block
* @param type The Material type to change the block into
* @param data The block data to change the block into
* @param breakitem Unused
* @return The item drops fromt the specified block
* /
public static Collection < ItemStack > getDrops ( Block block , Material type , byte data , ItemStack breakitem ) {
BlockState tempstate = block . getState ( ) ;
block . setType ( type ) ;
block . setData ( data ) ;
Collection < ItemStack > item = block . getDrops ( ) ;
tempstate . update ( true ) ;
return item ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
public static int getEarthbendableBlocksLength ( Player player , Block block , Vector direction , int maxlength ) {
Location location = block . getLocation ( ) ;
direction = direction . normalize ( ) ;
double j ;
for ( int i = 0 ; i < = maxlength ; i + + ) {
j = ( double ) i ;
if ( ! isEarthbendable ( player , location . clone ( ) . add ( direction . clone ( ) . multiply ( j ) ) . getBlock ( ) ) ) {
return i ;
2014-06-29 01:56:10 +00:00
}
}
2014-07-29 11:34:46 +00:00
return maxlength ;
2014-06-29 01:56:10 +00:00
}
2014-07-20 00:18:14 +00:00
2014-07-29 11:34:46 +00:00
/ * *
* Gets the EarthColor from the config .
* @return Config specified ChatColor
* /
public static ChatColor getEarthColor ( ) {
return ChatColor . valueOf ( plugin . getConfig ( ) . getString ( " Properties.Chat.Colors.Earth " ) ) ;
2014-07-01 00:48:07 +00:00
}
2014-06-29 01:56:10 +00:00
2014-07-29 11:34:46 +00:00
public static Block getEarthSourceBlock ( Player player , double range ) {
Block testblock = player . getTargetBlock ( getTransparentEarthbending ( ) , ( int ) range ) ;
if ( isEarthbendable ( player , testblock ) )
return testblock ;
Location location = player . getEyeLocation ( ) ;
Vector vector = location . getDirection ( ) . clone ( ) . normalize ( ) ;
for ( double i = 0 ; i < = range ; i + + ) {
Block block = location . clone ( ) . add ( vector . clone ( ) . multiply ( i ) ) . getBlock ( ) ;
if ( isRegionProtectedFromBuild ( player , " RaiseEarth " , location ) )
continue ;
if ( isEarthbendable ( player , block ) ) {
return block ;
}
}
return null ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
/ * *
* Gets a { @code List < Entity > } of entities around a specified radius from the specified area
* @param location The base location
* @param radius The radius of blocks to look for entities from the location
* @return A list of entities around a point
* /
public static List < Entity > getEntitiesAroundPoint ( Location location , double radius ) {
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
List < Entity > entities = location . getWorld ( ) . getEntities ( ) ;
List < Entity > list = location . getWorld ( ) . getEntities ( ) ;
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
for ( Entity entity : entities ) {
if ( entity . getWorld ( ) ! = location . getWorld ( ) ) {
list . remove ( entity ) ;
} else if ( entity . getLocation ( ) . distance ( location ) > radius ) {
list . remove ( entity ) ;
}
}
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
return list ;
2014-06-12 23:21:20 +00:00
}
2014-06-29 01:56:10 +00:00
2014-07-29 11:34:46 +00:00
/ * *
* Gets the firebending dayfactor from the config multiplied by a specific value if it is day .
* @param value The value
* @param world The world to pass into { @link # isDay ( World ) }
* < p >
* @return value DayFactor multiplied by specified value when { @link # isDay ( World ) } is true
* < br / > else < br / >
* value The specified value in the parameters
* < / p >
* @see { @link # getFirebendingDayAugment ( World ) }
* /
public static double getFirebendingDayAugment ( double value , World world ) {
if ( isDay ( world ) ) {
return plugin . getConfig ( ) . getDouble ( " Properties.Fire.DayFactor " ) * value ;
}
return value ;
}
2014-06-29 01:56:10 +00:00
2014-07-29 11:34:46 +00:00
/ * *
* Gets the firebending dayfactor from the config if it is day .
* @param world The world to pass into { @link # isDay ( World ) }
* < p >
* @return value DayFactor multiplied by specified value when { @link # isDay ( World ) } is true
* < br / > else < br / >
* value The value of 1
* < / p >
* @see { @link # getFirebendingDayAugment ( double , World ) }
* /
public static double getFirebendingDayAugment ( World world ) {
if ( isDay ( world ) ) return plugin . getConfig ( ) . getDouble ( " Properties.Fire.DayFactor " ) ;
return 1 ;
2014-06-28 23:31:26 +00:00
}
2014-06-29 01:56:10 +00:00
2014-07-29 11:34:46 +00:00
/ * *
* Gets the FireColor from the config .
* @return Config specified ChatColor
* /
public static ChatColor getFireColor ( ) {
return ChatColor . valueOf ( plugin . getConfig ( ) . getString ( " Properties.Chat.Colors.Fire " ) ) ;
}
public static int getIntCardinalDirection ( Vector vector ) {
BlockFace face = getCardinalDirection ( vector ) ;
switch ( face ) {
case SOUTH :
return 7 ;
case SOUTH_WEST :
return 6 ;
case WEST :
return 3 ;
case NORTH_WEST :
return 0 ;
case NORTH :
return 1 ;
case NORTH_EAST :
return 2 ;
case EAST :
return 5 ;
case SOUTH_EAST :
return 8 ;
}
return 4 ;
2014-06-28 23:31:26 +00:00
}
2014-07-20 00:18:14 +00:00
2014-07-29 11:34:46 +00:00
/ * *
* Gets the MetalBendingColor from the config .
* @return Config specified ChatColor
* /
2014-07-10 14:38:26 +00:00
public static ChatColor getMetalbendingColor ( ) {
return ChatColor . valueOf ( plugin . getConfig ( ) . getString ( " Properties.Chat.Colors.Metalbending " ) ) ;
}
2014-06-29 01:56:10 +00:00
2014-07-29 11:34:46 +00:00
public static Vector getOrthogonalVector ( Vector axis , double degrees , double length ) {
Vector ortho = new Vector ( axis . getY ( ) , - axis . getX ( ) , 0 ) ;
ortho = ortho . normalize ( ) ;
ortho = ortho . multiply ( length ) ;
return rotateVectorAroundVector ( axis , ortho , degrees ) ;
2014-06-28 23:31:26 +00:00
}
2014-06-29 01:56:10 +00:00
2014-07-29 11:34:46 +00:00
public static Location getPointOnLine ( Location origin , Location target , double distance ) {
return origin . clone ( ) . add (
getDirection ( origin , target ) . normalize ( ) . multiply ( distance ) ) ;
2014-06-28 23:31:26 +00:00
}
2014-06-29 01:56:10 +00:00
2014-07-29 11:34:46 +00:00
public static Entity getTargetedEntity ( Player player , double range , List < Entity > avoid ) {
double longestr = range + 1 ;
Entity target = null ;
Location origin = player . getEyeLocation ( ) ;
Vector direction = player . getEyeLocation ( ) . getDirection ( ) . normalize ( ) ;
for ( Entity entity : origin . getWorld ( ) . getEntities ( ) ) {
if ( avoid . contains ( entity ) )
continue ;
if ( entity . getLocation ( ) . distance ( origin ) < longestr
& & getDistanceFromLine ( direction , origin , entity . getLocation ( ) ) < 2
& & ( entity instanceof LivingEntity )
& & entity . getEntityId ( ) ! = player . getEntityId ( )
& & entity . getLocation ( ) . distance ( origin . clone ( ) . add ( direction ) ) <
entity . getLocation ( ) . distance ( origin . clone ( ) . add ( direction . clone ( ) . multiply ( - 1 ) ) ) ) {
target = entity ;
longestr = entity . getLocation ( ) . distance ( origin ) ;
}
}
return target ;
2014-06-28 23:31:26 +00:00
}
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
public static Location getTargetedLocation ( Player player , double originselectrange , Integer . . . nonOpaque2 ) {
Location origin = player . getEyeLocation ( ) ;
Vector direction = origin . getDirection ( ) ;
HashSet < Byte > trans = new HashSet < Byte > ( ) ;
trans . add ( ( byte ) 0 ) ;
if ( nonOpaque2 = = null ) {
trans = null ;
} else {
for ( int i : nonOpaque2 ) {
trans . add ( ( byte ) i ) ;
}
}
Block block = player . getTargetBlock ( trans , ( int ) originselectrange + 1 ) ;
double distance = block . getLocation ( ) . distance ( origin ) - 1 . 5 ;
Location location = origin . add ( direction . multiply ( distance ) ) ;
return location ;
2014-06-13 04:30:43 +00:00
}
2014-06-13 20:37:34 +00:00
2014-07-29 11:34:46 +00:00
public static Location getTargetedLocation ( Player player , int range ) {
return getTargetedLocation ( player , range , 0 ) ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
public static HashSet < Byte > getTransparentEarthbending ( ) {
HashSet < Byte > set = new HashSet < Byte > ( ) ;
for ( int i : transparentToEarthbending ) {
set . add ( ( byte ) i ) ;
}
return set ;
}
2014-07-20 00:18:14 +00:00
2014-07-29 11:34:46 +00:00
public static double getWaterbendingNightAugment ( World world ) {
if ( isNight ( world ) & & isFullMoon ( world ) ) return plugin . getConfig ( ) . getDouble ( " Properties.Water.FullMoonFactor " ) ;
if ( isNight ( world ) ) return plugin . getConfig ( ) . getDouble ( " Properties.Water.NightFactor " ) ;
return 1 ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
/ * *
* Gets the WaterColor from the config .
* @return Config specified ChatColor
* /
public static ChatColor getWaterColor ( ) {
return ChatColor . valueOf ( plugin . getConfig ( ) . getString ( " Properties.Chat.Colors.Water " ) ) ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
public static Block getWaterSourceBlock ( Player player , double range ,
boolean plantbending ) {
Location location = player . getEyeLocation ( ) ;
Vector vector = location . getDirection ( ) . clone ( ) . normalize ( ) ;
for ( double i = 0 ; i < = range ; i + + ) {
Block block = location . clone ( ) . add ( vector . clone ( ) . multiply ( i ) )
. getBlock ( ) ;
if ( isRegionProtectedFromBuild ( player , " WaterManipulation " ,
location ) )
continue ;
if ( isWaterbendable ( block , player )
& & ( ! isPlant ( block ) | | plantbending ) ) {
if ( TempBlock . isTempBlock ( block ) ) {
TempBlock tb = TempBlock . get ( block ) ;
byte full = 0x0 ;
if ( tb . state . getRawData ( ) ! = full
& & ( tb . state . getType ( ) ! = Material . WATER | | tb . state
. getType ( ) ! = Material . STATIONARY_WATER ) ) {
continue ;
}
}
return block ;
}
}
return null ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
public static boolean hasPermission ( Player player , String ability ) {
if ( player . hasPermission ( " bending.ability. " + ability ) ) return true ;
return false ;
}
public static boolean isAbilityInstalled ( String name , String author ) {
String ability = getAbility ( name ) ;
if ( ability = = null ) return false ;
if ( AbilityModuleManager . authors . get ( name ) . equalsIgnoreCase ( author ) ) return true ;
2014-06-12 23:21:20 +00:00
return false ;
}
2014-07-29 11:34:46 +00:00
public static boolean isAdjacentToFrozenBlock ( Block block ) {
BlockFace [ ] faces = { BlockFace . DOWN , BlockFace . UP , BlockFace . NORTH ,
BlockFace . EAST , BlockFace . WEST , BlockFace . SOUTH } ;
boolean adjacent = false ;
for ( BlockFace face : faces ) {
if ( FreezeMelt . frozenblocks . containsKey ( ( block . getRelative ( face ) ) ) )
adjacent = true ;
}
return adjacent ;
}
2014-06-12 23:21:20 +00:00
public static boolean isAdjacentToThreeOrMoreSources ( Block block ) {
2014-06-25 16:34:45 +00:00
if ( TempBlock . isTempBlock ( block ) )
return false ;
2014-06-12 23:21:20 +00:00
int sources = 0 ;
byte full = 0x0 ;
2014-06-25 16:34:45 +00:00
BlockFace [ ] faces = { BlockFace . EAST , BlockFace . WEST , BlockFace . NORTH ,
BlockFace . SOUTH } ;
for ( BlockFace face : faces ) {
2014-06-12 23:21:20 +00:00
Block blocki = block . getRelative ( face ) ;
2014-06-25 16:34:45 +00:00
if ( ( blocki . getType ( ) = = Material . WATER | | blocki . getType ( ) = = Material . STATIONARY_WATER )
& & blocki . getData ( ) = = full
& & WaterManipulation . canPhysicsChange ( blocki ) )
2014-06-14 18:59:36 +00:00
sources + + ;
if ( FreezeMelt . frozenblocks . containsKey ( blocki ) ) {
2014-06-25 16:34:45 +00:00
if ( FreezeMelt . frozenblocks . get ( blocki ) = = full )
sources + + ;
} else if ( blocki . getType ( ) = = Material . ICE ) {
2014-06-14 18:59:36 +00:00
sources + + ;
}
2014-06-12 23:21:20 +00:00
}
2014-06-25 16:34:45 +00:00
if ( sources > = 2 )
return true ;
2014-06-12 23:21:20 +00:00
return false ;
}
2014-07-29 11:34:46 +00:00
public static boolean isAirAbility ( String ability ) {
return AbilityModuleManager . airbendingabilities . contains ( ability ) ;
}
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
public static boolean isBender ( String player , Element element ) {
BendingPlayer bPlayer = getBendingPlayer ( player ) ;
if ( bPlayer = = null ) return false ;
if ( bPlayer . hasElement ( element ) ) return true ;
return false ;
}
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
public static boolean isChiAbility ( String ability ) {
return AbilityModuleManager . chiabilities . contains ( ability ) ;
}
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
public static boolean isChiBlocked ( String player ) {
return Methods . getBendingPlayer ( player ) . isChiBlocked ( ) ;
}
public static boolean isDay ( World world ) {
long time = world . getTime ( ) ;
2014-08-07 16:30:09 +00:00
if ( world . getEnvironment ( ) = = Environment . NETHER | | world . getEnvironment ( ) = = Environment . THE_END ) return true ;
2014-07-29 11:34:46 +00:00
if ( time > = 23500 | | time < = 12500 ) {
return true ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
return false ;
}
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
public static boolean isEarthAbility ( String ability ) {
return AbilityModuleManager . earthbendingabilities . contains ( ability ) ;
2014-06-12 23:21:20 +00:00
}
public static boolean isEarthbendable ( Player player , Block block ) {
2014-06-28 21:06:05 +00:00
return isEarthbendable ( player , " RaiseEarth " , block ) ;
}
public static boolean isEarthbendable ( Player player , String ability ,
Block block ) {
if ( isRegionProtectedFromBuild ( player , ability ,
block . getLocation ( ) ) )
return false ;
2014-06-12 23:21:20 +00:00
Material material = block . getType ( ) ;
2014-06-28 21:06:05 +00:00
for ( String s : ProjectKorra . plugin . getConfig ( ) . getStringList ( " Properties.Earth.EarthbendableBlocks " ) ) {
2014-06-12 23:21:20 +00:00
if ( material = = Material . getMaterial ( s ) ) {
2014-06-28 21:06:05 +00:00
2014-06-12 23:21:20 +00:00
return true ;
2014-06-28 21:06:05 +00:00
2014-06-12 23:21:20 +00:00
}
2014-06-28 21:06:05 +00:00
2014-06-12 23:21:20 +00:00
}
return false ;
}
2014-07-29 11:34:46 +00:00
public static boolean isFireAbility ( String ability ) {
return AbilityModuleManager . firebendingabilities . contains ( ability ) ;
2014-06-12 23:21:20 +00:00
}
2014-06-12 23:37:51 +00:00
2014-07-29 11:34:46 +00:00
public static boolean isFullMoon ( World world ) {
long days = world . getFullTime ( ) / 24000 ;
long phase = days % 8 ;
if ( phase = = 0 ) {
return true ;
}
return false ;
}
2014-06-12 23:37:51 +00:00
2014-07-29 11:34:46 +00:00
public static boolean isHarmlessAbility ( String ability ) {
return AbilityModuleManager . harmlessabilities . contains ( ability ) ;
2014-06-12 23:37:51 +00:00
}
2014-07-29 11:34:46 +00:00
public static boolean isImportEnabled ( ) {
return plugin . getConfig ( ) . getBoolean ( " Properties.ImportEnabled " ) ;
}
2014-06-12 23:37:51 +00:00
2014-07-29 11:34:46 +00:00
public static boolean isMeltable ( Block block ) {
2014-08-04 12:33:33 +00:00
if ( block . getType ( ) = = Material . ICE | | block . getType ( ) = = Material . SNOW ) {
2014-07-29 11:34:46 +00:00
return true ;
}
return false ;
}
2014-06-12 23:37:51 +00:00
2014-07-29 11:34:46 +00:00
public static boolean isMetalbendingAbility ( String ability ) {
if ( AbilityModuleManager . metalbendingabilities . contains ( ability ) ) return true ;
return false ;
2014-06-12 23:37:51 +00:00
}
2014-07-29 11:34:46 +00:00
public static boolean isMetalBlock ( Block block ) {
if ( block . getType ( ) = = Material . GOLD_BLOCK
| | block . getType ( ) = = Material . IRON_BLOCK
| | block . getType ( ) = = Material . IRON_ORE
| | block . getType ( ) = = Material . GOLD_ORE
| | block . getType ( ) = = Material . QUARTZ_BLOCK
| | block . getType ( ) = = Material . QUARTZ_ORE )
2014-06-12 23:21:20 +00:00
return true ;
return false ;
}
2014-07-29 11:34:46 +00:00
public static boolean isNight ( World world ) {
if ( world . getEnvironment ( ) = = Environment . NETHER | | world . getEnvironment ( ) = = Environment . THE_END ) {
2014-06-28 21:06:05 +00:00
return false ;
2014-06-25 15:44:02 +00:00
}
2014-07-29 11:34:46 +00:00
long time = world . getTime ( ) ;
if ( time > = 12950 & & time < = 23050 ) {
2014-06-13 20:43:23 +00:00
return true ;
}
return false ;
}
2014-06-13 20:56:28 +00:00
public static boolean isObstructed ( Location location1 , Location location2 ) {
Vector loc1 = location1 . toVector ( ) ;
Vector loc2 = location2 . toVector ( ) ;
Vector direction = loc2 . subtract ( loc1 ) ;
direction . normalize ( ) ;
Location loc ;
double max = location1 . distance ( location2 ) ;
for ( double i = 0 ; i < = max ; i + + ) {
loc = location1 . clone ( ) . add ( direction . clone ( ) . multiply ( i ) ) ;
Material type = loc . getBlock ( ) . getType ( ) ;
if ( type ! = Material . AIR
& & ! Arrays . asList ( transparentToEarthbending ) . contains (
type . getId ( ) ) )
return true ;
}
return false ;
}
2014-07-29 11:34:46 +00:00
public static boolean isPlant ( Block block ) {
if ( Arrays . asList ( plantIds ) . contains ( block . getTypeId ( ) ) ) return true ;
return false ;
2014-06-13 20:56:28 +00:00
}
2014-07-29 12:09:46 +00:00
public static boolean isRegionProtectedFromBuild ( Player player , String ability , Location loc ) {
2014-06-13 20:56:28 +00:00
2014-07-29 11:34:46 +00:00
boolean allowharmless = plugin . getConfig ( ) . getBoolean ( " Properties.RegionProtection.AllowHarmlessAbilities " ) ;
boolean respectWorldGuard = plugin . getConfig ( ) . getBoolean ( " Properties.RegionProtection.RespectWorldGuard " ) ;
boolean respectPreciousStones = plugin . getConfig ( ) . getBoolean ( " Properties.RegionProtection.RespectPreciousStones " ) ;
boolean respectFactions = plugin . getConfig ( ) . getBoolean ( " Properties.RegionProtection.RespectFactions " ) ;
boolean respectTowny = plugin . getConfig ( ) . getBoolean ( " Properties.RegionProtection.RespectTowny " ) ;
boolean respectGriefPrevention = plugin . getConfig ( ) . getBoolean ( " Properties.RegionProtection.RespectGriefPrevention " ) ;
2014-08-16 23:50:54 +00:00
boolean respectLWC = plugin . getConfig ( ) . getBoolean ( " Properties.RegionProtection.RespectLWC " ) ;
2014-06-27 03:08:41 +00:00
2014-07-29 11:34:46 +00:00
Set < String > ignite = AbilityModuleManager . igniteabilities ;
Set < String > explode = AbilityModuleManager . explodeabilities ;
2014-06-27 03:08:41 +00:00
2014-07-29 11:34:46 +00:00
if ( ability = = null & & allowharmless )
return false ;
if ( isHarmlessAbility ( ability ) & & allowharmless )
return false ;
2014-06-27 03:08:41 +00:00
2014-07-29 11:34:46 +00:00
PluginManager pm = Bukkit . getPluginManager ( ) ;
2014-06-27 03:08:41 +00:00
2014-07-29 11:34:46 +00:00
Plugin wgp = pm . getPlugin ( " WorldGuard " ) ;
Plugin psp = pm . getPlugin ( " PreciousStone " ) ;
Plugin fcp = pm . getPlugin ( " Factions " ) ;
Plugin twnp = pm . getPlugin ( " Towny " ) ;
Plugin gpp = pm . getPlugin ( " GriefPrevention " ) ;
2014-07-29 21:13:51 +00:00
Plugin massivecore = pm . getPlugin ( " MassiveCore " ) ;
2014-08-16 23:50:54 +00:00
Plugin lwc = pm . getPlugin ( " LWC " ) ;
2014-06-27 03:08:41 +00:00
2014-08-16 23:50:54 +00:00
2014-08-18 01:55:00 +00:00
2014-07-29 11:34:46 +00:00
for ( Location location : new Location [ ] { loc , player . getLocation ( ) } ) {
2014-06-27 03:08:41 +00:00
2014-08-16 23:50:54 +00:00
if ( lwc ! = null & & respectLWC ) {
2014-08-18 01:55:00 +00:00
LWCPlugin lwcp = ( LWCPlugin ) lwc ;
LWC lwc2 = lwcp . getLWC ( ) ;
2014-08-16 23:50:54 +00:00
Protection protection = lwc2 . getProtectionCache ( ) . getProtection ( location . getBlock ( ) ) ;
if ( protection ! = null ) {
if ( ! lwc2 . canAccessProtection ( player , protection ) ) {
return true ;
}
}
}
2014-07-29 11:34:46 +00:00
if ( wgp ! = null & & respectWorldGuard ) {
WorldGuardPlugin wg = ( WorldGuardPlugin ) Bukkit
. getPluginManager ( ) . getPlugin ( " WorldGuard " ) ;
if ( ! player . isOnline ( ) )
return true ;
2014-06-27 03:08:41 +00:00
2014-07-29 11:34:46 +00:00
if ( ignite . contains ( ability ) ) {
if ( ! wg . hasPermission ( player , " worldguard.override.lighter " ) ) {
if ( wg . getGlobalStateManager ( ) . get ( location . getWorld ( ) ) . blockLighter )
return true ;
if ( ! wg . getGlobalRegionManager ( ) . hasBypass ( player ,
location . getWorld ( ) )
& & ! wg . getGlobalRegionManager ( )
. get ( location . getWorld ( ) )
. getApplicableRegions ( location )
. allows ( DefaultFlag . LIGHTER ,
wg . wrapPlayer ( player ) ) )
return true ;
}
2014-06-27 03:08:41 +00:00
2014-07-29 11:34:46 +00:00
}
if ( explode . contains ( ability ) ) {
if ( wg . getGlobalStateManager ( ) . get ( location . getWorld ( ) ) . blockTNTExplosions )
return true ;
if ( ! wg . getGlobalRegionManager ( ) . get ( location . getWorld ( ) )
. getApplicableRegions ( location )
. allows ( DefaultFlag . TNT ) )
return true ;
}
2014-06-13 20:56:28 +00:00
2014-07-29 11:34:46 +00:00
if ( ( ! ( wg . getGlobalRegionManager ( ) . canBuild ( player , location ) ) | | ! ( wg
. getGlobalRegionManager ( )
. canConstruct ( player , location ) ) ) ) {
return true ;
}
}
2014-06-13 20:56:28 +00:00
2014-07-29 11:34:46 +00:00
if ( psp ! = null & & respectPreciousStones ) {
PreciousStones ps = ( PreciousStones ) psp ;
2014-06-24 22:39:33 +00:00
2014-07-29 11:34:46 +00:00
if ( ignite . contains ( ability ) ) {
if ( ps . getForceFieldManager ( ) . hasSourceField ( location ,
FieldFlag . PREVENT_FIRE ) )
return true ;
}
if ( explode . contains ( ability ) ) {
if ( ps . getForceFieldManager ( ) . hasSourceField ( location ,
FieldFlag . PREVENT_EXPLOSIONS ) )
return true ;
}
2014-06-13 20:37:34 +00:00
2014-07-29 11:34:46 +00:00
if ( ps . getForceFieldManager ( ) . hasSourceField ( location ,
FieldFlag . PREVENT_PLACE ) )
return true ;
}
2014-06-13 20:37:34 +00:00
2014-07-29 21:13:51 +00:00
if ( fcp ! = null & & massivecore ! = null & & respectFactions ) {
2014-07-29 12:09:46 +00:00
if ( ! FactionsListenerMain . canPlayerBuildAt ( player , PS . valueOf ( loc . getBlock ( ) ) , false ) ) {
2014-07-29 14:15:35 +00:00
return true ;
2014-07-29 12:09:46 +00:00
} else {
2014-07-29 14:15:35 +00:00
return false ;
}
2014-07-29 11:34:46 +00:00
}
if ( twnp ! = null & & respectTowny ) {
Towny twn = ( Towny ) twnp ;
WorldCoord worldCoord ;
try {
TownyWorld world = TownyUniverse . getDataSource ( ) . getWorld (
location . getWorld ( ) . getName ( ) ) ;
worldCoord = new WorldCoord ( world . getName ( ) ,
Coord . parseCoord ( location ) ) ;
boolean bBuild = PlayerCacheUtil . getCachePermission ( player ,
location , 3 , ( byte ) 0 ,
TownyPermission . ActionType . BUILD ) ;
if ( ignite . contains ( ability ) ) {
}
if ( explode . contains ( ability ) ) {
}
if ( ! bBuild ) {
PlayerCache cache = twn . getCache ( player ) ;
TownBlockStatus status = cache . getStatus ( ) ;
if ( ( ( status = = TownBlockStatus . ENEMY ) & & TownyWarConfig
. isAllowingAttacks ( ) ) ) {
try {
TownyWar . callAttackCellEvent ( twn , player ,
location . getBlock ( ) , worldCoord ) ;
} catch ( Exception e ) {
TownyMessaging . sendErrorMsg ( player ,
e . getMessage ( ) ) ;
}
return true ;
} else if ( status = = TownBlockStatus . WARZONE ) {
} else {
return true ;
}
if ( ( cache . hasBlockErrMsg ( ) ) )
TownyMessaging . sendErrorMsg ( player ,
cache . getBlockErrMsg ( ) ) ;
}
} catch ( Exception e1 ) {
TownyMessaging . sendErrorMsg ( player , TownySettings
. getLangString ( " msg_err_not_configured " ) ) ;
}
}
if ( gpp ! = null & & respectGriefPrevention ) {
String reason = GriefPrevention . instance . allowBuild ( player ,
location ) ;
if ( ignite . contains ( ability ) ) {
}
if ( explode . contains ( ability ) ) {
}
if ( reason ! = null )
return true ;
2014-07-20 20:27:40 +00:00
}
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
return false ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
public static boolean isSolid ( Block block ) {
if ( Arrays . asList ( nonOpaque ) . contains ( block . getTypeId ( ) ) ) return false ;
return true ;
2014-06-12 23:21:20 +00:00
}
2014-07-26 20:37:54 +00:00
2014-07-29 11:34:46 +00:00
public static boolean isTransparentToEarthbending ( Player player , Block block ) {
return isTransparentToEarthbending ( player , " RaiseEarth " , block ) ;
2014-07-23 01:18:37 +00:00
}
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
public static boolean isTransparentToEarthbending ( Player player ,
String ability , Block block ) {
if ( isRegionProtectedFromBuild ( player , ability ,
block . getLocation ( ) ) )
2014-06-12 23:21:20 +00:00
return false ;
2014-07-29 11:34:46 +00:00
if ( Arrays . asList ( transparentToEarthbending ) . contains ( block . getTypeId ( ) ) )
2014-06-12 23:21:20 +00:00
return true ;
return false ;
}
2014-07-29 11:34:46 +00:00
public static boolean isWater ( Block block ) {
if ( block . getType ( ) = = Material . WATER | | block . getType ( ) = = Material . STATIONARY_WATER ) return true ;
return false ;
2014-06-13 20:37:34 +00:00
}
2014-07-29 11:34:46 +00:00
public static boolean isWaterAbility ( String ability ) {
return AbilityModuleManager . waterbendingabilities . contains ( ability ) ;
2014-06-13 20:37:34 +00:00
}
2014-07-29 11:34:46 +00:00
public static boolean isWaterbendable ( Block block , Player player ) {
byte full = 0x0 ;
if ( TempBlock . isTempBlock ( block ) ) return false ;
if ( ( block . getType ( ) = = Material . WATER | | block . getType ( ) = = Material . STATIONARY_WATER ) & & block . getData ( ) = = full ) return true ;
if ( block . getType ( ) = = Material . ICE | | block . getType ( ) = = Material . SNOW ) return true ;
if ( block . getType ( ) = = Material . PACKED_ICE & & plugin . getConfig ( ) . getBoolean ( " Properties.Water.CanBendPackedIce " ) ) return true ;
if ( canPlantbend ( player ) & & isPlant ( block ) ) return true ;
return false ;
2014-06-25 00:42:24 +00:00
}
2014-06-25 15:44:02 +00:00
2014-07-29 11:34:46 +00:00
public static boolean isWeapon ( Material mat ) {
if ( mat = = null ) return false ;
if ( mat = = Material . WOOD_AXE | | mat = = Material . WOOD_PICKAXE
| | mat = = Material . WOOD_SPADE | | mat = = Material . WOOD_SWORD
| | mat = = Material . STONE_AXE | | mat = = Material . STONE_PICKAXE
| | mat = = Material . STONE_SPADE | | mat = = Material . STONE_SWORD
| | mat = = Material . IRON_AXE | | mat = = Material . IRON_PICKAXE
| | mat = = Material . IRON_SWORD | | mat = = Material . IRON_SPADE
| | mat = = Material . DIAMOND_AXE | | mat = = Material . DIAMOND_PICKAXE
| | mat = = Material . DIAMOND_SWORD | | mat = = Material . DIAMOND_SPADE )
return true ;
return false ;
2014-06-25 15:44:02 +00:00
}
public static void moveEarth ( Player player , Block block , Vector direction ,
int chainlength ) {
moveEarth ( player , block , direction , chainlength , true ) ;
}
public static boolean moveEarth ( Player player , Block block ,
Vector direction , int chainlength , boolean throwplayer ) {
2014-06-28 21:06:05 +00:00
if ( isEarthbendable ( player , block )
& & ! isRegionProtectedFromBuild ( player , " RaiseEarth " ,
block . getLocation ( ) ) ) {
2014-06-25 15:44:02 +00:00
boolean up = false ;
boolean down = false ;
Vector norm = direction . clone ( ) . normalize ( ) ;
if ( norm . dot ( new Vector ( 0 , 1 , 0 ) ) = = 1 ) {
up = true ;
} else if ( norm . dot ( new Vector ( 0 , - 1 , 0 ) ) = = 1 ) {
down = true ;
}
Vector negnorm = norm . clone ( ) . multiply ( - 1 ) ;
Location location = block . getLocation ( ) ;
ArrayList < Block > blocks = new ArrayList < Block > ( ) ;
for ( double j = - 2 ; j < = chainlength ; j + + ) {
Block checkblock = location . clone ( )
. add ( negnorm . clone ( ) . multiply ( j ) ) . getBlock ( ) ;
if ( ! tempnophysics . contains ( checkblock ) ) {
blocks . add ( checkblock ) ;
tempnophysics . add ( checkblock ) ;
}
}
Block affectedblock = location . clone ( ) . add ( norm ) . getBlock ( ) ;
if ( EarthPassive . isPassiveSand ( block ) ) {
EarthPassive . revertSand ( block ) ;
}
if ( affectedblock = = null )
return false ;
if ( isTransparentToEarthbending ( player , affectedblock ) ) {
if ( throwplayer ) {
for ( Entity entity : getEntitiesAroundPoint (
affectedblock . getLocation ( ) , 1 . 75 ) ) {
if ( entity instanceof LivingEntity ) {
LivingEntity lentity = ( LivingEntity ) entity ;
if ( lentity . getEyeLocation ( ) . getBlockX ( ) = = affectedblock
. getX ( )
& & lentity . getEyeLocation ( ) . getBlockZ ( ) = = affectedblock
. getZ ( ) )
if ( ! ( entity instanceof FallingBlock ) )
entity . setVelocity ( norm . clone ( ) . multiply (
. 75 ) ) ;
} else {
if ( entity . getLocation ( ) . getBlockX ( ) = = affectedblock
. getX ( )
& & entity . getLocation ( ) . getBlockZ ( ) = = affectedblock
. getZ ( ) )
if ( ! ( entity instanceof FallingBlock ) )
entity . setVelocity ( norm . clone ( ) . multiply (
. 75 ) ) ;
}
}
}
if ( up ) {
Block topblock = affectedblock . getRelative ( BlockFace . UP ) ;
if ( topblock . getType ( ) ! = Material . AIR ) {
breakBlock ( affectedblock ) ;
} else if ( ! affectedblock . isLiquid ( )
& & affectedblock . getType ( ) ! = Material . AIR ) {
moveEarthBlock ( affectedblock , topblock ) ;
}
} else {
breakBlock ( affectedblock ) ;
}
moveEarthBlock ( block , affectedblock ) ;
block . getWorld ( ) . playEffect ( block . getLocation ( ) ,
Effect . GHAST_SHOOT , 0 , 4 ) ;
for ( double i = 1 ; i < chainlength ; i + + ) {
affectedblock = location
. clone ( )
. add ( negnorm . getX ( ) * i , negnorm . getY ( ) * i ,
negnorm . getZ ( ) * i ) . getBlock ( ) ;
if ( ! isEarthbendable ( player , affectedblock ) ) {
if ( down ) {
if ( isTransparentToEarthbending ( player ,
affectedblock )
& & ! affectedblock . isLiquid ( )
& & affectedblock . getType ( ) ! = Material . AIR ) {
moveEarthBlock ( affectedblock , block ) ;
}
}
break ;
}
if ( EarthPassive . isPassiveSand ( affectedblock ) ) {
EarthPassive . revertSand ( affectedblock ) ;
}
if ( block = = null ) {
for ( Block checkblock : blocks ) {
tempnophysics . remove ( checkblock ) ;
}
return false ;
}
moveEarthBlock ( affectedblock , block ) ;
block = affectedblock ;
}
int i = chainlength ;
affectedblock = location
. clone ( )
. add ( negnorm . getX ( ) * i , negnorm . getY ( ) * i ,
negnorm . getZ ( ) * i ) . getBlock ( ) ;
if ( ! isEarthbendable ( player , affectedblock ) ) {
if ( down ) {
if ( isTransparentToEarthbending ( player , affectedblock )
& & ! affectedblock . isLiquid ( ) ) {
moveEarthBlock ( affectedblock , block ) ;
}
}
}
} else {
for ( Block checkblock : blocks ) {
tempnophysics . remove ( checkblock ) ;
}
return false ;
}
for ( Block checkblock : blocks ) {
tempnophysics . remove ( checkblock ) ;
}
return true ;
}
return false ;
}
2014-07-29 11:34:46 +00:00
public static void moveEarth ( Player player , Location location ,
Vector direction , int chainlength ) {
moveEarth ( player , location , direction , chainlength , true ) ;
}
public static void moveEarth ( Player player , Location location ,
Vector direction , int chainlength , boolean throwplayer ) {
Block block = location . getBlock ( ) ;
moveEarth ( player , block , direction , chainlength , throwplayer ) ;
}
2014-06-25 15:44:02 +00:00
2014-06-13 20:37:34 +00:00
public static void moveEarthBlock ( Block source , Block target ) {
byte full = 0x0 ;
Information info ;
if ( movedearth . containsKey ( source ) ) {
info = movedearth . get ( source ) ;
info . setTime ( System . currentTimeMillis ( ) ) ;
movedearth . remove ( source ) ;
movedearth . put ( target , info ) ;
} else {
info = new Information ( ) ;
info . setBlock ( source ) ;
info . setTime ( System . currentTimeMillis ( ) ) ;
info . setState ( source . getState ( ) ) ;
movedearth . put ( target , info ) ;
}
if ( isAdjacentToThreeOrMoreSources ( source ) ) {
source . setType ( Material . WATER ) ;
source . setData ( full ) ;
} else {
source . setType ( Material . AIR ) ;
}
if ( info . getState ( ) . getType ( ) = = Material . SAND ) {
target . setType ( Material . SANDSTONE ) ;
} else {
target . setType ( info . getState ( ) . getType ( ) ) ;
target . setData ( info . getState ( ) . getRawData ( ) ) ;
}
}
2014-07-30 02:30:59 +00:00
public static void playAirbendingParticles ( Location loc , int amount ) {
2014-07-29 14:15:35 +00:00
String particle = plugin . getConfig ( ) . getString ( " Properties.Air.Particles " ) ;
if ( particle = = null ) {
2014-07-30 02:30:59 +00:00
for ( int i = 0 ; i < amount ; i + + ) {
2014-07-29 14:15:35 +00:00
ParticleEffect . CLOUD . display ( loc , ( float ) Math . random ( ) , ( float ) Math . random ( ) , ( float ) Math . random ( ) , 0 , 1 ) ;
}
}
else if ( particle . equalsIgnoreCase ( " spell " ) ) {
2014-07-30 02:30:59 +00:00
for ( int i = 0 ; i < amount ; i + + ) {
2014-07-29 14:15:35 +00:00
ParticleEffect . SPELL . display ( loc , ( float ) Math . random ( ) , ( float ) Math . random ( ) , ( float ) Math . random ( ) , 0 , 1 ) ;
}
}
else if ( particle . equalsIgnoreCase ( " blacksmoke " ) ) {
2014-07-30 02:30:59 +00:00
for ( int i = 0 ; i < amount ; i + + ) {
2014-07-29 14:15:35 +00:00
ParticleEffect . SMOKE . display ( loc , ( float ) Math . random ( ) , ( float ) Math . random ( ) , ( float ) Math . random ( ) , 0 , 1 ) ;
}
}
else if ( particle . equalsIgnoreCase ( " smoke " ) ) {
2014-07-30 02:30:59 +00:00
for ( int i = 0 ; i < amount ; i + + ) {
2014-07-29 14:15:35 +00:00
ParticleEffect . CLOUD . display ( loc , ( float ) Math . random ( ) , ( float ) Math . random ( ) , ( float ) Math . random ( ) , 0 , 1 ) ;
}
}
else {
2014-07-30 02:30:59 +00:00
for ( int i = 0 ; i < amount ; i + + ) {
2014-07-29 14:15:35 +00:00
ParticleEffect . CLOUD . display ( loc , ( float ) Math . random ( ) , ( float ) Math . random ( ) , ( float ) Math . random ( ) , 0 , 1 ) ;
}
2014-06-13 20:37:34 +00:00
}
}
2014-07-29 11:34:46 +00:00
public static void playFocusWaterEffect ( Block block ) {
block . getWorld ( ) . playEffect ( block . getLocation ( ) , Effect . SMOKE , 4 , 20 ) ;
2014-06-13 20:37:34 +00:00
}
2014-07-29 11:34:46 +00:00
public static void reloadPlugin ( ) {
for ( Player player : Bukkit . getOnlinePlayers ( ) ) {
Methods . saveBendingPlayer ( player . getName ( ) ) ;
}
DBConnection . sql . close ( ) ;
plugin . reloadConfig ( ) ;
Methods . stopBending ( ) ;
DBConnection . host = plugin . getConfig ( ) . getString ( " Storage.MySQL.host " ) ;
DBConnection . port = plugin . getConfig ( ) . getInt ( " Storage.MySQL.port " ) ;
DBConnection . pass = plugin . getConfig ( ) . getString ( " Storage.MySQL.pass " ) ;
DBConnection . db = plugin . getConfig ( ) . getString ( " Storage.MySQL.db " ) ;
DBConnection . user = plugin . getConfig ( ) . getString ( " Storage.MySQL.user " ) ;
DBConnection . init ( ) ;
for ( Player player : Bukkit . getOnlinePlayers ( ) ) {
Methods . createBendingPlayer ( player . getUniqueId ( ) , player . getName ( ) ) ;
2014-06-13 20:37:34 +00:00
}
}
2014-07-29 11:34:46 +00:00
public static void removeAllEarthbendedBlocks ( ) {
for ( Block block : movedearth . keySet ( ) ) {
revertBlock ( block ) ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
for ( Integer i : tempair . keySet ( ) ) {
revertAirBlock ( i , true ) ;
2014-06-12 23:21:20 +00:00
}
}
2014-07-29 11:34:46 +00:00
public static void removeBlock ( Block block ) {
if ( isAdjacentToThreeOrMoreSources ( block ) ) {
block . setType ( Material . WATER ) ;
block . setData ( ( byte ) 0x0 ) ;
} else {
block . setType ( Material . AIR ) ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
}
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
public static void removeRevertIndex ( Block block ) {
if ( movedearth . containsKey ( block ) ) {
Information info = movedearth . get ( block ) ;
if ( block . getType ( ) = = Material . SANDSTONE
& & info . getType ( ) = = Material . SAND )
block . setType ( Material . SAND ) ;
if ( EarthColumn . blockInAllAffectedBlocks ( block ) )
EarthColumn . revertBlock ( block ) ;
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
EarthColumn . resetBlock ( block ) ;
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
movedearth . remove ( block ) ;
}
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
public static void removeSpouts ( Location location , double radius ,
Player sourceplayer ) {
WaterSpout . removeSpouts ( location , radius , sourceplayer ) ;
AirSpout . removeSpouts ( location , radius , sourceplayer ) ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
public static void removeSpouts ( Location location , Player sourceplayer ) {
removeSpouts ( location , 1 . 5 , sourceplayer ) ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
public static void removeUnusableAbilities ( String player ) {
BendingPlayer bPlayer = getBendingPlayer ( player ) ;
HashMap < Integer , String > slots = bPlayer . getAbilities ( ) ;
HashMap < Integer , String > finalabilities = new HashMap < Integer , String > ( ) ;
try {
for ( int i : slots . keySet ( ) ) {
if ( canBend ( player , slots . get ( i ) ) ) {
finalabilities . put ( i , slots . get ( i ) ) ;
}
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
bPlayer . abilities = finalabilities ;
} catch ( Exception ex ) {
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
}
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
public static void revertAirBlock ( int i ) {
revertAirBlock ( i , false ) ;
}
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
public static void revertAirBlock ( int i , boolean force ) {
if ( ! tempair . containsKey ( i ) )
return ;
Information info = tempair . get ( i ) ;
Block block = info . getState ( ) . getBlock ( ) ;
if ( block . getType ( ) ! = Material . AIR & & ! block . isLiquid ( ) ) {
if ( force | | ! movedearth . containsKey ( block ) ) {
dropItems (
block ,
getDrops ( block , info . getState ( ) . getType ( ) , info
. getState ( ) . getRawData ( ) , pickaxe ) ) ;
tempair . remove ( i ) ;
} else {
info . setTime ( info . getTime ( ) + 10000 ) ;
2014-06-12 23:21:20 +00:00
}
2014-07-29 11:34:46 +00:00
return ;
} else {
info . getState ( ) . update ( true ) ;
tempair . remove ( i ) ;
2014-06-12 23:21:20 +00:00
}
}
2014-07-29 11:34:46 +00:00
public static boolean revertBlock ( Block block ) {
byte full = 0x0 ;
if ( movedearth . containsKey ( block ) ) {
Information info = movedearth . get ( block ) ;
Block sourceblock = info . getState ( ) . getBlock ( ) ;
2014-06-28 21:06:05 +00:00
2014-07-29 11:34:46 +00:00
if ( info . getState ( ) . getType ( ) = = Material . AIR ) {
movedearth . remove ( block ) ;
return true ;
2014-06-28 20:08:54 +00:00
}
2014-07-29 11:34:46 +00:00
if ( block . equals ( sourceblock ) ) {
info . getState ( ) . update ( true ) ;
if ( EarthColumn . blockInAllAffectedBlocks ( sourceblock ) )
EarthColumn . revertBlock ( sourceblock ) ;
if ( EarthColumn . blockInAllAffectedBlocks ( block ) )
EarthColumn . revertBlock ( block ) ;
EarthColumn . resetBlock ( sourceblock ) ;
EarthColumn . resetBlock ( block ) ;
movedearth . remove ( block ) ;
return true ;
2014-06-28 20:08:54 +00:00
}
2014-07-29 11:34:46 +00:00
if ( movedearth . containsKey ( sourceblock ) ) {
addTempAirBlock ( block ) ;
movedearth . remove ( block ) ;
return true ;
2014-06-28 20:08:54 +00:00
}
2014-07-29 11:34:46 +00:00
if ( sourceblock . getType ( ) = = Material . AIR | | sourceblock . isLiquid ( ) ) {
info . getState ( ) . update ( true ) ;
} else {
dropItems (
block ,
getDrops ( block , info . getState ( ) . getType ( ) , info
. getState ( ) . getRawData ( ) , pickaxe ) ) ;
}
2014-06-28 20:08:54 +00:00
2014-07-29 11:34:46 +00:00
if ( isAdjacentToThreeOrMoreSources ( block ) ) {
block . setType ( Material . WATER ) ;
block . setData ( full ) ;
} else {
block . setType ( Material . AIR ) ;
}
2014-06-28 20:08:54 +00:00
2014-07-29 11:34:46 +00:00
if ( EarthColumn . blockInAllAffectedBlocks ( sourceblock ) )
EarthColumn . revertBlock ( sourceblock ) ;
if ( EarthColumn . blockInAllAffectedBlocks ( block ) )
EarthColumn . revertBlock ( block ) ;
EarthColumn . resetBlock ( sourceblock ) ;
EarthColumn . resetBlock ( block ) ;
movedearth . remove ( block ) ;
}
return true ;
}
public static Vector rotateVectorAroundVector ( Vector axis , Vector rotator ,
double degrees ) {
double angle = Math . toRadians ( degrees ) ;
Vector rotation = axis . clone ( ) ;
Vector rotate = rotator . clone ( ) ;
rotation = rotation . normalize ( ) ;
2014-06-28 20:08:54 +00:00
2014-07-29 11:34:46 +00:00
Vector thirdaxis = rotation . crossProduct ( rotate ) . normalize ( )
. multiply ( rotate . length ( ) ) ;
2014-06-28 20:08:54 +00:00
2014-07-29 11:34:46 +00:00
return rotate . multiply ( Math . cos ( angle ) ) . add (
thirdaxis . multiply ( Math . sin ( angle ) ) ) ;
}
2014-06-28 20:08:54 +00:00
2014-07-29 11:34:46 +00:00
public static void saveBendingPlayer ( String player ) {
BendingPlayer bPlayer = BendingPlayer . players . get ( player ) ;
if ( bPlayer = = null ) return ;
String uuid = bPlayer . uuid . toString ( ) ;
2014-06-28 20:08:54 +00:00
2014-07-29 11:34:46 +00:00
StringBuilder elements = new StringBuilder ( ) ;
if ( bPlayer . hasElement ( Element . Air ) ) elements . append ( " a " ) ;
if ( bPlayer . hasElement ( Element . Water ) ) elements . append ( " w " ) ;
if ( bPlayer . hasElement ( Element . Earth ) ) elements . append ( " e " ) ;
if ( bPlayer . hasElement ( Element . Fire ) ) elements . append ( " f " ) ;
if ( bPlayer . hasElement ( Element . Chi ) ) elements . append ( " c " ) ;
2014-06-28 20:08:54 +00:00
2014-07-29 11:34:46 +00:00
HashMap < Integer , String > abilities = bPlayer . abilities ;
2014-06-28 20:08:54 +00:00
2014-07-29 11:34:46 +00:00
for ( int i = 1 ; i < = 9 ; i + + ) {
DBConnection . sql . modifyQuery ( " UPDATE pk_players SET slot " + i + " = ' " + ( abilities . get ( i ) = = null ? null : abilities . get ( i ) ) + " ' WHERE uuid = ' " + uuid + " ' " ) ;
}
2014-06-28 20:08:54 +00:00
2014-07-29 11:34:46 +00:00
DBConnection . sql . modifyQuery ( " UPDATE pk_players SET element = ' " + elements + " ' WHERE uuid = ' " + uuid + " ' " ) ;
boolean permaRemoved = bPlayer . permaRemoved ;
2014-06-28 20:08:54 +00:00
2014-08-13 21:46:30 +00:00
DBConnection . sql . modifyQuery ( " UPDATE pk_players SET permaremoved = ' " + ( permaRemoved ? " true " : " false " ) + " ' WHERE uuid = ' " + uuid + " ' " ) ;
2014-07-29 11:34:46 +00:00
}
2014-06-28 20:08:54 +00:00
2014-07-29 11:34:46 +00:00
public static void stopBending ( ) {
List < AbilityModule > abilities = AbilityModuleManager . ability ;
for ( AbilityModule ab : abilities ) {
ab . stop ( ) ;
2014-06-28 20:08:54 +00:00
}
2014-07-29 11:34:46 +00:00
AirBlast . removeAll ( ) ;
AirBubble . removeAll ( ) ;
AirShield . instances . clear ( ) ;
AirSuction . instances . clear ( ) ;
AirScooter . removeAll ( ) ;
AirSpout . removeAll ( ) ;
AirSwipe . instances . clear ( ) ;
Tornado . instances . clear ( ) ;
AirBurst . removeAll ( ) ;
2014-06-28 20:08:54 +00:00
2014-07-29 11:34:46 +00:00
Catapult . removeAll ( ) ;
CompactColumn . removeAll ( ) ;
EarthBlast . removeAll ( ) ;
EarthColumn . removeAll ( ) ;
EarthPassive . removeAll ( ) ;
EarthArmor . removeAll ( ) ;
EarthTunnel . instances . clear ( ) ;
Shockwave . removeAll ( ) ;
Tremorsense . removeAll ( ) ;
2014-07-20 00:18:14 +00:00
2014-07-29 11:34:46 +00:00
FreezeMelt . removeAll ( ) ;
IceSpike . removeAll ( ) ;
IceSpike2 . removeAll ( ) ;
WaterManipulation . removeAll ( ) ;
WaterSpout . removeAll ( ) ;
WaterWall . removeAll ( ) ;
Wave . removeAll ( ) ;
Plantbending . regrowAll ( ) ;
OctopusForm . removeAll ( ) ;
Bloodbending . instances . clear ( ) ;
2014-07-20 00:18:14 +00:00
2014-07-29 11:34:46 +00:00
FireStream . removeAll ( ) ;
Fireball . removeAll ( ) ;
WallOfFire . instances . clear ( ) ;
Lightning . instances . clear ( ) ;
FireShield . removeAll ( ) ;
FireBlast . removeAll ( ) ;
FireBurst . removeAll ( ) ;
FireJet . instances . clear ( ) ;
Cook . removeAll ( ) ;
Illumination . removeAll ( ) ;
2014-06-28 20:08:54 +00:00
2014-08-20 07:32:50 +00:00
RapidPunch . instances . clear ( ) ;
2014-06-12 23:21:20 +00:00
2014-07-29 11:34:46 +00:00
Flight . removeAll ( ) ;
WaterReturn . removeAll ( ) ;
TempBlock . removeAll ( ) ;
removeAllEarthbendedBlocks ( ) ;
2014-07-26 20:37:54 +00:00
2014-07-29 11:34:46 +00:00
EarthPassive . removeAll ( ) ;
2014-07-21 07:29:30 +00:00
}
2014-07-26 20:37:54 +00:00
2014-07-29 11:34:46 +00:00
public static double waterbendingNightAugment ( double value , World world ) {
if ( isNight ( world ) ) {
if ( isFullMoon ( world ) ) {
return plugin . getConfig ( ) . getDouble ( " Properties.Water.FullMoonFactor " ) * value ;
} else {
return plugin . getConfig ( ) . getDouble ( " Properties.Water.NightFactor " ) * value ;
2014-07-26 20:37:54 +00:00
}
}
2014-07-29 11:34:46 +00:00
return value ;
2014-07-28 15:44:17 +00:00
}
2014-07-26 20:37:54 +00:00
2014-07-29 11:34:46 +00:00
public Methods ( ProjectKorra plugin ) {
Methods . plugin = plugin ;
2014-07-21 09:27:39 +00:00
}
2014-08-18 01:55:00 +00:00
2014-08-11 14:11:49 +00:00
public static boolean isNegativeEffect ( PotionEffectType effect ) {
if ( effect . equals ( PotionEffectType . POISON ) ) return true ;
if ( effect . equals ( PotionEffectType . BLINDNESS ) ) return true ;
if ( effect . equals ( PotionEffectType . CONFUSION ) ) return true ;
if ( effect . equals ( PotionEffectType . HARM ) ) return true ;
if ( effect . equals ( PotionEffectType . HUNGER ) ) return true ;
if ( effect . equals ( PotionEffectType . SLOW ) ) return true ;
if ( effect . equals ( PotionEffectType . SLOW_DIGGING ) ) return true ;
if ( effect . equals ( PotionEffectType . WEAKNESS ) ) return true ;
if ( effect . equals ( PotionEffectType . WITHER ) ) return true ;
return false ;
}
2014-08-18 01:55:00 +00:00
2014-08-11 14:11:49 +00:00
public static boolean isPositiveEffect ( PotionEffectType effect ) {
if ( effect . equals ( PotionEffectType . ABSORPTION ) ) return true ;
if ( effect . equals ( PotionEffectType . DAMAGE_RESISTANCE ) ) return true ;
if ( effect . equals ( PotionEffectType . FAST_DIGGING ) ) return true ;
if ( effect . equals ( PotionEffectType . FIRE_RESISTANCE ) ) return true ;
if ( effect . equals ( PotionEffectType . HEAL ) ) return true ;
if ( effect . equals ( PotionEffectType . HEALTH_BOOST ) ) return true ;
if ( effect . equals ( PotionEffectType . INCREASE_DAMAGE ) ) return true ;
if ( effect . equals ( PotionEffectType . JUMP ) ) return true ;
if ( effect . equals ( PotionEffectType . NIGHT_VISION ) ) return true ;
if ( effect . equals ( PotionEffectType . REGENERATION ) ) return true ;
if ( effect . equals ( PotionEffectType . SATURATION ) ) return true ;
if ( effect . equals ( PotionEffectType . SPEED ) ) return true ;
if ( effect . equals ( PotionEffectType . WATER_BREATHING ) ) return true ;
return false ;
}
2014-08-18 01:55:00 +00:00
2014-08-11 14:11:49 +00:00
public static boolean isNeutralEffect ( PotionEffectType effect ) {
if ( effect . equals ( PotionEffectType . INVISIBILITY ) ) return true ;
return false ;
}
2014-08-24 07:37:01 +00:00
public static void breakBreathbendingHold ( Entity entity ) {
if ( Breathbending . isBreathbent ( entity ) ) {
Breathbending . breakBreathbend ( entity ) ;
}
}
2014-07-10 14:38:26 +00:00
2014-06-12 23:21:20 +00:00
}