TwosideKeeper/src/sig/plugin/TwosideKeeper/PlayerStructure.java
2017-04-03 23:45:45 -05:00

574 lines
27 KiB
Java

package sig.plugin.TwosideKeeper;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
import org.bukkit.potion.PotionEffect;
import org.jgrapht.UndirectedGraph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;
import sig.plugin.TwosideKeeper.HelperStructures.BowMode;
import sig.plugin.TwosideKeeper.HelperStructures.DeathStructure;
import sig.plugin.TwosideKeeper.HelperStructures.FilterCubeItem;
import sig.plugin.TwosideKeeper.HelperStructures.PlayerMode;
import sig.plugin.TwosideKeeper.HelperStructures.ServerType;
import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions;
import sig.plugin.TwosideKeeper.Logging.DamageLogger;
//import com.google.common.graph.*;
/*PLAYER STRUCTURE
*
* Keeps external data and info about the player
* and provides a format that can save this data
* to a file when it's time. Updates the visual
* healthbar on-screen and such.
*
*/
public class PlayerStructure {
public String name;
//public String displayName;
public long joined; //When the player logged in today. Can track how long played, etc.
public long firstjoined; //The first server tick the player joined the game.
public double money; //Money stored on the player.
public double bank_money; //Money in the bank.
public boolean opened_inventory;
public boolean isViewingItemCube=false;
public boolean shootingArrowBarrage=false;
public int saturation; //We will now track saturation manually to remove health healing from saturation.
public long last_regen_time; //Last time a health regen took place.
public double damagereduction;
public double damagedealt;
public int insertItem=-1; //The position in the chat message to insert an item to.
//public double basedmg;
public LivingEntity target; //The current entity this player is looking at.
public boolean enderdragon_spawned; //Whether or not an Ender Dragon has been spawned for this player.
public int partybonus; //Holds how many players are in the party, to account for party bonuses.
public int currentparty; //Which party we are in.
public int spleef_pts;
public int spleef_wins;
public int title_task; //Keeps track of the task last identified for updating titles.
public int pickeditems=-1;
public boolean sounds_enabled=true;
public double velocity;
public long last_deathmark=TwosideKeeper.getServerTickTime();
public long last_shovelspell=TwosideKeeper.getServerTickTime()+300;
public int swordcombo=0;
public long last_swordhit=TwosideKeeper.getServerTickTime();
public long last_strikerspell=TwosideKeeper.getServerTickTime();
public boolean highwinder=false;
public double highwinderdmg=0.0;
public int nextarrowxp = 0; //How much bonus XP to give to an Artifact Bow.
public boolean hasfullrangerset=false;
public double lastarrowpower=0;
public boolean lastarrowwasinrangermode=false; //true is ranger mode.
public int headshotcombo=0;
public List<ItemCubeWindow> openeditemcube;
public boolean openinginventory=false;
public boolean fulldodge=false;
public long last_arrowbarrage=TwosideKeeper.getServerTickTime();
public long last_laugh_time=TwosideKeeper.getServerTickTime();
public long last_rejuvenate=TwosideKeeper.getServerTickTime();
public DamageLogger damagedata;
public boolean damagelogging=false;
public boolean hasDied=false;
public double deathloc_x = 0;
public double deathloc_y = 0;
public double deathloc_z = 0;
public String deathloc_world = "";
public List<ItemStack> deathloot = new ArrayList<ItemStack>();
public double vendetta_amt = 0.0;
public HashMap<UUID,Long> hitlist = new HashMap<UUID,Long>();
public long lastdeath = 0;
public int previousparty = -1;
public long lastblock = 0;
public List<Integer> itemcubelist = new ArrayList<Integer>();
public int lasthitproperties=0;
public String lasthitdesc="";
public double lastdamagetaken=0;
public double lastrawdamage=0;
public long lastmodeupdate=0;
public long lastsprintcheck=0;
public int swiftaegisamt=0;
public PlayerMode lastmode=PlayerMode.NORMAL;
public List<PotionEffect> lasteffectlist=null;
public boolean stealthmode=false;
public long lastcompassnotification=0;
public boolean endnotification=false;
public long turnedonsneak=0;
public double slayermodehp=0;
public long lastassassinatetime=0;
public long lastlifesavertime=0;
public boolean slayermegahit=false;
public double thorns_amt = 0.0;
public long lastimportantactionbarmsg=0;
public long lasthighwinderhit=0;
public int lifestealstacks=0;
public int weaponcharges=0;
public double damagepool=0;
public long lastattacked=0;
public int lasthitfromdamagepool=0;
public long lastvendettastack=0;
public long lastlavaplume=0;
public long usetimer=0;
public boolean weatherwatch=false;
public String weatherwatch_user="";
public boolean falldamageimmunity=false;
public double pctbonusregen = 0.0;
public long pctbonusregentime = 0;
public long lastlightningstrike = 0;
public Player linkplayer = null;
public long lastlinkteleport = 0;
public int lastxsign = 0;
public int lastzsign = 0;
public long lastabsorptionhealthgiven = TwosideKeeper.getServerTickTime();
public long ignoretargetarmor = TwosideKeeper.getServerTickTime();
public long lastcandyconsumed = TwosideKeeper.getServerTickTime();
public long lastrevivecandyconsumed = TwosideKeeper.getServerTickTime();
public long icewandused = TwosideKeeper.getServerTickTime();
public PlayerMode playermode_on_death=PlayerMode.NORMAL;
public long lastusedearthwave = TwosideKeeper.getServerTickTime();
public long iframetime = 0;
public double prev_weapondmg=0.0;
public double prev_buffdmg=0.0;
public double prev_partydmg=0.0;
public double prev_armordef=0.0;
public int debuffcount=0;
public boolean isViewingInventory=false;
public boolean destroyedminecart=false;
public boolean headshot=false;
public boolean preemptive=false;
public boolean crit=false;
public int storedbowxp=0;
public long lasthittarget=0;
public long lastbowmodeswitch=0;
public long lastsneak=0;
public long lastcombat=0;
public long lastsantabox=0;
public BowMode rangermode=BowMode.CLOSE;
public boolean isPlayingSpleef=false;
public long lastrightclick = 0;
public boolean opened_another_cube=false;
public long damagepooltime=0;
public long last_siphon=0;
public long last_dodge=0;
public long last_mock=0;
public long rage_time=0; //Set this to the last tick that rage is supposed to last. It'll wear off after this.
public int rage_amt=0;
public long swiftaegistime=0;
public String lastActionBarMessage="";
public Location lastStandingLoc = null;
public boolean holidaychest1=false;
public boolean holidaychest2=false;
public boolean holidaychest3=false;
public boolean holidaychest4=false;
//public MutableGraph<Integer> graph = GraphBuilder.undirected().build();
public HashMap<Material,Block> blockscanlist=new HashMap<Material,Block>();
public long lastusedrocketbooster=0;
public long lastActionBarMessageTime=0;
public long lastsantabox2;
public double regenpool=0;
public boolean vacuumsuckup=true;
public boolean equipweapons=true;
public boolean equiparmor=true;
public Location restartLoc = null; //Set to a value when the player has to be re-teleported after being controlled by a camera.
List<ItemStack> equipmentset = new ArrayList<ItemStack>();
public HashMap<Material,List<Integer>> filtercubestructure = new HashMap<Material, List<Integer>>();
public List<UUID> ignoreItemsList = new ArrayList<UUID>();
//Needs the instance of the player object to get all other info. Only to be called at the beginning.
@SuppressWarnings("deprecation")
public PlayerStructure(Player p, long serverTickTime) {
if (p!=null && p.isOnline()) {
this.velocity = 0d;
this.name = p.getName();
this.joined = serverTickTime;
this.firstjoined = serverTickTime;
this.money=100;
this.bank_money=0;
this.opened_inventory=false;
this.saturation=20;
this.last_regen_time=TwosideKeeper.SERVERTICK;
this.target=null;
this.damagereduction=1.0;
this.damagedealt=1.0;
//this.basedmg=0.0;
this.partybonus=0;
this.enderdragon_spawned=false;
this.currentparty=-1;
this.previousparty=-1;
this.spleef_pts=0;
this.spleef_wins=0;
this.title_task=-1;
this.sounds_enabled=true;
this.debuffcount=0;
this.lasteffectlist = new ArrayList<PotionEffect>();
this.lasteffectlist.addAll(p.getActivePotionEffects());
this.last_deathmark=(TwosideKeeper.getServerType()==ServerType.MAIN)?TwosideKeeper.getServerTickTime():0;
this.last_shovelspell=(TwosideKeeper.getServerType()==ServerType.MAIN)?TwosideKeeper.getServerTickTime()+300:0;
this.swordcombo=0;
this.last_swordhit=(TwosideKeeper.getServerType()==ServerType.MAIN)?TwosideKeeper.getServerTickTime():0;
this.highwinder=false;
this.highwinderdmg=0.0;
this.nextarrowxp=0;
this.hasfullrangerset=false;
this.last_strikerspell=(TwosideKeeper.getServerType()==ServerType.MAIN)?TwosideKeeper.getServerTickTime():0;
this.openeditemcube = new ArrayList<ItemCubeWindow>();
this.openinginventory = false;
this.fulldodge=false;
this.last_arrowbarrage=(TwosideKeeper.getServerType()==ServerType.MAIN)?TwosideKeeper.getServerTickTime():0;
this.lastarrowwasinrangermode=false;
this.isViewingInventory=false;
this.destroyedminecart=false;
this.last_laugh_time=(TwosideKeeper.getServerType()==ServerType.MAIN)?TwosideKeeper.getServerTickTime():0;
this.last_rejuvenate=(TwosideKeeper.getServerType()==ServerType.MAIN)?TwosideKeeper.getServerTickTime():0;
this.lastassassinatetime=(TwosideKeeper.getServerType()==ServerType.MAIN)?TwosideKeeper.getServerTickTime():0;
this.lastlifesavertime=(TwosideKeeper.getServerType()==ServerType.MAIN)?TwosideKeeper.getServerTickTime():0;
this.icewandused=(TwosideKeeper.getServerType()==ServerType.MAIN)?TwosideKeeper.getServerTickTime():0;
this.damagedata = new DamageLogger(p);
this.damagelogging=false;
this.isPlayingSpleef=false;
this.iframetime=TwosideKeeper.getServerTickTime();
this.vacuumsuckup=true;
this.equipweapons=true;
this.equiparmor=true;
//Set defaults first, in case this is a new user.
loadConfig();
p.getInventory().addItem(new ItemStack(Material.PORTAL));
//Check if new player.
if (this.firstjoined == serverTickTime) {
//This is a new player! Let the whole world know!
//Give the player free tools and items.
Bukkit.getServer().broadcastMessage(ChatColor.GOLD+"Welcome to new player "+ChatColor.WHITE+""+this.name+"!");
if (TwosideKeeper.SERVER_TYPE==ServerType.MAIN) {
aPlugin.API.discordSendRaw("Welcome to new player **"+this.name+"**!");
}
p.sendMessage(ChatColor.GREEN+"Welcome to the server! Thanks for joining us.");
p.sendMessage(ChatColor.GOLD+" Here's a manual to get you started!");
//Give starter pack.
/*p.getInventory().addItem(new ItemStack(Material.STONE_SWORD,1));
p.getInventory().addItem(new ItemStack(Material.STONE_PICKAXE,1));
p.getInventory().addItem(new ItemStack(Material.STONE_AXE,1));
p.getInventory().addItem(new ItemStack(Material.STONE_SPADE,1));
p.getInventory().addItem(new ItemStack(Material.MINECART,1));
p.getInventory().addItem(new ItemStack(Material.LEATHER_CHESTPLATE,1));
p.getInventory().addItem(new ItemStack(Material.LEATHER_LEGGINGS,1));
p.getInventory().addItem(new ItemStack(Material.TORCH,8));
p.getInventory().addItem(new ItemStack(Material.BREAD,16));*/
ItemStack manual = new ItemStack(Material.WRITTEN_BOOK);
BookMeta bm = (BookMeta)manual.getItemMeta();
bm.setAuthor("Sig's Minecraft");
//bm.setPage(arg0, arg1);
p.getInventory().addItem(manual);
//Make sure it's not already there...?
if (Bukkit.getServer().getScoreboardManager().getMainScoreboard().getTeam(this.name.toLowerCase())==null) {
Bukkit.getServer().getScoreboardManager().getMainScoreboard().registerNewTeam(this.name.toLowerCase()).addPlayer(p);
}
}
Bukkit.getScheduler().runTaskLater(TwosideKeeper.plugin, ()->{
if (this.restartLoc!=null) {
p.teleport(this.restartLoc);
this.restartLoc=null;
}
}, 5);
//Joined always gets set to new time.
this.joined = serverTickTime;
setDefaultCooldowns(p);
}
}
private void setDefaultCooldowns(Player p) {
aPlugin.API.sendCooldownPacket(p, Material.BOW, GenericFunctions.GetRemainingCooldownTime(p, last_dodge, TwosideKeeper.DODGE_COOLDOWN));
applyCooldownToAllTypes(p,"HOE",GenericFunctions.GetRemainingCooldownTime(p, last_deathmark, TwosideKeeper.DEATHMARK_COOLDOWN));
applyCooldownToAllTypes(p,"SPADE",GenericFunctions.GetRemainingCooldownTime(p, lastusedearthwave, TwosideKeeper.EARTHWAVE_COOLDOWN));
applyCooldownToAllTypes(p,"SWORD",GenericFunctions.GetRemainingCooldownTime(p, last_strikerspell, TwosideKeeper.LINEDRIVE_COOLDOWN));
aPlugin.API.sendCooldownPacket(p, Material.SHIELD, GenericFunctions.GetRemainingCooldownTime(p, last_rejuvenate, TwosideKeeper.REJUVENATE_COOLDOWN));
aPlugin.API.sendCooldownPacket(p, Material.SKULL_ITEM, GenericFunctions.GetRemainingCooldownTime(p, lastlifesavertime, TwosideKeeper.LIFESAVER_COOLDOWN));
aPlugin.API.sendCooldownPacket(p, Material.CHORUS_FLOWER, GenericFunctions.GetRemainingCooldownTime(p, lastlifesavertime, TwosideKeeper.LIFESAVER_COOLDOWN));
aPlugin.API.sendCooldownPacket(p, Material.WATCH, GenericFunctions.GetRemainingCooldownTime(p, icewandused, TwosideKeeper.ICEWAND_COOLDOWN));
aPlugin.API.sendCooldownPacket(p, Material.RAW_FISH, GenericFunctions.GetRemainingCooldownTime(p, lastcandyconsumed, 40));
aPlugin.API.sendCooldownPacket(p, Material.GOLDEN_APPLE, GenericFunctions.GetRemainingCooldownTime(p, lastrevivecandyconsumed, 200));
}
private void applyCooldownToAllTypes(Player p, String item, int cooldown) {
aPlugin.API.sendCooldownPacket(p, Material.valueOf("WOOD_"+item), cooldown);
aPlugin.API.sendCooldownPacket(p, Material.valueOf("IRON_"+item), cooldown);
aPlugin.API.sendCooldownPacket(p, Material.valueOf("STONE_"+item), cooldown);
aPlugin.API.sendCooldownPacket(p, Material.valueOf("DIAMOND_"+item), cooldown);
aPlugin.API.sendCooldownPacket(p, Material.valueOf("GOLD_"+item), cooldown);
}
//Save the configuration.
public void saveConfig() {
File config;
config = new File(TwosideKeeper.filesave,"users/"+Bukkit.getPlayer(name).getUniqueId()+".data");
FileConfiguration workable = YamlConfiguration.loadConfiguration(config);
workable.set("name", name);
//workable.set("displayName", displayName);
workable.set("joined", joined);
workable.set("firstjoined", firstjoined);
workable.set("money", money);
workable.set("bank_money", bank_money);
workable.set("saturation", saturation);
workable.set("damagereduction", damagereduction);
workable.set("enderdragon_spawned", enderdragon_spawned);
workable.set("spleef_pts", spleef_pts);
workable.set("spleef_wins", spleef_wins);
workable.set("sounds_enabled", sounds_enabled);
workable.set("hasDied", hasDied);
workable.set("lifestealstacks", lifestealstacks);
workable.set("weaponcharges", weaponcharges);
workable.set("damagepool", damagepool);
workable.set("vendetta_amt", vendetta_amt);
workable.set("weatherwatch", weatherwatch);
workable.set("weatherwatch_user", weatherwatch_user);
workable.set("holidaychest1", holidaychest1);
workable.set("holidaychest2", holidaychest2);
workable.set("holidaychest3", holidaychest3);
workable.set("holidaychest4", holidaychest4);
workable.set("lastsantabox2", lastsantabox2);
workable.set("vacuumsuckup", vacuumsuckup);
workable.set("equipweapons", equipweapons);
workable.set("equiparmor", equiparmor);
workable.set("playermode_on_death", playermode_on_death.name());
//ConfigurationSection deathlootlist = workable.createSection("deathloot");
if (DeathManager.deathStructureExists(Bukkit.getPlayer(name))) {
DeathStructure ds = DeathManager.getDeathStructure(Bukkit.getPlayer(name));
deathloc_x = ds.deathloc.getX();
deathloc_y = ds.deathloc.getY();
deathloc_z = ds.deathloc.getZ();
deathloc_world = ds.deathloc.getWorld().getName();
/*for (int i=0;i<ds.deathinventory.size();i++) {
if (ds.deathinventory.get(i)!=null) {
deathlootlist.set("item"+i, ds.deathinventory.get(i));
}
}*/
}
workable.set("deathloc_x", deathloc_x);
workable.set("deathloc_y", deathloc_y);
workable.set("deathloc_z", deathloc_z);
workable.set("deathloc_world", deathloc_world);
workable.set("COOLDOWN_deathmark", last_deathmark);
workable.set("COOLDOWN_shovelspell", last_shovelspell);
workable.set("COOLDOWN_strikerspell", last_strikerspell);
workable.set("COOLDOWN_usedearthwave", lastusedearthwave);
workable.set("COOLDOWN_arrowbarrage", last_arrowbarrage);
workable.set("COOLDOWN_laughtime", last_laugh_time);
workable.set("COOLDOWN_rejuvenate", last_rejuvenate);
workable.set("COOLDOWN_swordhit", last_swordhit);
workable.set("COOLDOWN_strikerspell", last_strikerspell);
workable.set("COOLDOWN_absorptionhealthgiven", lastabsorptionhealthgiven);
workable.set("COOLDOWN_ignoretargetarmor", ignoretargetarmor);
workable.set("COOLDOWN_lastrevivecandyconsumed", lastrevivecandyconsumed);
workable.set("COOLDOWN_lastcandyconsumed", lastcandyconsumed);
workable.set("COOLDOWN_icewandused", icewandused);
workable.set("COOLDOWN_lastdodge", last_dodge);
workable.set("COOLDOWN_lastsiphon", last_siphon);
workable.set("COOLDOWN_lastmock", last_mock);
workable.set("COOLDOWN_lastassassinatetime", lastassassinatetime);
workable.set("COOLDOWN_lastlifesavertime", lastlifesavertime);
if (restartLoc!=null) {
workable.set("restartloc_x", restartLoc.getX());
workable.set("restartloc_y", restartLoc.getY());
workable.set("restartloc_z", restartLoc.getZ());
workable.set("restartloc_world", restartLoc.getWorld().getName());
} else {
workable.set("restartloc_world", "null");
}
try {
workable.save(config);
} catch (IOException e) {
e.printStackTrace();
}
}
//Create a config for the player.
public void loadConfig(){
Player p = Bukkit.getPlayer(name);
File config,testconfig;
testconfig = new File(TwosideKeeper.filesave,"users/"+name+".data");
config = new File(TwosideKeeper.filesave,"users/"+p.getUniqueId()+".data");
if (testconfig.exists()) {
TwosideKeeper.log("Renaming old config for player "+ChatColor.YELLOW+name+ChatColor.RESET+" to UUID "+ChatColor.YELLOW+p.getUniqueId(), 1);
testconfig.renameTo(config);
}
FileConfiguration workable = YamlConfiguration.loadConfiguration(config);
//Add all our default settings here.
workable.addDefault("name", name);
//workable.addDefault("displayName", displayName);
workable.addDefault("joined", joined);
workable.addDefault("firstjoined", firstjoined);
workable.addDefault("money", money);
workable.addDefault("bank_money", bank_money);
workable.addDefault("saturation", saturation);
workable.addDefault("damagereduction", damagereduction);
workable.addDefault("enderdragon_spawned", enderdragon_spawned);
workable.addDefault("spleef_pts", spleef_pts);
workable.addDefault("spleef_wins", spleef_wins);
workable.addDefault("hasDied", hasDied);
workable.addDefault("damagepool", damagepool);
workable.addDefault("weaponcharges", weaponcharges);
workable.addDefault("lifestealstacks", lifestealstacks);
workable.addDefault("vendetta_amt", vendetta_amt);
workable.addDefault("lastvendettastack", lastvendettastack);
workable.addDefault("weatherwatch", weatherwatch);
workable.addDefault("weatherwatch_user", weatherwatch_user);
workable.addDefault("holidaychest1", holidaychest1);
workable.addDefault("holidaychest2", holidaychest2);
workable.addDefault("holidaychest3", holidaychest3);
workable.addDefault("holidaychest4", holidaychest4);
workable.addDefault("lastsantabox2", lastsantabox2);
workable.addDefault("vacuumsuckup", vacuumsuckup);
workable.addDefault("equipweapons", equipweapons);
workable.addDefault("equiparmor", equiparmor);
workable.addDefault("playermode_on_death", playermode_on_death.name());
workable.addDefault("COOLDOWN_deathmark", last_deathmark);
workable.addDefault("COOLDOWN_shovelspell", last_shovelspell);
workable.addDefault("COOLDOWN_strikerspell", last_strikerspell);
workable.addDefault("COOLDOWN_usedearthwave", lastusedearthwave);
workable.addDefault("COOLDOWN_arrowbarrage", last_arrowbarrage);
workable.addDefault("COOLDOWN_laughtime", last_laugh_time);
workable.addDefault("COOLDOWN_rejuvenate", last_rejuvenate);
workable.addDefault("COOLDOWN_swordhit", last_swordhit);
workable.addDefault("COOLDOWN_strikerspell", last_strikerspell);
workable.addDefault("COOLDOWN_absorptionhealthgiven", lastabsorptionhealthgiven);
workable.addDefault("COOLDOWN_ignoretargetarmor", ignoretargetarmor);
workable.addDefault("COOLDOWN_lastrevivecandyconsumed", lastrevivecandyconsumed);
workable.addDefault("COOLDOWN_lastcandyconsumed", lastcandyconsumed);
workable.addDefault("COOLDOWN_icewandused", icewandused);
workable.addDefault("COOLDOWN_lastdodge", last_dodge);
workable.addDefault("COOLDOWN_lastsiphon", last_siphon);
workable.addDefault("COOLDOWN_lastmock", last_mock);
workable.addDefault("COOLDOWN_lastassassinatetime", lastassassinatetime);
workable.addDefault("COOLDOWN_lastlifesavertime", lastlifesavertime);
workable.options().copyDefaults();
//Set all variables.
//this.name = workable.getString("name");
//this.displayName = workable.getString("displayName");
this.joined = workable.getLong("joined");
this.firstjoined = workable.getLong("firstjoined");
this.money = workable.getDouble("money");
this.bank_money = workable.getDouble("bank_money");
this.saturation = workable.getInt("saturation");
this.damagereduction = workable.getDouble("damagereduction");
this.enderdragon_spawned = workable.getBoolean("enderdragon_spawned");
this.spleef_pts = workable.getInt("spleef_pts");
this.spleef_wins = workable.getInt("spleef_wins");
this.sounds_enabled = workable.getBoolean("sounds_enabled");
this.hasDied = workable.getBoolean("hasDied");
this.deathloc_x = workable.getDouble("deathloc_x");
this.deathloc_y = workable.getDouble("deathloc_y");
this.deathloc_z = workable.getDouble("deathloc_z");
this.deathloc_world = workable.getString("deathloc_world");
this.damagepool = workable.getDouble("damagepool");
this.lifestealstacks = workable.getInt("lifestealstacks");
this.weaponcharges = workable.getInt("weaponcharges");
this.lastattacked = TwosideKeeper.getServerTickTime();
this.lastcombat = TwosideKeeper.getServerTickTime();
this.weatherwatch = workable.getBoolean("weatherwatch");
this.weatherwatch_user = workable.getString("weatherwatch_user");
this.holidaychest1 = workable.getBoolean("holidaychest1");
this.holidaychest2 = workable.getBoolean("holidaychest2");
this.holidaychest3 = workable.getBoolean("holidaychest3");
this.holidaychest4 = workable.getBoolean("holidaychest4");
this.lastsantabox2 = workable.getLong("lastsantabox2");
this.lastvendettastack = workable.getLong("lastvendettastack");
this.playermode_on_death = PlayerMode.valueOf(workable.getString("playermode_on_death"));
this.last_deathmark = workable.getLong("COOLDOWN_deathmark");
this.last_shovelspell = workable.getLong("COOLDOWN_shovelspell");
this.last_strikerspell = workable.getLong("COOLDOWN_strikerspell");
this.lastusedearthwave = workable.getLong("COOLDOWN_usedearthwave");
this.last_arrowbarrage = workable.getLong("COOLDOWN_arrowbarrage");
this.last_laugh_time = workable.getLong("COOLDOWN_laughtime");
this.last_rejuvenate = workable.getLong("COOLDOWN_rejuvenate");
this.last_swordhit = workable.getLong("COOLDOWN_swordhit");
this.last_strikerspell = workable.getLong("COOLDOWN_strikerspell");
this.lastabsorptionhealthgiven = workable.getLong("COOLDOWN_absorptionhealthgiven");
this.ignoretargetarmor = workable.getLong("COOLDOWN_ignoretargetarmor");
this.lastrevivecandyconsumed = workable.getLong("COOLDOWN_lastrevivecandyconsumed");
this.lastcandyconsumed = workable.getLong("COOLDOWN_lastcandyconsumed");
this.icewandused = workable.getLong("COOLDOWN_icewandused");
this.last_dodge = workable.getLong("COOLDOWN_lastdodge");
this.last_siphon = workable.getLong("COOLDOWN_lastsiphon");
this.last_mock = workable.getLong("COOLDOWN_lastmock");
this.lastassassinatetime = workable.getLong("COOLDOWN_lastassassinatetime");
this.lastlifesavertime = workable.getLong("COOLDOWN_lastlifesavertime");
this.vacuumsuckup = workable.getBoolean("vacuumsuckup");
this.equipweapons = workable.getBoolean("equipweapons");
this.equiparmor = workable.getBoolean("equiparmor");
String tempworld = workable.getString("restartloc_world");
if (tempworld!=null && !tempworld.equalsIgnoreCase("null")) {
this.restartLoc = new Location(Bukkit.getWorld(tempworld),workable.getDouble("restartloc_x"),workable.getDouble("restartloc_y"),workable.getDouble("restartloc_z"));
}
if (this.hasDied) {
List<ItemStack> deathlootlist = new ArrayList<ItemStack>();
//ConfigurationSection deathlootsection = workable.getConfigurationSection("deathloot");
/*for (int i=0;i<deathlootsection.getKeys(false).size();i++) {
ItemStack item = deathlootsection.getItemStack((String)(deathlootsection.getKeys(false).toArray()[i]));
deathlootlist.add(item);
}*/
DeathManager.addNewDeathStructure(deathlootlist, new Location(Bukkit.getWorld(this.deathloc_world),this.deathloc_x,this.deathloc_y,this.deathloc_z), Bukkit.getPlayer(name));
}
try {
workable.save(config);
} catch (IOException e) {
e.printStackTrace();
}
}
public static PlayerStructure GetPlayerStructure(Player p) {
if (TwosideKeeper.playerdata.containsKey(p.getUniqueId())) {
return TwosideKeeper.playerdata.get(p.getUniqueId());
} else {
TwosideKeeper.log(ChatColor.DARK_RED+"[ERROR] Player Structure for player "+p.getName()+" was not initialized! Now creating one...",0);
return TwosideKeeper.playerdata.put(p.getUniqueId(), new PlayerStructure(p,TwosideKeeper.getServerTickTime()));
}
}
public static int getPlayerNegativeHash(Player p) {
return Math.min(p.getUniqueId().hashCode(), -p.getUniqueId().hashCode());
}
}