2013-11-01 23:28:39 -07:00
package me.kaZep.Base ;
import java.text.DecimalFormat ;
import java.util.ArrayList ;
import java.util.Collection ;
import java.util.ConcurrentModificationException ;
import java.util.Iterator ;
import java.util.List ;
import org.bukkit.Bukkit ;
import org.bukkit.ChatColor ;
import org.bukkit.entity.Player ;
2013-11-08 07:08:34 -07:00
import org.bukkit.plugin.Plugin ;
2013-11-01 23:28:39 -07:00
import org.bukkit.potion.PotionEffect ;
import org.bukkit.potion.PotionEffectType ;
public class PlayerBuffData {
Player p ;
int base_spdlv ;
int base_armorlv ;
List < Player > armorbufflist ;
double base_hplv ;
List < Player > hpbufflist ;
short helmet_durability , chestplate_durability , leggings_durability , boots_durability ;
int potion_spdlv ;
long potion_time ;
long hpbuff_time ;
double extra_hp = 0 ;
double money_gained = 0 ;
long last_money_report_time = 0 ;
public Main plugin ;
public String healthbar ( double curHP , double maxHP ) {
2013-11-16 21:08:52 -07:00
//笆<> 笆<EFBFBD>
2013-11-01 23:28:39 -07:00
int bits = ( int ) ( Math . ceil ( curHP / maxHP * 10 ) ) ;
String bar = " " ;
if ( bits > 6 ) {
bar + = ChatColor . GREEN + " " ;
} else
if ( bits > 3 ) {
bar + = ChatColor . YELLOW + " " ;
} else
{
bar + = ChatColor . RED + " " ;
}
for ( int i = 0 ; i < bits / 2 ; i + + ) {
2013-11-16 21:08:52 -07:00
bar + = Character . toString ( ( char ) 0x2588 ) ;
2013-11-01 23:28:39 -07:00
}
if ( bits % 2 ! = 0 ) {
2013-11-16 21:08:52 -07:00
bar + = Character . toString ( ( char ) 0x258C ) ;
2013-11-01 23:28:39 -07:00
}
return bar ;
}
2013-11-19 03:35:52 -07:00
public String healthbar ( double curHP , double maxHP , int hunger ) {
//笆<> 笆<EFBFBD>
int bits = ( int ) ( Math . ceil ( curHP / maxHP * 10 ) ) ;
String bar = " " ;
2013-11-20 00:24:42 -07:00
if ( hunger > = 17 ) {
2013-11-19 03:35:52 -07:00
if ( bits > 6 ) {
bar + = ChatColor . GREEN + " " ;
} else
if ( bits > 3 ) {
bar + = ChatColor . YELLOW + " " ;
} else
{
bar + = ChatColor . RED + " " ;
}
} else {
if ( bits > 6 ) {
bar + = ChatColor . DARK_GREEN + " " ;
} else
if ( bits > 3 ) {
bar + = ChatColor . GOLD + " " ;
} else
{
bar + = ChatColor . DARK_RED + " " ;
}
}
for ( int i = 0 ; i < bits / 2 ; i + + ) {
bar + = Character . toString ( ( char ) 0x2588 ) ;
}
if ( bits % 2 ! = 0 ) {
bar + = Character . toString ( ( char ) 0x258C ) ;
}
return bar ;
}
2013-11-01 23:28:39 -07:00
public PlayerBuffData ( Player p , Main thisplugin ) {
this . p = p ;
this . base_spdlv = 0 ;
this . base_armorlv = 0 ;
this . hpbuff_time = 0 ;
this . armorbufflist = new ArrayList < Player > ( ) ;
this . hpbufflist = new ArrayList < Player > ( ) ;
2013-11-16 21:08:52 -07:00
this . last_money_report_time = Main . SERVER_TICK_TIME ;
2013-11-01 23:28:39 -07:00
this . money_gained = 0 ;
if ( p . getInventory ( ) . getHelmet ( ) ! = null ) {
this . helmet_durability = p . getInventory ( ) . getHelmet ( ) . getDurability ( ) ;
} else {
this . helmet_durability = - 1 ;
}
if ( p . getInventory ( ) . getChestplate ( ) ! = null ) {
this . chestplate_durability = p . getInventory ( ) . getChestplate ( ) . getDurability ( ) ;
} else {
this . chestplate_durability = - 1 ;
}
if ( p . getInventory ( ) . getLeggings ( ) ! = null ) {
this . leggings_durability = p . getInventory ( ) . getLeggings ( ) . getDurability ( ) ;
} else {
this . leggings_durability = - 1 ;
}
if ( p . getInventory ( ) . getBoots ( ) ! = null ) {
this . boots_durability = p . getInventory ( ) . getBoots ( ) . getDurability ( ) ;
} else {
this . boots_durability = - 1 ;
}
this . plugin = thisplugin ;
try {
Iterator < PotionEffect > effects = p . getActivePotionEffects ( ) . iterator ( ) ;
//Figure out potion effects when player joins.
while ( effects . hasNext ( ) ) {
PotionEffect nexteffect = effects . next ( ) ;
if ( nexteffect . getType ( ) . getName ( ) . compareTo ( PotionEffectType . SPEED . getName ( ) ) = = 0 ) {
potion_spdlv = nexteffect . getAmplifier ( ) ;
//Bukkit.getLogger().info("Speed level is "+nexteffect.getAmplifier()+" and lasts for "+nexteffect.getDuration()+" ticks.");
2013-11-16 21:08:52 -07:00
potion_time = Main . SERVER_TICK_TIME + nexteffect . getDuration ( ) ;
2013-11-01 23:28:39 -07:00
}
effects . remove ( ) ;
}
} catch ( ConcurrentModificationException ex_e ) {
Bukkit . getLogger ( ) . warning ( " Potion Effect Collection not accessible while initializing player speed. " ) ;
}
p . removePotionEffect ( PotionEffectType . SPEED ) ;
}
public void setBaseSpd ( int spd ) {
this . base_spdlv = spd ;
}
public void updateBaseArmor ( ) {
}
public void updatePlayerSpd ( ) {
if ( ! p . isDead ( ) ) { //Don't even try to set things if we're dead.
base_hplv = 20 ;
base_hplv + = hpbufflist . size ( ) * 10 ;
2013-11-21 01:28:39 -07:00
if ( this . plugin . getAccountsConfig ( ) . getInt ( p . getName ( ) . toLowerCase ( ) + " .stats.stat8 " ) > 0 ) {
base_hplv + = this . plugin . getStatBonus ( 7 , this . plugin . getAccountsConfig ( ) . getInt ( p . getName ( ) . toLowerCase ( ) + " .stats.stat8 " ) / 2 ) ;
2013-11-01 23:28:39 -07:00
}
//Check player equipment to see if an item could possibly have a health buff.
for ( int i = 0 ; i < p . getEquipment ( ) . getArmorContents ( ) . length ; i + + ) {
//Bukkit.getLogger().info("Got to 1.");
2013-11-06 03:29:11 -07:00
if ( p . getEquipment ( ) . getArmorContents ( ) [ i ] ! = null & & ! this . plugin . isBroken ( p . getEquipment ( ) . getArmorContents ( ) [ i ] ) & & p . getEquipment ( ) . getArmorContents ( ) [ i ] . getItemMeta ( ) ! = null & & p . getEquipment ( ) . getArmorContents ( ) [ i ] . getItemMeta ( ) . getLore ( ) ! = null ) {
2013-11-01 23:28:39 -07:00
//Bukkit.getLogger().info("Got to 2.");
for ( int j = 0 ; j < p . getEquipment ( ) . getArmorContents ( ) [ i ] . getItemMeta ( ) . getLore ( ) . size ( ) ; j + + ) {
//Bukkit.getLogger().info("Got to 3.");
if ( this . plugin . containsEnchantment ( p . getEquipment ( ) . getArmorContents ( ) [ i ] . getItemMeta ( ) . getLore ( ) . get ( j ) , " Health " ) ) {
//Bukkit.getLogger().info("Got to 4.");
base_hplv + = this . plugin . getEnchantmentNumb ( p . getEquipment ( ) . getArmorContents ( ) [ i ] . getItemMeta ( ) . getLore ( ) . get ( j ) ) ;
}
}
}
}
extra_hp = 0 ;
//p.setMaxHealth(base_hplv);
boolean hasabsorption = false ;
try {
Iterator < PotionEffect > effects = p . getActivePotionEffects ( ) . iterator ( ) ;
//Figure out potion effects when player joins.
while ( effects . hasNext ( ) ) {
PotionEffect nexteffect = effects . next ( ) ;
if ( nexteffect . getType ( ) . getName ( ) . compareTo ( PotionEffectType . HEALTH_BOOST . getName ( ) ) = = 0 ) {
base_hplv + = ( nexteffect . getAmplifier ( ) + 1 ) * 4 ;
extra_hp = ( nexteffect . getAmplifier ( ) + 1 ) * 4 ;
}
if ( nexteffect . getType ( ) . getName ( ) . compareTo ( PotionEffectType . ABSORPTION . getName ( ) ) = = 0 ) {
hasabsorption = true ;
}
effects . remove ( ) ;
}
} catch ( ConcurrentModificationException ex_e ) {
Bukkit . getLogger ( ) . warning ( " Potion Effect Collection not accessible while finalizing player speed. " ) ;
}
2013-11-21 01:28:39 -07:00
if ( ! hasabsorption & & this . plugin . getAccountsConfig ( ) . getInt ( p . getName ( ) . toLowerCase ( ) + " .stats.stat4 " ) > 0 ) {
2013-11-01 23:28:39 -07:00
p . removePotionEffect ( PotionEffectType . ABSORPTION ) ;
2013-11-21 01:28:39 -07:00
p . addPotionEffect ( new PotionEffect ( PotionEffectType . ABSORPTION , 3590 , this . plugin . getStatBonus ( 3 , this . plugin . getAccountsConfig ( ) . getInt ( p . getName ( ) . toLowerCase ( ) + " .stats.stat4 " ) / 3 ) / 4 - 1 ) ) ;
//p.sendMessage("Absorption level is "+(this.plugin.getStatBonus(3, this.plugin.getAccountsConfig().getInt(p.getName().toLowerCase()+".stats.stat4")/4)/4-1));
2013-11-01 23:28:39 -07:00
}
2013-11-21 01:28:39 -07:00
if ( this . plugin . getAccountsConfig ( ) . getInt ( p . getName ( ) . toLowerCase ( ) + " .stats.stat2 " ) > 0 ) {
2013-11-01 23:28:39 -07:00
p . removePotionEffect ( PotionEffectType . FAST_DIGGING ) ;
2013-11-21 01:28:39 -07:00
p . addPotionEffect ( new PotionEffect ( PotionEffectType . FAST_DIGGING , 399 , this . plugin . getStatBonus ( 1 , this . plugin . getAccountsConfig ( ) . getInt ( p . getName ( ) . toLowerCase ( ) + " .stats.stat2 " ) / 5 ) / 20 - 1 ) ) ;
2013-11-01 23:28:39 -07:00
}
//p.sendMessage("Health: "+p.getHealth()+"/"+p.getMaxHealth()+" Base HP Level: "+base_hplv);
if ( p . getHealth ( ) > p . getMaxHealth ( ) ) {
p . setHealth ( p . getMaxHealth ( ) ) ;
//p.sendMessage("Health: "+p.getHealth()+"/"+p.getMaxHealth()+" Set new health: "+p.getMaxHealth()+"+"+extra_hp);
}
if ( base_hplv ! = p . getMaxHealth ( ) ) {
double temphp = 0 ;
if ( base_hplv < p . getMaxHealth ( ) ) {
p . setMaxHealth ( base_hplv - extra_hp ) ;
p . setHealth ( base_hplv ) ;
} else {
temphp = p . getHealth ( ) ;
p . setMaxHealth ( base_hplv - extra_hp ) ;
p . setHealth ( temphp ) ;
}
}
/ * if ( base_hplv ! = p . getMaxHealth ( ) ) {
p . setMaxHealth ( base_hplv - extra_hp ) ;
} * /
/ *
if ( p . getHealth ( ) > base_hplv ) {
p . setHealth ( base_hplv ) ;
//p.sendMessage("Health too high. Lowering to "+p.getMaxHealth());
} * /
//Send new speed totals so the player's speed can be manually adjusted.
2013-11-16 21:08:52 -07:00
if ( potion_spdlv > 0 & & potion_time < Main . SERVER_TICK_TIME ) {
2013-11-01 23:28:39 -07:00
//Remove the potion speed buff.
potion_spdlv = 0 ;
}
try {
Iterator < PotionEffect > effects = p . getActivePotionEffects ( ) . iterator ( ) ;
//Figure out potion effects when player joins.
while ( effects . hasNext ( ) ) {
PotionEffect nexteffect = effects . next ( ) ;
if ( nexteffect . getType ( ) . getName ( ) . compareTo ( PotionEffectType . INCREASE_DAMAGE . getName ( ) ) = = 0 ) {
if ( nexteffect . getAmplifier ( ) > 0 ) {
p . removePotionEffect ( PotionEffectType . INCREASE_DAMAGE ) ;
p . addPotionEffect ( new PotionEffect ( PotionEffectType . INCREASE_DAMAGE , nexteffect . getDuration ( ) * 4 , 0 ) ) ;
}
}
if ( nexteffect . getType ( ) . getName ( ) . compareTo ( PotionEffectType . SPEED . getName ( ) ) = = 0 ) {
if ( nexteffect . getDuration ( ) < 47479999 ) {
//This is not a buff we applied via our plugin.
potion_spdlv + = nexteffect . getAmplifier ( ) + 1 ;
//p.sendMessage("Store speed "+nexteffect.getAmplifier()+" for "+nexteffect.getDuration()+" ticks.");
2013-11-16 21:08:52 -07:00
potion_time = Main . SERVER_TICK_TIME + nexteffect . getDuration ( ) ;
2013-11-01 23:28:39 -07:00
}
}
effects . remove ( ) ;
}
2013-11-16 21:08:52 -07:00
if ( hpbuff_time < Main . SERVER_TICK_TIME ) {
2013-11-01 23:28:39 -07:00
while ( hpbufflist . size ( ) > 0 ) {
hpbufflist . remove ( 0 ) ;
}
}
} catch ( ConcurrentModificationException ex_e ) {
Bukkit . getLogger ( ) . warning ( " Potion Effect Collection not accessible while finalizing player speed. " ) ;
}
p . removePotionEffect ( PotionEffectType . SPEED ) ;
if ( ( base_spdlv + potion_spdlv ) > 0 ) {
//Bukkit.getPlayer("AaMay").sendMessage("Explorer giving speed buff: "+(base_spdlv-1+potion_spdlv));
p . addPotionEffect ( new PotionEffect ( PotionEffectType . SPEED , 2147479999 , base_spdlv - 1 + potion_spdlv , true ) ) ;
}
2013-11-16 21:08:52 -07:00
if ( last_money_report_time + 72000 < Main . SERVER_TICK_TIME ) {
last_money_report_time = Main . SERVER_TICK_TIME ;
2013-11-21 01:28:39 -07:00
if ( this . plugin . getAccountsConfig ( ) . getBoolean ( p . getName ( ) . toLowerCase ( ) + " .settings.notify6 " ) ) {
2013-11-01 23:28:39 -07:00
DecimalFormat df = new DecimalFormat ( " #0.00 " ) ;
p . sendMessage ( ChatColor . YELLOW + " " + ChatColor . ITALIC + " You have earned $ " + df . format ( money_gained ) + " from your jobs in the past hour. " ) ;
}
money_gained = 0 ;
}
2013-11-19 03:35:52 -07:00
p . getScoreboard ( ) . getTeam ( p . getName ( ) ) . setSuffix ( healthbar ( p . getHealth ( ) , p . getMaxHealth ( ) , p . getFoodLevel ( ) ) ) ;
2013-11-01 23:28:39 -07:00
}
}
}