下面列出了org.bukkit.entity.Player#setMaxHealth ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onEntityDamage(EntityDamageByEntityEvent event) {
if (!(event.getEntity() instanceof Player)) return;
Player player = (Player) event.getEntity();
double finalHealth = player.getHealth() - event.getFinalDamage();
if (finalHealth > 0.01) return;
player.setMaxHealth(20);
player.setHealth(player.getMaxHealth());
event.setDamage(1);
player.setLastDamageCause(event);
if (event.getActor() instanceof Player) {
killPlayer(player, (Player)event.getActor(), event.getCause());
} else if (event.getActor() instanceof Projectile && ((Projectile) event.getActor()).getShooter() instanceof Player) {
killPlayer(player, (Player)((Projectile) event.getActor()).getShooter(), event.getCause());
} else {
killPlayer(player, null, event.getCause());
}
}
public void reset() {
final Player bukkit = getBukkit();
bukkit.closeInventory();
clearInventory();
bukkit.setExhaustion(0);
bukkit.setFallDistance(0);
bukkit.setFireTicks(0);
bukkit.setFoodLevel(20); // full
bukkit.setMaxHealth(20);
bukkit.setHealth(bukkit.getMaxHealth());
bukkit.setAbsorption(0);
bukkit.setLevel(0);
bukkit.setExp(0); // clear xp
bukkit.setSaturation(5); // default
bukkit.setFastNaturalRegeneration(false);
bukkit.setSlowNaturalRegeneration(true);
bukkit.setAllowFlight(false);
bukkit.setFlying(false);
bukkit.setSneaking(false);
bukkit.setSprinting(false);
bukkit.setFlySpeed(0.1f);
bukkit.setKnockbackReduction(0);
bukkit.setWalkSpeed(WalkSpeedKit.BUKKIT_DEFAULT);
AttributeUtils.removeAllModifiers(bukkit);
resetPotions();
// we only reset bed spawn here so people don't have to see annoying messages when they respawn
bukkit.setBedSpawnLocation(null);
match.callEvent(new PlayerResetEvent(this));
}
@EventHandler (priority = EventPriority.HIGHEST)
public void onPlayerDamage(EntityDamageEvent e){
if (e.isCancelled()){
return;
}
if (e.getDamage() < 0.2){
return;
}
if (!(e.getEntity() instanceof Player)){
return;
}
Player p = (Player) e.getEntity();
UhcPlayer uhcPlayer = GameManager.getGameManager().getPlayersManager().getUhcPlayer(p);
if (!pveList.containsKey(uhcPlayer)){
return; // Only playing players on list
}
if (pveList.get(uhcPlayer)) {
pveList.put(uhcPlayer, false);
uhcPlayer.sendMessage(Lang.SCENARIO_BESTPVE_REMOVED);
}
if (p.getMaxHealth() > maxHealth){
double hp = p.getHealth();
if (hp < maxHealth){
p.setMaxHealth(maxHealth);
}else{
p.setMaxHealth(hp + 1);
}
}
}
@Override
public void run(){
for (UhcPlayer uhcPlayer : GameManager.getGameManager().getPlayersManager().getOnlinePlayingPlayers()){
Player player;
try{
player = uhcPlayer.getPlayer();
}catch (UhcPlayerNotOnlineException ex){
continue; // No hp for offline players
}
if (!pveList.containsKey(uhcPlayer)){
pveList.put(uhcPlayer,true); // Should never occur, playing players are always on list.
Bukkit.getLogger().warning("[UhcCore] " + player.getName() + " was not on best PvE list yet! Please contact a server administrator.");
}
if (player.getGameMode().equals(GameMode.SURVIVAL) && pveList.get(uhcPlayer)){
// heal player
if (player.getHealth() + 2 > player.getMaxHealth()){
player.setMaxHealth(player.getMaxHealth() + 2);
}
player.setHealth(player.getHealth() + 2);
}
}
taskId = Bukkit.getScheduler().scheduleSyncDelayedTask(UhcCore.getPlugin(),this,delay*TimeUtils.SECOND_TICKS);
}
@SuppressWarnings("deprecation")
@Override
public void sendPlayerSkin(Player player, SkinDataWrapper skindata) {
Connection connection = ProtocolSupportAPI.getConnection(player);
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
connection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entityPlayer));
DimensionManager dimThing = null;
switch (player.getWorld().getEnvironment()) {
case NETHER:
dimThing = DimensionManager.NETHER;
break;
case NORMAL:
dimThing = DimensionManager.OVERWORLD;
break;
case THE_END:
dimThing = DimensionManager.THE_END;
break;
}
connection.sendPacket(new PacketPlayOutRespawn(dimThing, entityPlayer.world.getDifficulty(), WorldType.NORMAL, EnumGamemode.getById(player.getGameMode().getValue())));
player.setHealth(player.getHealth());
player.setMaxHealth(player.getMaxHealth());
player.setFlying(player.isFlying());
player.teleport(player.getLocation());
player.setLevel(player.getLevel());
player.setExp(player.getExp());
player.updateInventory();
connection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, entityPlayer));
}
@Override
public void cleanup(Player player)
{
if(player != null)
{
player.setMaxHealth(20);
//player.setHealth(20);
}
}
@Override
public void onPlayerSpawn(Player player)
{
// KitUtils.giveTeamArmor(player);
// player.getInventory().addItem(KitUtils.getStoneSword());
// player.getInventory().addItem(KitUtils.getWoodPick());
// player.getInventory().addItem(KitUtils.getWoodAxe());
// player.getInventory().addItem(KitUtils.getHealthPotion1());
// player.getInventory().addItem(KitUtils.getNavCompass());
player.setMaxHealth(18);
super.onPlayerSpawn(player);
}
@EventHandler(priority = EventPriority.MONITOR)
public void damageListener(final PlayerDeathEvent event)
{
Player killer = event.getEntity().getKiller();
if(killer != null)
{
AnniPlayer p = AnniPlayer.getPlayer(killer.getUniqueId());
if(p != null && p.getKit().equals(this))
{
if(killer.getMaxHealth() <= 24)
killer.setMaxHealth(killer.getMaxHealth()+2);
}
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onEntityDamage(EntityDamageEvent event) {
if (!(event.getEntity() instanceof Player)) return;
Player player = (Player) event.getEntity();
double finalHealth = player.getHealth() - event.getFinalDamage();
if (finalHealth > 0.01) return;
player.setMaxHealth(20);
player.setHealth(player.getMaxHealth());
event.setDamage(1);
player.setLastDamageCause(event);
killPlayer(player, null, event.getCause());
}
/**
* Applies the default state to the player
* and discards the current one<br><br>
*
* Warning: This deletes the entire inventory
* and all other various player attributes
*
* It is recommended to save the player state
* with {@link PlayerStateHolder#create(Player, GameMode)}
* and store a reference to it before invoking this method
*
* @param player
*/
public static void applyDefaultState(Player player, boolean adventureMode) {
player.setGameMode(adventureMode ? GameMode.ADVENTURE : GameMode.SURVIVAL);
player.getInventory().clear();
player.getInventory().setArmorContents(new ItemStack[4]);
player.setItemOnCursor(null);
player.updateInventory();
player.setMaxHealth(20.0);
player.setHealth(20.0);
player.setFoodLevel(20);
player.setLevel(0);
player.setExp(0f);
player.setAllowFlight(false);
player.setFlying(false);
player.setFallDistance(0);
player.setFireTicks(0);
Collection<PotionEffect> effects = player.getActivePotionEffects();
for (PotionEffect effect : effects) {
player.removePotionEffect(effect.getType());
}
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
if (player.canSee(player)) {
continue;
}
player.showPlayer(onlinePlayer);
}
}
@Override
public void setPlayerMaxHealth(Player player, double maxHealth) {
player.setMaxHealth(maxHealth);
}
/**
* Get a player from the cache, and apply the cached inventories and stats
* to the actual player. If no matching player is found in the cache, nothing
* happens and this method simply returns.
*
* @param group The {@link Group} the cached player was in.
* @param gamemode The GameMode the cached player was in.
* @param player The current actual player to apply the data to.
* @param cause What triggered the inventory switch; passed on for post-processing.
*/
private void getDataFromCache(Group group, GameMode gamemode, Player player, DeserializeCause cause) {
PWIPlayer cachedPlayer = getCachedPlayer(group, gamemode, player.getUniqueId());
if (cachedPlayer == null) {
ConsoleLogger.debug("No data for player '" + player.getName() + "' found in cache");
return;
}
ConsoleLogger.debug("Player '" + player.getName() + "' found in cache! Setting their data");
if (settings.getProperty(PwiProperties.LOAD_ENDER_CHESTS))
player.getEnderChest().setContents(cachedPlayer.getEnderChest());
if (settings.getProperty(PwiProperties.LOAD_INVENTORY)) {
player.getInventory().setContents(cachedPlayer.getInventory());
player.getInventory().setArmorContents(cachedPlayer.getArmor());
}
if (settings.getProperty(PwiProperties.LOAD_CAN_FLY))
player.setAllowFlight(cachedPlayer.getCanFly());
if (settings.getProperty(PwiProperties.LOAD_DISPLAY_NAME))
player.setDisplayName(cachedPlayer.getDisplayName());
if (settings.getProperty(PwiProperties.LOAD_EXHAUSTION))
player.setExhaustion(cachedPlayer.getExhaustion());
if (settings.getProperty(PwiProperties.LOAD_EXP))
player.setExp(cachedPlayer.getExperience());
if (settings.getProperty(PwiProperties.LOAD_FLYING) && player.getAllowFlight())
player.setFlying(cachedPlayer.isFlying());
if (settings.getProperty(PwiProperties.LOAD_HUNGER))
player.setFoodLevel(cachedPlayer.getFoodLevel());
if (settings.getProperty(PwiProperties.LOAD_HEALTH)) {
if (bukkitService.shouldUseAttributes()) {
player.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(cachedPlayer.getMaxHealth());
} else {
player.setMaxHealth(cachedPlayer.getMaxHealth());
}
if (cachedPlayer.getHealth() > 0 && cachedPlayer.getHealth() <= cachedPlayer.getMaxHealth()) {
player.setHealth(cachedPlayer.getHealth());
} else {
player.setHealth(cachedPlayer.getMaxHealth());
}
}
if (settings.getProperty(PwiProperties.LOAD_GAMEMODE) && (!settings.getProperty(PwiProperties.SEPARATE_GAMEMODE_INVENTORIES)))
player.setGameMode(cachedPlayer.getGamemode());
if (settings.getProperty(PwiProperties.LOAD_LEVEL))
player.setLevel(cachedPlayer.getLevel());
if (settings.getProperty(PwiProperties.LOAD_POTION_EFFECTS)) {
for (PotionEffect effect : player.getActivePotionEffects()) {
player.removePotionEffect(effect.getType());
}
player.addPotionEffects(cachedPlayer.getPotionEffects());
}
if (settings.getProperty(PwiProperties.LOAD_SATURATION))
player.setSaturation(cachedPlayer.getSaturationLevel());
if (settings.getProperty(PwiProperties.LOAD_FALL_DISTANCE))
player.setFallDistance(cachedPlayer.getFallDistance());
if (settings.getProperty(PwiProperties.LOAD_FIRE_TICKS))
player.setFireTicks(cachedPlayer.getFireTicks());
if (settings.getProperty(PwiProperties.LOAD_MAX_AIR))
player.setMaximumAir(cachedPlayer.getMaxAir());
if (settings.getProperty(PwiProperties.LOAD_REMAINING_AIR))
player.setRemainingAir(cachedPlayer.getRemainingAir());
if (settings.getProperty(PwiProperties.USE_ECONOMY)) {
Economy econ = plugin.getEconomy();
if (econ == null) {
ConsoleLogger.warning("Economy saving is turned on, but no economy found!");
return;
}
EconomyResponse er = econ.withdrawPlayer(player, econ.getBalance(player));
if (er.transactionSuccess()) {
econ.depositPlayer(player, cachedPlayer.getBalance());
} else {
ConsoleLogger.warning("[ECON] Unable to withdraw currency from '" + player.getName() + "': " + er.errorMessage);
}
EconomyResponse bankER = econ.bankWithdraw(player.getName(), econ.bankBalance(player.getName()).amount);
if (bankER.transactionSuccess()) {
econ.bankDeposit(player.getName(), cachedPlayer.getBankBalance());
} else {
ConsoleLogger.warning("[ECON] Unable to withdraw currency from bank of '" + player.getName() + "': " + er.errorMessage);
}
}
InventoryLoadCompleteEvent event = new InventoryLoadCompleteEvent(player, cause);
Bukkit.getPluginManager().callEvent(event);
}
/**
* Apply stats to a player.
*
* @param player The Player to apply the stats to.
* @param stats The stats to apply.
* @param dataFormat See {@link PlayerSerializer#serialize(PWIPlayer)}.
*/
public void deserialize(Player player,JsonObject stats, int dataFormat) {
if (settings.getProperty(PwiProperties.LOAD_CAN_FLY) && stats.has("can-fly"))
player.setAllowFlight(stats.get("can-fly").getAsBoolean());
if (settings.getProperty(PwiProperties.LOAD_DISPLAY_NAME) && stats.has("display-name"))
player.setDisplayName(stats.get("display-name").getAsString());
if (settings.getProperty(PwiProperties.LOAD_EXHAUSTION) && stats.has("exhaustion"))
player.setExhaustion((float) stats.get("exhaustion").getAsDouble());
if (settings.getProperty(PwiProperties.LOAD_EXP) && stats.has("exp"))
player.setExp((float) stats.get("exp").getAsDouble());
if (settings.getProperty(PwiProperties.LOAD_FLYING) && stats.has("flying") && player.getAllowFlight())
player.setFlying(stats.get("flying").getAsBoolean());
if (settings.getProperty(PwiProperties.LOAD_HUNGER) && stats.has("food"))
player.setFoodLevel(stats.get("food").getAsInt());
if (settings.getProperty(PwiProperties.LOAD_HEALTH) &&
stats.has("max-health") &&
stats.has("health")) {
double maxHealth = stats.get("max-health").getAsDouble();
if (bukkitService.shouldUseAttributes()) {
player.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(maxHealth);
} else {
player.setMaxHealth(maxHealth);
}
double health = stats.get("health").getAsDouble();
if (health > 0 && health <= maxHealth) {
player.setHealth(health);
} else {
player.setHealth(maxHealth);
}
}
if (settings.getProperty(PwiProperties.LOAD_GAMEMODE) && (!settings.getProperty(PwiProperties.SEPARATE_GAMEMODE_INVENTORIES)) && stats.has("gamemode")) {
if (stats.get("gamemode").getAsString().length() > 1) {
player.setGameMode(GameMode.valueOf(stats.get("gamemode").getAsString()));
} else {
int gm = stats.get("gamemode").getAsInt();
switch (gm) {
case 0:
player.setGameMode(GameMode.CREATIVE);
break;
case 1:
player.setGameMode(GameMode.SURVIVAL);
break;
case 2:
player.setGameMode(GameMode.ADVENTURE);
break;
case 3:
player.setGameMode(GameMode.SPECTATOR);
break;
}
}
}
if (settings.getProperty(PwiProperties.LOAD_LEVEL) && stats.has("level"))
player.setLevel(stats.get("level").getAsInt());
if (settings.getProperty(PwiProperties.LOAD_POTION_EFFECTS) && stats.has("potion-effects")) {
if (dataFormat < 2) {
PotionEffectSerializer.setPotionEffects(stats.get("potion-effects").getAsString(), player);
} else {
PotionEffectSerializer.setPotionEffects(stats.getAsJsonArray("potion-effects"), player);
}
}
if (settings.getProperty(PwiProperties.LOAD_SATURATION) && stats.has("saturation"))
player.setSaturation((float) stats.get("saturation").getAsDouble());
if (settings.getProperty(PwiProperties.LOAD_FALL_DISTANCE) && stats.has("fallDistance"))
player.setFallDistance(stats.get("fallDistance").getAsFloat());
if (settings.getProperty(PwiProperties.LOAD_FIRE_TICKS) && stats.has("fireTicks"))
player.setFireTicks(stats.get("fireTicks").getAsInt());
if (settings.getProperty(PwiProperties.LOAD_MAX_AIR) && stats.has("maxAir"))
player.setMaximumAir(stats.get("maxAir").getAsInt());
if (settings.getProperty(PwiProperties.LOAD_REMAINING_AIR) && stats.has("remainingAir"))
player.setRemainingAir(stats.get("remainingAir").getAsInt());
}
public void setMaxHealth(Player player, int health) {
player.setMaxHealth(health);
}
public void setMaxHealth(Player player, int health) {
player.setMaxHealth(health);
}
/**
* Get a player from the cache, and apply the cached inventories and stats
* to the actual player. If no matching player is found in the cache, nothing
* happens and this method simply returns.
*
* @param group The {@link Group} the cached player was in.
* @param gamemode The GameMode the cached player was in.
* @param player The current actual player to apply the data to.
* @param cause What triggered the inventory switch; passed on for post-processing.
*/
private void getDataFromCache(Group group, GameMode gamemode, Player player, DeserializeCause cause) {
PWIPlayer cachedPlayer = getCachedPlayer(group, gamemode, player.getUniqueId());
if (cachedPlayer == null) {
ConsoleLogger.debug("No data for player '" + player.getName() + "' found in cache");
return;
}
ConsoleLogger.debug("Player '" + player.getName() + "' found in cache! Setting their data");
if (settings.getProperty(PwiProperties.LOAD_ENDER_CHESTS))
player.getEnderChest().setContents(cachedPlayer.getEnderChest());
if (settings.getProperty(PwiProperties.LOAD_INVENTORY)) {
player.getInventory().setContents(cachedPlayer.getInventory());
player.getInventory().setArmorContents(cachedPlayer.getArmor());
}
if (settings.getProperty(PwiProperties.LOAD_CAN_FLY))
player.setAllowFlight(cachedPlayer.getCanFly());
if (settings.getProperty(PwiProperties.LOAD_DISPLAY_NAME))
player.setDisplayName(cachedPlayer.getDisplayName());
if (settings.getProperty(PwiProperties.LOAD_EXHAUSTION))
player.setExhaustion(cachedPlayer.getExhaustion());
if (settings.getProperty(PwiProperties.LOAD_EXP))
player.setExp(cachedPlayer.getExperience());
if (settings.getProperty(PwiProperties.LOAD_FLYING) && player.getAllowFlight())
player.setFlying(cachedPlayer.isFlying());
if (settings.getProperty(PwiProperties.LOAD_HUNGER))
player.setFoodLevel(cachedPlayer.getFoodLevel());
if (settings.getProperty(PwiProperties.LOAD_HEALTH)) {
if (bukkitService.shouldUseAttributes()) {
player.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(cachedPlayer.getMaxHealth());
} else {
player.setMaxHealth(cachedPlayer.getMaxHealth());
}
if (cachedPlayer.getHealth() > 0 && cachedPlayer.getHealth() <= cachedPlayer.getMaxHealth()) {
player.setHealth(cachedPlayer.getHealth());
} else {
player.setHealth(cachedPlayer.getMaxHealth());
}
}
if (settings.getProperty(PwiProperties.LOAD_GAMEMODE) && (!settings.getProperty(PwiProperties.SEPARATE_GAMEMODE_INVENTORIES)))
player.setGameMode(cachedPlayer.getGamemode());
if (settings.getProperty(PwiProperties.LOAD_LEVEL))
player.setLevel(cachedPlayer.getLevel());
if (settings.getProperty(PwiProperties.LOAD_POTION_EFFECTS)) {
for (PotionEffect effect : player.getActivePotionEffects()) {
player.removePotionEffect(effect.getType());
}
player.addPotionEffects(cachedPlayer.getPotionEffects());
}
if (settings.getProperty(PwiProperties.LOAD_SATURATION))
player.setSaturation(cachedPlayer.getSaturationLevel());
if (settings.getProperty(PwiProperties.LOAD_FALL_DISTANCE))
player.setFallDistance(cachedPlayer.getFallDistance());
if (settings.getProperty(PwiProperties.LOAD_FIRE_TICKS))
player.setFireTicks(cachedPlayer.getFireTicks());
if (settings.getProperty(PwiProperties.LOAD_MAX_AIR))
player.setMaximumAir(cachedPlayer.getMaxAir());
if (settings.getProperty(PwiProperties.LOAD_REMAINING_AIR))
player.setRemainingAir(cachedPlayer.getRemainingAir());
if (settings.getProperty(PwiProperties.USE_ECONOMY)) {
Economy econ = plugin.getEconomy();
if (econ == null) {
ConsoleLogger.warning("Economy saving is turned on, but no economy found!");
return;
}
EconomyResponse er = econ.withdrawPlayer(player, econ.getBalance(player));
if (er.transactionSuccess()) {
econ.depositPlayer(player, cachedPlayer.getBalance());
} else {
ConsoleLogger.warning("[ECON] Unable to withdraw currency from '" + player.getName() + "': " + er.errorMessage);
}
EconomyResponse bankER = econ.bankWithdraw(player.getName(), econ.bankBalance(player.getName()).amount);
if (bankER.transactionSuccess()) {
econ.bankDeposit(player.getName(), cachedPlayer.getBankBalance());
} else {
ConsoleLogger.warning("[ECON] Unable to withdraw currency from bank of '" + player.getName() + "': " + er.errorMessage);
}
}
InventoryLoadCompleteEvent event = new InventoryLoadCompleteEvent(player, cause);
Bukkit.getPluginManager().callEvent(event);
}
/**
* Apply stats to a player.
*
* @param player The Player to apply the stats to.
* @param stats The stats to apply.
* @param dataFormat See {@link PlayerSerializer#serialize(PWIPlayer)}.
*/
public void deserialize(Player player,JsonObject stats, int dataFormat) {
if (settings.getProperty(PwiProperties.LOAD_CAN_FLY) && stats.has("can-fly"))
player.setAllowFlight(stats.get("can-fly").getAsBoolean());
if (settings.getProperty(PwiProperties.LOAD_DISPLAY_NAME) && stats.has("display-name"))
player.setDisplayName(stats.get("display-name").getAsString());
if (settings.getProperty(PwiProperties.LOAD_EXHAUSTION) && stats.has("exhaustion"))
player.setExhaustion((float) stats.get("exhaustion").getAsDouble());
if (settings.getProperty(PwiProperties.LOAD_EXP) && stats.has("exp"))
player.setExp((float) stats.get("exp").getAsDouble());
if (settings.getProperty(PwiProperties.LOAD_FLYING) && stats.has("flying") && player.getAllowFlight())
player.setFlying(stats.get("flying").getAsBoolean());
if (settings.getProperty(PwiProperties.LOAD_HUNGER) && stats.has("food"))
player.setFoodLevel(stats.get("food").getAsInt());
if (settings.getProperty(PwiProperties.LOAD_HEALTH) &&
stats.has("max-health") &&
stats.has("health")) {
double maxHealth = stats.get("max-health").getAsDouble();
if (bukkitService.shouldUseAttributes()) {
player.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(maxHealth);
} else {
player.setMaxHealth(maxHealth);
}
double health = stats.get("health").getAsDouble();
if (health > 0 && health <= maxHealth) {
player.setHealth(health);
} else {
player.setHealth(maxHealth);
}
}
if (settings.getProperty(PwiProperties.LOAD_GAMEMODE) && (!settings.getProperty(PwiProperties.SEPARATE_GAMEMODE_INVENTORIES)) && stats.has("gamemode")) {
if (stats.get("gamemode").getAsString().length() > 1) {
player.setGameMode(GameMode.valueOf(stats.get("gamemode").getAsString()));
} else {
int gm = stats.get("gamemode").getAsInt();
switch (gm) {
case 0:
player.setGameMode(GameMode.CREATIVE);
break;
case 1:
player.setGameMode(GameMode.SURVIVAL);
break;
case 2:
player.setGameMode(GameMode.ADVENTURE);
break;
case 3:
player.setGameMode(GameMode.SPECTATOR);
break;
}
}
}
if (settings.getProperty(PwiProperties.LOAD_LEVEL) && stats.has("level"))
player.setLevel(stats.get("level").getAsInt());
if (settings.getProperty(PwiProperties.LOAD_POTION_EFFECTS) && stats.has("potion-effects")) {
if (dataFormat < 2) {
PotionEffectSerializer.setPotionEffects(stats.get("potion-effects").getAsString(), player);
} else {
PotionEffectSerializer.setPotionEffects(stats.getAsJsonArray("potion-effects"), player);
}
}
if (settings.getProperty(PwiProperties.LOAD_SATURATION) && stats.has("saturation"))
player.setSaturation((float) stats.get("saturation").getAsDouble());
if (settings.getProperty(PwiProperties.LOAD_FALL_DISTANCE) && stats.has("fallDistance"))
player.setFallDistance(stats.get("fallDistance").getAsFloat());
if (settings.getProperty(PwiProperties.LOAD_FIRE_TICKS) && stats.has("fireTicks"))
player.setFireTicks(stats.get("fireTicks").getAsInt());
if (settings.getProperty(PwiProperties.LOAD_MAX_AIR) && stats.has("maxAir"))
player.setMaximumAir(stats.get("maxAir").getAsInt());
if (settings.getProperty(PwiProperties.LOAD_REMAINING_AIR) && stats.has("remainingAir"))
player.setRemainingAir(stats.get("remainingAir").getAsInt());
}
public void apply(Player player, boolean teleport) {
PlayerInventory playerInv = player.getInventory();
boolean is1_9 = MinecraftVersion.getImplementationVersion().compareTo(MinecraftVersion.V1_9) >= 0;
boolean isSimpleSize = playerInv.getContents().length <= SIMPLE_INVENTORY_SIZE;
ItemStack[] inventoryContents = new ItemStack[is1_9 && !isSimpleSize ? playerInv.getSize() : SIMPLE_INVENTORY_SIZE];
System.arraycopy(inventory, 0, inventoryContents, 0, inventoryContents.length);
if (!is1_9 || isSimpleSize) {
ItemStack[] armorContents = new ItemStack[ARMOR_INVENTORY_SIZE];
System.arraycopy(inventory, inventory.length - ARMOR_INVENTORY_SIZE, armorContents, 0, armorContents.length);
playerInv.setArmorContents(armorContents);
}
playerInv.setContents(inventoryContents);
player.setItemOnCursor(null);
Map<Integer, ItemStack> exceeded = playerInv.addItem(onCursor);
for (ItemStack stack : exceeded.values()) {
if (stack.getType() == Material.AIR) {
continue;
}
player.getWorld().dropItem(player.getLocation(), stack);
}
player.updateInventory();
player.setMaxHealth(maxHealth);
player.setHealth(health);
player.setFoodLevel(foodLevel);
player.setLevel(level);
player.setExp(experience);
player.setAllowFlight(allowFlight);
player.setFlying(isFlying);
/* Remove current potion effects */
Collection<PotionEffect> effects = player.getActivePotionEffects();
for (PotionEffect effect : effects) {
player.removePotionEffect(effect.getType());
}
player.addPotionEffects(activeEffects);
player.setExhaustion(exhaustion);
player.setSaturation(saturation);
player.setFallDistance(fallDistance);
player.setFireTicks(fireTicks);
if (scoreboard != player.getScoreboard()) {
Scoreboard showBoard = scoreboard;
if (scoreboard == null) {
showBoard = Bukkit.getScoreboardManager().getMainScoreboard();
}
player.setScoreboard(showBoard);
}
if (teleport) {
player.teleport(location);
}
Location compassTarget = this.compassTarget;
if (compassTarget == null) {
compassTarget = player.getWorld().getSpawnLocation();
}
player.setCompassTarget(compassTarget);
for (WeakReference<Player> ref : cantSee) {
Player cantSeePlayer = ref.get();
if (cantSeePlayer == null) {
// Player object has been garbage-collected
continue;
}
if (!cantSeePlayer.isOnline()) {
continue;
}
player.hidePlayer(cantSeePlayer);
}
player.setGameMode(gamemode);
}