package me.maker56.survivalgames.user; import java.util.Collection; import java.util.Iterator; import me.maker56.survivalgames.game.Game; import me.maker56.survivalgames.statistics.StatisticData; import me.maker56.survivalgames.statistics.StatisticLoader; import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.entity.Damageable; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; public abstract class UserState { protected Player player; private double health, maxhealth; private float walk, fly; private int food, level, fireticks, heldslot; private float exp; private ItemStack[][] inventory; private Location loc; private GameMode gamemode; private boolean allowFlying, flying; private Collection<PotionEffect> ape; private float fall; private long joinTime = System.currentTimeMillis(); private Game game; public UserState(Player p, Game game) { this.game = game; this.player = p; this.maxhealth = ((Damageable) p).getMaxHealth(); this.health = ((Damageable) p).getHealth(); this.food = p.getFoodLevel(); this.exp = p.getExp(); this.level = p.getLevel(); this.fireticks = p.getFireTicks(); this.loc = p.getLocation(); this.gamemode = p.getGameMode(); this.allowFlying = p.getAllowFlight(); this.flying = p.isFlying(); this.ape = p.getActivePotionEffects(); this.fall = p.getFallDistance(); this.walk = p.getWalkSpeed(); this.fly = p.getFlySpeed(); this.heldslot = p.getInventory().getHeldItemSlot(); ItemStack[][] store = new ItemStack[2][1]; store[0] = p.getInventory().getContents(); store[1] = p.getInventory().getArmorContents(); this.inventory = store; StatisticLoader.load(this); } public double getMaxHealth() { return maxhealth; } public int getHeldItemSlot() { return heldslot; } public Game getGame() { return game; } public long getJoinTime() { return joinTime; } public float getFallDistance() { return fall; } public float getWalkSpeed() { return walk; } public float getFlySpeed() { return fly; } public ItemStack[] getContents() { return inventory[0]; } public ItemStack[] getArmorContents() { return inventory[1]; } public Collection<PotionEffect> getActivePotionEffects() { return ape; } public GameMode getGameMode() { return gamemode; } public boolean getAllowFlight() { return allowFlying; } public boolean isFlying() { return flying; } public Location getLocation() { return this.loc; } public double getHealth() { return this.health; } public int getFoodLevel() { return this.food; } public float getExp() { return this.exp; } public int getLevel() { return this.level; } public int getFireTicks() { return this.fireticks; } public ItemStack[][] getInventory() { return this.inventory; } public void clear() { for (Iterator<PotionEffect> i = player.getActivePotionEffects().iterator(); i.hasNext();) { player.removePotionEffect(i.next().getType()); } player.setWalkSpeed(0.2F); player.setFlySpeed(0.1F); player.setMaxHealth(20D); player.setHealth(20D); player.setFoodLevel(20); player.setLevel(0); player.setExp(0); player.setFireTicks(0); player.setGameMode(GameMode.SURVIVAL); player.setFlying(false); player.setAllowFlight(false); player.getInventory().setHeldItemSlot(0); clearInventory(); } public void clearInventory() { ItemStack[] inv = player.getInventory().getContents(); for (int i = 0; i < inv.length; i++) { inv[i] = null; } player.getInventory().setContents(inv); inv = player.getInventory().getArmorContents(); for (int i = 0; i < inv.length; i++) { inv[i] = null; } player.getInventory().setArmorContents(inv); player.updateInventory(); } public Player getPlayer() { return player; } public String getName() { return player.getName(); } public void sendMessage(BaseComponent[] message) { player.spigot().sendMessage(message); } public void sendMessage(String message) { player.sendMessage(message); } public String getUUID() { return player.getUniqueId().toString(); } public abstract boolean isSpectator(); // SQL private StatisticData sd; public StatisticData getStatistics() { return sd; } public void setStatistics(StatisticData sd) { this.sd = sd; } public boolean areStatisticsLoaded() { return sd != null; } }