package net.minecraft.entity.player; import com.google.common.base.Charsets; import com.google.common.collect.Lists; import com.mojang.authlib.GameProfile; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.UUID; import net.minecraft.block.Block; import net.minecraft.block.BlockBed; import net.minecraft.block.BlockDirectional; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.command.server.CommandBlockLogic; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EnumCreatureAttribute; import net.minecraft.entity.IEntityMultiPart; import net.minecraft.entity.IMerchant; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.IAttributeInstance; import net.minecraft.entity.boss.EntityDragonPart; import net.minecraft.entity.item.EntityBoat; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityMinecart; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.monster.IMob; import net.minecraft.entity.passive.EntityHorse; import net.minecraft.entity.passive.EntityPig; import static net.minecraft.entity.player.EntityPlayer.EnumChatVisibility.values; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.entity.projectile.EntityFishHook; import net.minecraft.event.ClickEvent; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.Container; import net.minecraft.inventory.ContainerPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryEnderChest; import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.play.server.S12PacketEntityVelocity; import net.minecraft.potion.Potion; import net.minecraft.scoreboard.IScoreObjectiveCriteria; import net.minecraft.scoreboard.Score; import net.minecraft.scoreboard.ScoreObjective; import net.minecraft.scoreboard.ScorePlayerTeam; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.scoreboard.Team; import net.minecraft.server.MinecraftServer; import net.minecraft.stats.AchievementList; import net.minecraft.stats.StatBase; import net.minecraft.stats.StatList; import net.minecraft.tileentity.TileEntitySign; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.FoodStats; import net.minecraft.util.IChatComponent; import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.EnumDifficulty; import net.minecraft.world.IInteractionObject; import net.minecraft.world.LockCode; import net.minecraft.world.World; import net.minecraft.world.WorldSettings; public abstract class EntityPlayer extends EntityLivingBase { /** * Inventory of the player */ public InventoryPlayer inventory = new InventoryPlayer(this); private InventoryEnderChest theInventoryEnderChest = new InventoryEnderChest(); /** * The Container for the player's inventory (which opens when they press E) */ public Container inventoryContainer; /** * The Container the player has open. */ public Container openContainer; /** * The food object of the player, the general hunger logic. */ protected FoodStats foodStats = new FoodStats(); /** * Used to tell if the player pressed jump twice. If this is at 0 and it's * pressed (And they are allowed to fly, as defined in the player's * movementInput) it sets this to 7. If it's pressed and it's greater than 0 * enable fly. */ protected int flyToggleTimer; public float prevCameraYaw; public float cameraYaw; /** * Used by EntityPlayer to prevent too many xp orbs from getting absorbed at * once. */ public int xpCooldown; public double field_71091_bM; public double field_71096_bN; public double field_71097_bO; public double field_71094_bP; public double field_71095_bQ; public double field_71085_bR; /** * Boolean value indicating weather a player is sleeping or not */ protected boolean sleeping; /** * the current location of the player */ public BlockPos playerLocation; private int sleepTimer; public float field_71079_bU; public float field_71089_bV; /** * holds the spawn chunk of the player */ private BlockPos spawnChunk; /** * Whether this player's spawn point is forced, preventing execution of bed * checks. */ private boolean spawnForced; /** * Holds the coordinate of the player when enter a minecraft to ride. */ private BlockPos startMinecartRidingCoordinate; /** * The player's capabilities. (See class PlayerCapabilities) */ public PlayerCapabilities capabilities = new PlayerCapabilities(); /** * The current experience level the player is on. */ public int experienceLevel; /** * The total amount of experience the player has. This also includes the * amount of experience within their Experience Bar. */ public int experienceTotal; /** * The current amount of experience the player has within their Experience * Bar. */ public float experience; private int field_175152_f; /** * This is the item that is in use when the player is holding down the * useItemButton (e.g., bow, food, sword) */ private ItemStack itemInUse; /** * This field starts off equal to getMaxItemUseDuration and is decremented * on each tick */ private int itemInUseCount; protected float speedOnGround = 0.1F; protected float speedInAir = 0.02F; private int field_82249_h; /** * The player's unique game profile */ private final GameProfile gameProfile; private boolean field_175153_bG = false; /** * An instance of a fishing rod's hook. If this isn't null, the icon image * of the fishing rod is slightly different */ public EntityFishHook fishEntity; private static final String __OBFID = "CL_00001711"; public EntityPlayer(World worldIn, GameProfile p_i45324_2_) { super(worldIn); this.entityUniqueID = getUUID(p_i45324_2_); this.gameProfile = p_i45324_2_; this.inventoryContainer = new ContainerPlayer(this.inventory, !worldIn.isRemote, this); this.openContainer = this.inventoryContainer; BlockPos var3 = worldIn.getSpawnPoint(); this.setLocationAndAngles((double) var3.getX() + 0.5D, (double) (var3.getY() + 1), (double) var3.getZ() + 0.5D, 0.0F, 0.0F); this.field_70741_aB = 180.0F; this.fireResistance = 20; } protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getAttributeMap().registerAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(1.0D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.10000000149011612D); } protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte) 0)); this.dataWatcher.addObject(17, Float.valueOf(0.0F)); this.dataWatcher.addObject(18, Integer.valueOf(0)); this.dataWatcher.addObject(10, Byte.valueOf((byte) 0)); } /** * Checks if the entity is currently using an item (e.g., bow, food, sword) * by holding down the useItemButton */ public boolean isUsingItem() { return this.itemInUse != null; } public void stopUsingItem() { if (this.itemInUse != null) { this.itemInUse.onPlayerStoppedUsing(this.worldObj, this, this.itemInUseCount); } this.clearItemInUse(); } public void clearItemInUse() { this.itemInUse = null; this.itemInUseCount = 0; if (!this.worldObj.isRemote) { this.setEating(false); } } public boolean isBlocking() { return this.isUsingItem() && this.itemInUse.getItem().getItemUseAction(this.itemInUse) == EnumAction.BLOCK; } /** * Called to update the entity's position/logic. */ public void onUpdate() { this.noClip = this.func_175149_v(); if (this.func_175149_v()) { this.onGround = false; } if (this.itemInUse != null) { ItemStack var1 = this.inventory.getCurrentItem(); if (var1 == this.itemInUse) { if (this.itemInUseCount <= 25 && this.itemInUseCount % 4 == 0) { this.updateItemUse(var1, 5); } if (--this.itemInUseCount == 0 && !this.worldObj.isRemote) { this.onItemUseFinish(); } } else { this.clearItemInUse(); } } if (this.xpCooldown > 0) { --this.xpCooldown; } if (this.isPlayerSleeping()) { ++this.sleepTimer; if (this.sleepTimer > 100) { this.sleepTimer = 100; } if (!this.worldObj.isRemote) { if (!this.func_175143_p()) { this.wakeUpPlayer(true, true, false); } else if (this.worldObj.isDaytime()) { this.wakeUpPlayer(false, true, true); } } } else if (this.sleepTimer > 0) { ++this.sleepTimer; if (this.sleepTimer >= 110) { this.sleepTimer = 0; } } super.onUpdate(); if (!this.worldObj.isRemote && this.openContainer != null && !this.openContainer.canInteractWith(this)) { this.closeScreen(); this.openContainer = this.inventoryContainer; } if (this.isBurning() && this.capabilities.disableDamage) { this.extinguish(); } this.field_71091_bM = this.field_71094_bP; this.field_71096_bN = this.field_71095_bQ; this.field_71097_bO = this.field_71085_bR; double var14 = this.posX - this.field_71094_bP; double var3 = this.posY - this.field_71095_bQ; double var5 = this.posZ - this.field_71085_bR; double var7 = 10.0D; if (var14 > var7) { this.field_71091_bM = this.field_71094_bP = this.posX; } if (var5 > var7) { this.field_71097_bO = this.field_71085_bR = this.posZ; } if (var3 > var7) { this.field_71096_bN = this.field_71095_bQ = this.posY; } if (var14 < -var7) { this.field_71091_bM = this.field_71094_bP = this.posX; } if (var5 < -var7) { this.field_71097_bO = this.field_71085_bR = this.posZ; } if (var3 < -var7) { this.field_71096_bN = this.field_71095_bQ = this.posY; } this.field_71094_bP += var14 * 0.25D; this.field_71085_bR += var5 * 0.25D; this.field_71095_bQ += var3 * 0.25D; if (this.ridingEntity == null) { this.startMinecartRidingCoordinate = null; } if (!this.worldObj.isRemote) { this.foodStats.onUpdate(this); this.triggerAchievement(StatList.minutesPlayedStat); if (this.isEntityAlive()) { this.triggerAchievement(StatList.timeSinceDeathStat); } } int var9 = 29999999; double var10 = MathHelper.clamp_double(this.posX, -2.9999999E7D, 2.9999999E7D); double var12 = MathHelper.clamp_double(this.posZ, -2.9999999E7D, 2.9999999E7D); if (var10 != this.posX || var12 != this.posZ) { this.setPosition(var10, this.posY, var12); } } /** * Return the amount of time this entity should stay in a portal before * being transported. */ public int getMaxInPortalTime() { return this.capabilities.disableDamage ? 0 : 80; } protected String getSwimSound() { return "game.player.swim"; } protected String getSplashSound() { return "game.player.swim.splash"; } /** * Return the amount of cooldown before this entity can use a portal again. */ public int getPortalCooldown() { return 10; } public void playSound(String name, float volume, float pitch) { this.worldObj.playSoundToNearExcept(this, name, volume, pitch); } /** * Plays sounds and makes particles for item in use state */ protected void updateItemUse(ItemStack itemStackIn, int p_71010_2_) { if (itemStackIn.getItemUseAction() == EnumAction.DRINK) { this.playSound("random.drink", 0.5F, this.worldObj.rand.nextFloat() * 0.1F + 0.9F); } if (itemStackIn.getItemUseAction() == EnumAction.EAT) { for (int var3 = 0; var3 < p_71010_2_; ++var3) { Vec3 var4 = new Vec3(((double) this.rand.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D); var4 = var4.rotatePitch(-this.rotationPitch * (float) Math.PI / 180.0F); var4 = var4.rotateYaw(-this.rotationYaw * (float) Math.PI / 180.0F); double var5 = (double) (-this.rand.nextFloat()) * 0.6D - 0.3D; Vec3 var7 = new Vec3(((double) this.rand.nextFloat() - 0.5D) * 0.3D, var5, 0.6D); var7 = var7.rotatePitch(-this.rotationPitch * (float) Math.PI / 180.0F); var7 = var7.rotateYaw(-this.rotationYaw * (float) Math.PI / 180.0F); var7 = var7.addVector(this.posX, this.posY + (double) this.getEyeHeight(), this.posZ); if (itemStackIn.getHasSubtypes()) { this.worldObj.spawnParticle(EnumParticleTypes.ITEM_CRACK, var7.xCoord, var7.yCoord, var7.zCoord, var4.xCoord, var4.yCoord + 0.05D, var4.zCoord, new int[]{Item.getIdFromItem(itemStackIn.getItem()), itemStackIn.getMetadata()}); } else { this.worldObj.spawnParticle(EnumParticleTypes.ITEM_CRACK, var7.xCoord, var7.yCoord, var7.zCoord, var4.xCoord, var4.yCoord + 0.05D, var4.zCoord, new int[]{Item.getIdFromItem(itemStackIn.getItem())}); } } this.playSound("random.eat", 0.5F + 0.5F * (float) this.rand.nextInt(2), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); } } /** * Used for when item use count runs out, ie: eating completed */ protected void onItemUseFinish() { if (this.itemInUse != null) { this.updateItemUse(this.itemInUse, 16); int var1 = this.itemInUse.stackSize; ItemStack var2 = this.itemInUse.onItemUseFinish(this.worldObj, this); if (var2 != this.itemInUse || var2 != null && var2.stackSize != var1) { this.inventory.mainInventory[this.inventory.currentItem] = var2; if (var2.stackSize == 0) { this.inventory.mainInventory[this.inventory.currentItem] = null; } } this.clearItemInUse(); } } /** * Dead and sleeping entities cannot move */ protected boolean isMovementBlocked() { return this.getHealth() <= 0.0F || this.isPlayerSleeping(); } /** * set current crafting inventory back to the 2x2 square */ protected void closeScreen() { this.openContainer = this.inventoryContainer; } /** * Handles updating while being ridden by an entity */ public void updateRidden() { if (!this.worldObj.isRemote && this.isSneaking()) { this.mountEntity((Entity) null); this.setSneaking(false); } else { double var1 = this.posX; double var3 = this.posY; double var5 = this.posZ; float var7 = this.rotationYaw; float var8 = this.rotationPitch; super.updateRidden(); this.prevCameraYaw = this.cameraYaw; this.cameraYaw = 0.0F; this.addMountedMovementStat(this.posX - var1, this.posY - var3, this.posZ - var5); if (this.ridingEntity instanceof EntityPig) { this.rotationPitch = var8; this.rotationYaw = var7; this.renderYawOffset = ((EntityPig) this.ridingEntity).renderYawOffset; } } } protected void updateEntityActionState() { super.updateEntityActionState(); this.updateArmSwingProgress(); this.rotationYawHead = this.rotationYaw; } /** * Called frequently so the entity can update its state every tick as * required. For example, zombies and skeletons use this to react to * sunlight and start to burn. */ public void onLivingUpdate() { if (this.flyToggleTimer > 0) { --this.flyToggleTimer; } if (this.worldObj.getDifficulty() == EnumDifficulty.PEACEFUL && this.worldObj.getGameRules().getGameRuleBooleanValue("naturalRegeneration")) { if (this.getHealth() < this.getMaxHealth() && this.ticksExisted % 20 == 0) { this.heal(1.0F); } if (this.foodStats.needFood() && this.ticksExisted % 10 == 0) { this.foodStats.setFoodLevel(this.foodStats.getFoodLevel() + 1); } } this.inventory.decrementAnimations(); this.prevCameraYaw = this.cameraYaw; super.onLivingUpdate(); IAttributeInstance var1 = this.getEntityAttribute(SharedMonsterAttributes.movementSpeed); if (!this.worldObj.isRemote) { var1.setBaseValue((double) this.capabilities.getWalkSpeed()); } this.jumpMovementFactor = this.speedInAir; if (this.isSprinting()) { this.jumpMovementFactor = (float) ((double) this.jumpMovementFactor + (double) this.speedInAir * 0.3D); } this.setAIMoveSpeed((float) var1.getAttributeValue()); float var2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); float var3 = (float) (Math.atan(-this.motionY * 0.20000000298023224D) * 15.0D); if (var2 > 0.1F) { var2 = 0.1F; } if (!this.onGround || this.getHealth() <= 0.0F) { var2 = 0.0F; } if (this.onGround || this.getHealth() <= 0.0F) { var3 = 0.0F; } this.cameraYaw += (var2 - this.cameraYaw) * 0.4F; this.cameraPitch += (var3 - this.cameraPitch) * 0.8F; if (this.getHealth() > 0.0F && !this.func_175149_v()) { AxisAlignedBB var4 = null; if (this.ridingEntity != null && !this.ridingEntity.isDead) { var4 = this.getEntityBoundingBox().union(this.ridingEntity.getEntityBoundingBox()).expand(1.0D, 0.0D, 1.0D); } else { var4 = this.getEntityBoundingBox().expand(1.0D, 0.5D, 1.0D); } List var5 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, var4); for (int var6 = 0; var6 < var5.size(); ++var6) { Entity var7 = (Entity) var5.get(var6); if (!var7.isDead) { this.collideWithPlayer(var7); } } } } private void collideWithPlayer(Entity p_71044_1_) { p_71044_1_.onCollideWithPlayer(this); } public int getScore() { return this.dataWatcher.getWatchableObjectInt(18); } /** * Set player's score */ public void setScore(int p_85040_1_) { this.dataWatcher.updateObject(18, Integer.valueOf(p_85040_1_)); } /** * Add to player's score */ public void addScore(int p_85039_1_) { int var2 = this.getScore(); this.dataWatcher.updateObject(18, Integer.valueOf(var2 + p_85039_1_)); } /** * Called when the mob's health reaches 0. */ public void onDeath(DamageSource cause) { super.onDeath(cause); this.setSize(0.2F, 0.2F); this.setPosition(this.posX, this.posY, this.posZ); this.motionY = 0.10000000149011612D; if (this.getName().equals("Notch")) { this.func_146097_a(new ItemStack(Items.apple, 1), true, false); } if (!this.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory")) { this.inventory.dropAllItems(); } if (cause != null) { this.motionX = (double) (-MathHelper.cos((this.attackedAtYaw + this.rotationYaw) * (float) Math.PI / 180.0F) * 0.1F); this.motionZ = (double) (-MathHelper.sin((this.attackedAtYaw + this.rotationYaw) * (float) Math.PI / 180.0F) * 0.1F); } else { this.motionX = this.motionZ = 0.0D; } this.triggerAchievement(StatList.deathsStat); this.func_175145_a(StatList.timeSinceDeathStat); } /** * Returns the sound this mob makes when it is hurt. */ protected String getHurtSound() { return "game.player.hurt"; } /** * Returns the sound this mob makes on death. */ protected String getDeathSound() { return "game.player.die"; } /** * Adds a value to the player score. Currently not actually used and the * entity passed in does nothing. Args: entity, scoreToAdd */ public void addToPlayerScore(Entity entityIn, int amount) { this.addScore(amount); Collection var3 = this.getWorldScoreboard().func_96520_a(IScoreObjectiveCriteria.totalKillCount); if (entityIn instanceof EntityPlayer) { this.triggerAchievement(StatList.playerKillsStat); var3.addAll(this.getWorldScoreboard().func_96520_a(IScoreObjectiveCriteria.playerKillCount)); var3.addAll(this.func_175137_e(entityIn)); } else { this.triggerAchievement(StatList.mobKillsStat); } Iterator var4 = var3.iterator(); while (var4.hasNext()) { ScoreObjective var5 = (ScoreObjective) var4.next(); Score var6 = this.getWorldScoreboard().getValueFromObjective(this.getName(), var5); var6.func_96648_a(); } } private Collection func_175137_e(Entity p_175137_1_) { ScorePlayerTeam var2 = this.getWorldScoreboard().getPlayersTeam(this.getName()); if (var2 != null) { int var3 = var2.func_178775_l().func_175746_b(); if (var3 >= 0 && var3 < IScoreObjectiveCriteria.field_178793_i.length) { Iterator var4 = this.getWorldScoreboard().func_96520_a(IScoreObjectiveCriteria.field_178793_i[var3]).iterator(); while (var4.hasNext()) { ScoreObjective var5 = (ScoreObjective) var4.next(); Score var6 = this.getWorldScoreboard().getValueFromObjective(p_175137_1_.getName(), var5); var6.func_96648_a(); } } } ScorePlayerTeam var7 = this.getWorldScoreboard().getPlayersTeam(p_175137_1_.getName()); if (var7 != null) { int var8 = var7.func_178775_l().func_175746_b(); if (var8 >= 0 && var8 < IScoreObjectiveCriteria.field_178792_h.length) { return this.getWorldScoreboard().func_96520_a(IScoreObjectiveCriteria.field_178792_h[var8]); } } return Lists.newArrayList(); } /** * Called when player presses the drop item key */ public EntityItem dropOneItem(boolean p_71040_1_) { return this.func_146097_a(this.inventory.decrStackSize(this.inventory.currentItem, p_71040_1_ && this.inventory.getCurrentItem() != null ? this.inventory.getCurrentItem().stackSize : 1), false, true); } /** * Args: itemstack, flag */ public EntityItem dropPlayerItemWithRandomChoice(ItemStack itemStackIn, boolean p_71019_2_) { return this.func_146097_a(itemStackIn, false, false); } public EntityItem func_146097_a(ItemStack p_146097_1_, boolean p_146097_2_, boolean p_146097_3_) { if (p_146097_1_ == null) { return null; } else if (p_146097_1_.stackSize == 0) { return null; } else { double var4 = this.posY - 0.30000001192092896D + (double) this.getEyeHeight(); EntityItem var6 = new EntityItem(this.worldObj, this.posX, var4, this.posZ, p_146097_1_); var6.setPickupDelay(40); if (p_146097_3_) { var6.setThrower(this.getName()); } float var7; float var8; if (p_146097_2_) { var7 = this.rand.nextFloat() * 0.5F; var8 = this.rand.nextFloat() * (float) Math.PI * 2.0F; var6.motionX = (double) (-MathHelper.sin(var8) * var7); var6.motionZ = (double) (MathHelper.cos(var8) * var7); var6.motionY = 0.20000000298023224D; } else { var7 = 0.3F; var6.motionX = (double) (-MathHelper.sin(this.rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float) Math.PI) * var7); var6.motionZ = (double) (MathHelper.cos(this.rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float) Math.PI) * var7); var6.motionY = (double) (-MathHelper.sin(this.rotationPitch / 180.0F * (float) Math.PI) * var7 + 0.1F); var8 = this.rand.nextFloat() * (float) Math.PI * 2.0F; var7 = 0.02F * this.rand.nextFloat(); var6.motionX += Math.cos((double) var8) * (double) var7; var6.motionY += (double) ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F); var6.motionZ += Math.sin((double) var8) * (double) var7; } this.joinEntityItemWithWorld(var6); if (p_146097_3_) { this.triggerAchievement(StatList.dropStat); } return var6; } } /** * Joins the passed in entity item with the world. Args: entityItem */ protected void joinEntityItemWithWorld(EntityItem p_71012_1_) { this.worldObj.spawnEntityInWorld(p_71012_1_); } public float func_180471_a(Block p_180471_1_) { float var2 = this.inventory.getStrVsBlock(p_180471_1_); if (var2 > 1.0F) { int var3 = EnchantmentHelper.getEfficiencyModifier(this); ItemStack var4 = this.inventory.getCurrentItem(); if (var3 > 0 && var4 != null) { var2 += (float) (var3 * var3 + 1); } } if (this.isPotionActive(Potion.digSpeed)) { var2 *= 1.0F + (float) (this.getActivePotionEffect(Potion.digSpeed).getAmplifier() + 1) * 0.2F; } if (this.isPotionActive(Potion.digSlowdown)) { float var5 = 1.0F; switch (this.getActivePotionEffect(Potion.digSlowdown).getAmplifier()) { case 0: var5 = 0.3F; break; case 1: var5 = 0.09F; break; case 2: var5 = 0.0027F; break; case 3: default: var5 = 8.1E-4F; } var2 *= var5; } if (this.isInsideOfMaterial(Material.water) && !EnchantmentHelper.getAquaAffinityModifier(this)) { var2 /= 5.0F; } if (!this.onGround) { var2 /= 5.0F; } return var2; } /** * Checks if the player has the ability to harvest a block (checks current * inventory item for a tool if necessary) */ public boolean canHarvestBlock(Block p_146099_1_) { return this.inventory.func_146025_b(p_146099_1_); } /** * (abstract) Protected helper method to read subclass entity data from NBT. */ public void readEntityFromNBT(NBTTagCompound tagCompund) { super.readEntityFromNBT(tagCompund); this.entityUniqueID = getUUID(this.gameProfile); NBTTagList var2 = tagCompund.getTagList("Inventory", 10); this.inventory.readFromNBT(var2); this.inventory.currentItem = tagCompund.getInteger("SelectedItemSlot"); this.sleeping = tagCompund.getBoolean("Sleeping"); this.sleepTimer = tagCompund.getShort("SleepTimer"); this.experience = tagCompund.getFloat("XpP"); this.experienceLevel = tagCompund.getInteger("XpLevel"); this.experienceTotal = tagCompund.getInteger("XpTotal"); this.field_175152_f = tagCompund.getInteger("XpSeed"); if (this.field_175152_f == 0) { this.field_175152_f = this.rand.nextInt(); } this.setScore(tagCompund.getInteger("Score")); if (this.sleeping) { this.playerLocation = new BlockPos(this); this.wakeUpPlayer(true, true, false); } if (tagCompund.hasKey("SpawnX", 99) && tagCompund.hasKey("SpawnY", 99) && tagCompund.hasKey("SpawnZ", 99)) { this.spawnChunk = new BlockPos(tagCompund.getInteger("SpawnX"), tagCompund.getInteger("SpawnY"), tagCompund.getInteger("SpawnZ")); this.spawnForced = tagCompund.getBoolean("SpawnForced"); } this.foodStats.readNBT(tagCompund); this.capabilities.readCapabilitiesFromNBT(tagCompund); if (tagCompund.hasKey("EnderItems", 9)) { NBTTagList var3 = tagCompund.getTagList("EnderItems", 10); this.theInventoryEnderChest.loadInventoryFromNBT(var3); } } /** * (abstract) Protected helper method to write subclass entity data to NBT. */ public void writeEntityToNBT(NBTTagCompound tagCompound) { super.writeEntityToNBT(tagCompound); tagCompound.setTag("Inventory", this.inventory.writeToNBT(new NBTTagList())); tagCompound.setInteger("SelectedItemSlot", this.inventory.currentItem); tagCompound.setBoolean("Sleeping", this.sleeping); tagCompound.setShort("SleepTimer", (short) this.sleepTimer); tagCompound.setFloat("XpP", this.experience); tagCompound.setInteger("XpLevel", this.experienceLevel); tagCompound.setInteger("XpTotal", this.experienceTotal); tagCompound.setInteger("XpSeed", this.field_175152_f); tagCompound.setInteger("Score", this.getScore()); if (this.spawnChunk != null) { tagCompound.setInteger("SpawnX", this.spawnChunk.getX()); tagCompound.setInteger("SpawnY", this.spawnChunk.getY()); tagCompound.setInteger("SpawnZ", this.spawnChunk.getZ()); tagCompound.setBoolean("SpawnForced", this.spawnForced); } this.foodStats.writeNBT(tagCompound); this.capabilities.writeCapabilitiesToNBT(tagCompound); tagCompound.setTag("EnderItems", this.theInventoryEnderChest.saveInventoryToNBT()); ItemStack var2 = this.inventory.getCurrentItem(); if (var2 != null && var2.getItem() != null) { tagCompound.setTag("SelectedItem", var2.writeToNBT(new NBTTagCompound())); } } /** * Called when the entity is attacked. */ public boolean attackEntityFrom(DamageSource source, float amount) { if (this.func_180431_b(source)) { return false; } else if (this.capabilities.disableDamage && !source.canHarmInCreative()) { return false; } else { this.entityAge = 0; if (this.getHealth() <= 0.0F) { return false; } else { if (this.isPlayerSleeping() && !this.worldObj.isRemote) { this.wakeUpPlayer(true, true, false); } if (source.isDifficultyScaled()) { if (this.worldObj.getDifficulty() == EnumDifficulty.PEACEFUL) { amount = 0.0F; } if (this.worldObj.getDifficulty() == EnumDifficulty.EASY) { amount = amount / 2.0F + 1.0F; } if (this.worldObj.getDifficulty() == EnumDifficulty.HARD) { amount = amount * 3.0F / 2.0F; } } if (amount == 0.0F) { return false; } else { Entity var3 = source.getEntity(); if (var3 instanceof EntityArrow && ((EntityArrow) var3).shootingEntity != null) { var3 = ((EntityArrow) var3).shootingEntity; } return super.attackEntityFrom(source, amount); } } } } public boolean canAttackPlayer(EntityPlayer other) { Team var2 = this.getTeam(); Team var3 = other.getTeam(); return var2 == null ? true : (!var2.isSameTeam(var3) ? true : var2.getAllowFriendlyFire()); } protected void damageArmor(float p_70675_1_) { this.inventory.damageArmor(p_70675_1_); } /** * Returns the current armor value as determined by a call to * InventoryPlayer.getTotalArmorValue */ public int getTotalArmorValue() { return this.inventory.getTotalArmorValue(); } /** * When searching for vulnerable players, if a player is invisible, the * return value of this is the chance of seeing them anyway. */ public float getArmorVisibility() { int var1 = 0; ItemStack[] var2 = this.inventory.armorInventory; int var3 = var2.length; for (int var4 = 0; var4 < var3; ++var4) { ItemStack var5 = var2[var4]; if (var5 != null) { ++var1; } } return (float) var1 / (float) this.inventory.armorInventory.length; } /** * Deals damage to the entity. If its a EntityPlayer then will take damage * from the armor first and then health second with the reduced value. Args: * damageAmount */ protected void damageEntity(DamageSource p_70665_1_, float p_70665_2_) { if (!this.func_180431_b(p_70665_1_)) { if (!p_70665_1_.isUnblockable() && this.isBlocking() && p_70665_2_ > 0.0F) { p_70665_2_ = (1.0F + p_70665_2_) * 0.5F; } p_70665_2_ = this.applyArmorCalculations(p_70665_1_, p_70665_2_); p_70665_2_ = this.applyPotionDamageCalculations(p_70665_1_, p_70665_2_); float var3 = p_70665_2_; p_70665_2_ = Math.max(p_70665_2_ - this.getAbsorptionAmount(), 0.0F); this.setAbsorptionAmount(this.getAbsorptionAmount() - (var3 - p_70665_2_)); if (p_70665_2_ != 0.0F) { this.addExhaustion(p_70665_1_.getHungerDamage()); float var4 = this.getHealth(); this.setHealth(this.getHealth() - p_70665_2_); this.getCombatTracker().func_94547_a(p_70665_1_, var4, p_70665_2_); if (p_70665_2_ < 3.4028235E37F) { this.addStat(StatList.damageTakenStat, Math.round(p_70665_2_ * 10.0F)); } } } } public void func_175141_a(TileEntitySign p_175141_1_) { } public void func_146095_a(CommandBlockLogic p_146095_1_) { } public void displayVillagerTradeGui(IMerchant villager) { } /** * Displays the GUI for interacting with a chest inventory. Args: * chestInventory */ public void displayGUIChest(IInventory chestInventory) { } public void displayGUIHorse(EntityHorse p_110298_1_, IInventory p_110298_2_) { } public void displayGui(IInteractionObject guiOwner) { } /** * Displays the GUI for interacting with a book. */ public void displayGUIBook(ItemStack bookStack) { } public boolean interactWith(Entity p_70998_1_) { if (this.func_175149_v()) { if (p_70998_1_ instanceof IInventory) { this.displayGUIChest((IInventory) p_70998_1_); } return false; } else { ItemStack var2 = this.getCurrentEquippedItem(); ItemStack var3 = var2 != null ? var2.copy() : null; if (!p_70998_1_.interactFirst(this)) { if (var2 != null && p_70998_1_ instanceof EntityLivingBase) { if (this.capabilities.isCreativeMode) { var2 = var3; } if (var2.interactWithEntity(this, (EntityLivingBase) p_70998_1_)) { if (var2.stackSize <= 0 && !this.capabilities.isCreativeMode) { this.destroyCurrentEquippedItem(); } return true; } } return false; } else { if (var2 != null && var2 == this.getCurrentEquippedItem()) { if (var2.stackSize <= 0 && !this.capabilities.isCreativeMode) { this.destroyCurrentEquippedItem(); } else if (var2.stackSize < var3.stackSize && this.capabilities.isCreativeMode) { var2.stackSize = var3.stackSize; } } return true; } } } /** * Returns the currently being used item by the player. */ public ItemStack getCurrentEquippedItem() { return this.inventory.getCurrentItem(); } /** * Destroys the currently equipped item from the player's inventory. */ public void destroyCurrentEquippedItem() { this.inventory.setInventorySlotContents(this.inventory.currentItem, (ItemStack) null); } /** * Returns the Y Offset of this entity. */ public double getYOffset() { return -0.35D; } /** * Attacks for the player the targeted entity with the currently equipped * item. The equipped item has hitEntity called on it. Args: targetEntity */ public void attackTargetEntityWithCurrentItem(Entity targetEntity) { if (targetEntity.canAttackWithItem()) { if (!targetEntity.hitByEntity(this)) { float var2 = (float) this.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); byte var3 = 0; float var4 = 0.0F; if (targetEntity instanceof EntityLivingBase) { var4 = EnchantmentHelper.func_152377_a(this.getHeldItem(), ((EntityLivingBase) targetEntity).getCreatureAttribute()); } else { var4 = EnchantmentHelper.func_152377_a(this.getHeldItem(), EnumCreatureAttribute.UNDEFINED); } int var18 = var3 + EnchantmentHelper.getRespiration(this); if (this.isSprinting()) { ++var18; } if (var2 > 0.0F || var4 > 0.0F) { boolean var5 = this.fallDistance > 0.0F && !this.onGround && !this.isOnLadder() && !this.isInWater() && !this.isPotionActive(Potion.blindness) && this.ridingEntity == null && targetEntity instanceof EntityLivingBase; if (var5 && var2 > 0.0F) { var2 *= 1.5F; } var2 += var4; boolean var6 = false; int var7 = EnchantmentHelper.getFireAspectModifier(this); if (targetEntity instanceof EntityLivingBase && var7 > 0 && !targetEntity.isBurning()) { var6 = true; targetEntity.setFire(1); } double var8 = targetEntity.motionX; double var10 = targetEntity.motionY; double var12 = targetEntity.motionZ; boolean var14 = targetEntity.attackEntityFrom(DamageSource.causePlayerDamage(this), var2); if (var14) { if (var18 > 0) { targetEntity.addVelocity((double) (-MathHelper.sin(this.rotationYaw * (float) Math.PI / 180.0F) * (float) var18 * 0.5F), 0.1D, (double) (MathHelper.cos(this.rotationYaw * (float) Math.PI / 180.0F) * (float) var18 * 0.5F)); this.motionX *= 0.6D; this.motionZ *= 0.6D; this.setSprinting(false); } if (targetEntity instanceof EntityPlayerMP && targetEntity.velocityChanged) { ((EntityPlayerMP) targetEntity).playerNetServerHandler.sendPacket(new S12PacketEntityVelocity(targetEntity)); targetEntity.velocityChanged = false; targetEntity.motionX = var8; targetEntity.motionY = var10; targetEntity.motionZ = var12; } if (var5) { this.onCriticalHit(targetEntity); } if (var4 > 0.0F) { this.onEnchantmentCritical(targetEntity); } if (var2 >= 18.0F) { this.triggerAchievement(AchievementList.overkill); } this.setLastAttacker(targetEntity); if (targetEntity instanceof EntityLivingBase) { EnchantmentHelper.func_151384_a((EntityLivingBase) targetEntity, this); } EnchantmentHelper.func_151385_b(this, targetEntity); ItemStack var15 = this.getCurrentEquippedItem(); Object var16 = targetEntity; if (targetEntity instanceof EntityDragonPart) { IEntityMultiPart var17 = ((EntityDragonPart) targetEntity).entityDragonObj; if (var17 instanceof EntityLivingBase) { var16 = (EntityLivingBase) var17; } } if (var15 != null && var16 instanceof EntityLivingBase) { var15.hitEntity((EntityLivingBase) var16, this); if (var15.stackSize <= 0) { this.destroyCurrentEquippedItem(); } } if (targetEntity instanceof EntityLivingBase) { this.addStat(StatList.damageDealtStat, Math.round(var2 * 10.0F)); if (var7 > 0) { targetEntity.setFire(var7 * 4); } } this.addExhaustion(0.3F); } else if (var6) { targetEntity.extinguish(); } } } } } /** * Called when the player performs a critical hit on the Entity. Args: * entity that was hit critically */ public void onCriticalHit(Entity p_71009_1_) { } public void onEnchantmentCritical(Entity p_71047_1_) { } /** * Will get destroyed next tick. */ public void setDead() { super.setDead(); this.inventoryContainer.onContainerClosed(this); if (this.openContainer != null) { this.openContainer.onContainerClosed(this); } } /** * Checks if this entity is inside of an opaque block */ public boolean isEntityInsideOpaqueBlock() { return !this.sleeping && super.isEntityInsideOpaqueBlock(); } /** * Returns the GameProfile for this player */ public GameProfile getGameProfile() { return this.gameProfile; } public EntityPlayer.EnumStatus func_180469_a(BlockPos p_180469_1_) { if (!this.worldObj.isRemote) { if (this.isPlayerSleeping() || !this.isEntityAlive()) { return EntityPlayer.EnumStatus.OTHER_PROBLEM; } if (!this.worldObj.provider.isSurfaceWorld()) { return EntityPlayer.EnumStatus.NOT_POSSIBLE_HERE; } if (this.worldObj.isDaytime()) { return EntityPlayer.EnumStatus.NOT_POSSIBLE_NOW; } if (Math.abs(this.posX - (double) p_180469_1_.getX()) > 3.0D || Math.abs(this.posY - (double) p_180469_1_.getY()) > 2.0D || Math.abs(this.posZ - (double) p_180469_1_.getZ()) > 3.0D) { return EntityPlayer.EnumStatus.TOO_FAR_AWAY; } double var2 = 8.0D; double var4 = 5.0D; List var6 = this.worldObj.getEntitiesWithinAABB(EntityMob.class, new AxisAlignedBB((double) p_180469_1_.getX() - var2, (double) p_180469_1_.getY() - var4, (double) p_180469_1_.getZ() - var2, (double) p_180469_1_.getX() + var2, (double) p_180469_1_.getY() + var4, (double) p_180469_1_.getZ() + var2)); if (!var6.isEmpty()) { return EntityPlayer.EnumStatus.NOT_SAFE; } } if (this.isRiding()) { this.mountEntity((Entity) null); } this.setSize(0.2F, 0.2F); if (this.worldObj.isBlockLoaded(p_180469_1_)) { EnumFacing var7 = (EnumFacing) this.worldObj.getBlockState(p_180469_1_).getValue(BlockDirectional.AGE); float var3 = 0.5F; float var8 = 0.5F; switch (EntityPlayer.SwitchEnumFacing.field_179420_a[var7.ordinal()]) { case 1: var8 = 0.9F; break; case 2: var8 = 0.1F; break; case 3: var3 = 0.1F; break; case 4: var3 = 0.9F; } this.func_175139_a(var7); this.setPosition((double) ((float) p_180469_1_.getX() + var3), (double) ((float) p_180469_1_.getY() + 0.6875F), (double) ((float) p_180469_1_.getZ() + var8)); } else { this.setPosition((double) ((float) p_180469_1_.getX() + 0.5F), (double) ((float) p_180469_1_.getY() + 0.6875F), (double) ((float) p_180469_1_.getZ() + 0.5F)); } this.sleeping = true; this.sleepTimer = 0; this.playerLocation = p_180469_1_; this.motionX = this.motionZ = this.motionY = 0.0D; if (!this.worldObj.isRemote) { this.worldObj.updateAllPlayersSleepingFlag(); } return EntityPlayer.EnumStatus.OK; } private void func_175139_a(EnumFacing p_175139_1_) { this.field_71079_bU = 0.0F; this.field_71089_bV = 0.0F; switch (EntityPlayer.SwitchEnumFacing.field_179420_a[p_175139_1_.ordinal()]) { case 1: this.field_71089_bV = -1.8F; break; case 2: this.field_71089_bV = 1.8F; break; case 3: this.field_71079_bU = 1.8F; break; case 4: this.field_71079_bU = -1.8F; } } /** * Wake up the player if they're sleeping. */ public void wakeUpPlayer(boolean p_70999_1_, boolean updateWorldFlag, boolean setSpawn) { this.setSize(0.6F, 1.8F); IBlockState var4 = this.worldObj.getBlockState(this.playerLocation); if (this.playerLocation != null && var4.getBlock() == Blocks.bed) { this.worldObj.setBlockState(this.playerLocation, var4.withProperty(BlockBed.OCCUPIED_PROP, Boolean.valueOf(false)), 4); BlockPos var5 = BlockBed.getSafeExitLocation(this.worldObj, this.playerLocation, 0); if (var5 == null) { var5 = this.playerLocation.offsetUp(); } this.setPosition((double) ((float) var5.getX() + 0.5F), (double) ((float) var5.getY() + 0.1F), (double) ((float) var5.getZ() + 0.5F)); } this.sleeping = false; if (!this.worldObj.isRemote && updateWorldFlag) { this.worldObj.updateAllPlayersSleepingFlag(); } this.sleepTimer = p_70999_1_ ? 0 : 100; if (setSpawn) { this.func_180473_a(this.playerLocation, false); } } private boolean func_175143_p() { return this.worldObj.getBlockState(this.playerLocation).getBlock() == Blocks.bed; } public static BlockPos func_180467_a(World worldIn, BlockPos p_180467_1_, boolean p_180467_2_) { if (worldIn.getBlockState(p_180467_1_).getBlock() != Blocks.bed) { if (!p_180467_2_) { return null; } else { Material var3 = worldIn.getBlockState(p_180467_1_).getBlock().getMaterial(); Material var4 = worldIn.getBlockState(p_180467_1_.offsetUp()).getBlock().getMaterial(); boolean var5 = !var3.isSolid() && !var3.isLiquid(); boolean var6 = !var4.isSolid() && !var4.isLiquid(); return var5 && var6 ? p_180467_1_ : null; } } else { return BlockBed.getSafeExitLocation(worldIn, p_180467_1_, 0); } } /** * Returns whether player is sleeping or not */ public boolean isPlayerSleeping() { return this.sleeping; } /** * Returns whether or not the player is asleep and the screen has fully * faded. */ public boolean isPlayerFullyAsleep() { return this.sleeping && this.sleepTimer >= 100; } public void addChatComponentMessage(IChatComponent p_146105_1_) { } public BlockPos func_180470_cg() { return this.spawnChunk; } public boolean isSpawnForced() { return this.spawnForced; } public void func_180473_a(BlockPos p_180473_1_, boolean p_180473_2_) { if (p_180473_1_ != null) { this.spawnChunk = p_180473_1_; this.spawnForced = p_180473_2_; } else { this.spawnChunk = null; this.spawnForced = false; } } /** * Will trigger the specified trigger. */ public void triggerAchievement(StatBase p_71029_1_) { this.addStat(p_71029_1_, 1); } /** * Adds a value to a statistic field. */ public void addStat(StatBase p_71064_1_, int p_71064_2_) { } public void func_175145_a(StatBase p_175145_1_) { } /** * Causes this entity to do an upwards motion (jumping). */ public void jump() { super.jump(); this.triggerAchievement(StatList.jumpStat); if (this.isSprinting()) { this.addExhaustion(0.8F); } else { this.addExhaustion(0.2F); } } /** * Moves the entity based on the specified heading. Args: strafe, forward */ public void moveEntityWithHeading(float p_70612_1_, float p_70612_2_) { double var3 = this.posX; double var5 = this.posY; double var7 = this.posZ; if (this.capabilities.isFlying && this.ridingEntity == null) { double var9 = this.motionY; float var11 = this.jumpMovementFactor; this.jumpMovementFactor = this.capabilities.getFlySpeed() * (float) (this.isSprinting() ? 2 : 1); super.moveEntityWithHeading(p_70612_1_, p_70612_2_); this.motionY = var9 * 0.6D; this.jumpMovementFactor = var11; } else { super.moveEntityWithHeading(p_70612_1_, p_70612_2_); } this.addMovementStat(this.posX - var3, this.posY - var5, this.posZ - var7); } /** * the movespeed used for the new AI system */ public float getAIMoveSpeed() { return (float) this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue(); } /** * Adds a value to a movement statistic field - like run, walk, swin or * climb. */ public void addMovementStat(double p_71000_1_, double p_71000_3_, double p_71000_5_) { if (this.ridingEntity == null) { int var7; if (this.isInsideOfMaterial(Material.water)) { var7 = Math.round(MathHelper.sqrt_double(p_71000_1_ * p_71000_1_ + p_71000_3_ * p_71000_3_ + p_71000_5_ * p_71000_5_) * 100.0F); if (var7 > 0) { this.addStat(StatList.distanceDoveStat, var7); this.addExhaustion(0.015F * (float) var7 * 0.01F); } } else if (this.isInWater()) { var7 = Math.round(MathHelper.sqrt_double(p_71000_1_ * p_71000_1_ + p_71000_5_ * p_71000_5_) * 100.0F); if (var7 > 0) { this.addStat(StatList.distanceSwumStat, var7); this.addExhaustion(0.015F * (float) var7 * 0.01F); } } else if (this.isOnLadder()) { if (p_71000_3_ > 0.0D) { this.addStat(StatList.distanceClimbedStat, (int) Math.round(p_71000_3_ * 100.0D)); } } else if (this.onGround) { var7 = Math.round(MathHelper.sqrt_double(p_71000_1_ * p_71000_1_ + p_71000_5_ * p_71000_5_) * 100.0F); if (var7 > 0) { this.addStat(StatList.distanceWalkedStat, var7); if (this.isSprinting()) { this.addStat(StatList.distanceSprintedStat, var7); this.addExhaustion(0.099999994F * (float) var7 * 0.01F); } else { if (this.isSneaking()) { this.addStat(StatList.distanceCrouchedStat, var7); } this.addExhaustion(0.01F * (float) var7 * 0.01F); } } } else { var7 = Math.round(MathHelper.sqrt_double(p_71000_1_ * p_71000_1_ + p_71000_5_ * p_71000_5_) * 100.0F); if (var7 > 25) { this.addStat(StatList.distanceFlownStat, var7); } } } } /** * Adds a value to a mounted movement statistic field - by minecart, boat, * or pig. */ private void addMountedMovementStat(double p_71015_1_, double p_71015_3_, double p_71015_5_) { if (this.ridingEntity != null) { int var7 = Math.round(MathHelper.sqrt_double(p_71015_1_ * p_71015_1_ + p_71015_3_ * p_71015_3_ + p_71015_5_ * p_71015_5_) * 100.0F); if (var7 > 0) { if (this.ridingEntity instanceof EntityMinecart) { this.addStat(StatList.distanceByMinecartStat, var7); if (this.startMinecartRidingCoordinate == null) { this.startMinecartRidingCoordinate = new BlockPos(this); } else if (this.startMinecartRidingCoordinate.distanceSq((double) MathHelper.floor_double(this.posX), (double) MathHelper.floor_double(this.posY), (double) MathHelper.floor_double(this.posZ)) >= 1000000.0D) { this.triggerAchievement(AchievementList.onARail); } } else if (this.ridingEntity instanceof EntityBoat) { this.addStat(StatList.distanceByBoatStat, var7); } else if (this.ridingEntity instanceof EntityPig) { this.addStat(StatList.distanceByPigStat, var7); } else if (this.ridingEntity instanceof EntityHorse) { this.addStat(StatList.distanceByHorseStat, var7); } } } } public void fall(float distance, float damageMultiplier) { if (!this.capabilities.allowFlying) { if (distance >= 2.0F) { this.addStat(StatList.distanceFallenStat, (int) Math.round((double) distance * 100.0D)); } super.fall(distance, damageMultiplier); } } /** * sets the players height back to normal after doing things like sleeping * and dieing */ protected void resetHeight() { if (!this.func_175149_v()) { super.resetHeight(); } } protected String func_146067_o(int p_146067_1_) { return p_146067_1_ > 4 ? "game.player.hurt.fall.big" : "game.player.hurt.fall.small"; } /** * This method gets called when the entity kills another one. */ public void onKillEntity(EntityLivingBase entityLivingIn) { if (entityLivingIn instanceof IMob) { this.triggerAchievement(AchievementList.killEnemy); } EntityList.EntityEggInfo var2 = (EntityList.EntityEggInfo) EntityList.entityEggs.get(Integer.valueOf(EntityList.getEntityID(entityLivingIn))); if (var2 != null) { this.triggerAchievement(var2.field_151512_d); } } /** * Sets the Entity inside a web block. */ public void setInWeb() { if (!this.capabilities.isFlying) { super.setInWeb(); } } public ItemStack getCurrentArmor(int p_82169_1_) { return this.inventory.armorItemInSlot(p_82169_1_); } /** * Add experience points to player. */ public void addExperience(int p_71023_1_) { this.addScore(p_71023_1_); int var2 = Integer.MAX_VALUE - this.experienceTotal; if (p_71023_1_ > var2) { p_71023_1_ = var2; } this.experience += (float) p_71023_1_ / (float) this.xpBarCap(); for (this.experienceTotal += p_71023_1_; this.experience >= 1.0F; this.experience /= (float) this.xpBarCap()) { this.experience = (this.experience - 1.0F) * (float) this.xpBarCap(); this.addExperienceLevel(1); } } public int func_175138_ci() { return this.field_175152_f; } public void func_71013_b(int p_71013_1_) { this.experienceLevel -= p_71013_1_; if (this.experienceLevel < 0) { this.experienceLevel = 0; this.experience = 0.0F; this.experienceTotal = 0; } this.field_175152_f = this.rand.nextInt(); } /** * Add experience levels to this player. */ public void addExperienceLevel(int p_82242_1_) { this.experienceLevel += p_82242_1_; if (this.experienceLevel < 0) { this.experienceLevel = 0; this.experience = 0.0F; this.experienceTotal = 0; } if (p_82242_1_ > 0 && this.experienceLevel % 5 == 0 && (float) this.field_82249_h < (float) this.ticksExisted - 100.0F) { float var2 = this.experienceLevel > 30 ? 1.0F : (float) this.experienceLevel / 30.0F; this.worldObj.playSoundAtEntity(this, "random.levelup", var2 * 0.75F, 1.0F); this.field_82249_h = this.ticksExisted; } } /** * This method returns the cap amount of experience that the experience bar * can hold. With each level, the experience cap on the player's experience * bar is raised by 10. */ public int xpBarCap() { return this.experienceLevel >= 30 ? 112 + (this.experienceLevel - 30) * 9 : (this.experienceLevel >= 15 ? 37 + (this.experienceLevel - 15) * 5 : 7 + this.experienceLevel * 2); } /** * increases exhaustion level by supplied amount */ public void addExhaustion(float p_71020_1_) { if (!this.capabilities.disableDamage) { if (!this.worldObj.isRemote) { this.foodStats.addExhaustion(p_71020_1_); } } } /** * Returns the player's FoodStats object. */ public FoodStats getFoodStats() { return this.foodStats; } public boolean canEat(boolean p_71043_1_) { return (p_71043_1_ || this.foodStats.needFood()) && !this.capabilities.disableDamage; } /** * Checks if the player's health is not full and not zero. */ public boolean shouldHeal() { return this.getHealth() > 0.0F && this.getHealth() < this.getMaxHealth(); } /** * sets the itemInUse when the use item button is clicked. Args: itemstack, * int maxItemUseDuration */ public void setItemInUse(ItemStack p_71008_1_, int p_71008_2_) { if (p_71008_1_ != this.itemInUse) { this.itemInUse = p_71008_1_; this.itemInUseCount = p_71008_2_; if (!this.worldObj.isRemote) { this.setEating(true); } } } public boolean func_175142_cm() { return this.capabilities.allowEdit; } public boolean func_175151_a(BlockPos p_175151_1_, EnumFacing p_175151_2_, ItemStack p_175151_3_) { if (this.capabilities.allowEdit) { return true; } else if (p_175151_3_ == null) { return false; } else { BlockPos var4 = p_175151_1_.offset(p_175151_2_.getOpposite()); Block var5 = this.worldObj.getBlockState(var4).getBlock(); return p_175151_3_.canPlaceOn(var5) || p_175151_3_.canEditBlocks(); } } /** * Get the experience points the entity currently has. */ protected int getExperiencePoints(EntityPlayer p_70693_1_) { if (this.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory")) { return 0; } else { int var2 = this.experienceLevel * 7; return var2 > 100 ? 100 : var2; } } /** * Only use is to identify if class is an instance of player for experience * dropping */ protected boolean isPlayer() { return true; } /** * Copies the values from the given player into this player if boolean par2 * is true. Always clones Ender Chest Inventory. */ public void clonePlayer(EntityPlayer p_71049_1_, boolean p_71049_2_) { if (p_71049_2_) { this.inventory.copyInventory(p_71049_1_.inventory); this.setHealth(p_71049_1_.getHealth()); this.foodStats = p_71049_1_.foodStats; this.experienceLevel = p_71049_1_.experienceLevel; this.experienceTotal = p_71049_1_.experienceTotal; this.experience = p_71049_1_.experience; this.setScore(p_71049_1_.getScore()); this.teleportDirection = p_71049_1_.teleportDirection; } else if (this.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory")) { this.inventory.copyInventory(p_71049_1_.inventory); this.experienceLevel = p_71049_1_.experienceLevel; this.experienceTotal = p_71049_1_.experienceTotal; this.experience = p_71049_1_.experience; this.setScore(p_71049_1_.getScore()); } this.theInventoryEnderChest = p_71049_1_.theInventoryEnderChest; this.getDataWatcher().updateObject(10, Byte.valueOf(p_71049_1_.getDataWatcher().getWatchableObjectByte(10))); } /** * returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ protected boolean canTriggerWalking() { return !this.capabilities.isFlying; } /** * Sends the player's abilities to the server (if there is one). */ public void sendPlayerAbilities() { } /** * Sets the player's game mode and sends it to them. */ public void setGameType(WorldSettings.GameType gameType) { } /** * Gets the name of this command sender (usually username, but possibly * "Rcon") */ public String getName() { return this.gameProfile.getName(); } /** * Returns the InventoryEnderChest of this player. */ public InventoryEnderChest getInventoryEnderChest() { return this.theInventoryEnderChest; } /** * 0: Tool in Hand; 1-4: Armor */ public ItemStack getEquipmentInSlot(int p_71124_1_) { return p_71124_1_ == 0 ? this.inventory.getCurrentItem() : this.inventory.armorInventory[p_71124_1_ - 1]; } /** * Returns the item that this EntityLiving is holding, if any. */ public ItemStack getHeldItem() { return this.inventory.getCurrentItem(); } /** * Sets the held item, or an armor slot. Slot 0 is held item. Slot 1-4 is * armor. Params: Item, slot */ public void setCurrentItemOrArmor(int slotIn, ItemStack itemStackIn) { this.inventory.armorInventory[slotIn] = itemStackIn; } public abstract boolean func_175149_v(); /** * returns the inventory of this entity (only used in EntityPlayerMP it * seems) */ public ItemStack[] getInventory() { return this.inventory.armorInventory; } public boolean isPushedByWater() { return !this.capabilities.isFlying; } public Scoreboard getWorldScoreboard() { return this.worldObj.getScoreboard(); } public Team getTeam() { return this.getWorldScoreboard().getPlayersTeam(this.getName()); } public IChatComponent getDisplayName() { ChatComponentText var1 = new ChatComponentText(ScorePlayerTeam.formatPlayerName(this.getTeam(), this.getName())); var1.getChatStyle().setChatClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/msg " + this.getName() + " ")); var1.getChatStyle().setChatHoverEvent(this.func_174823_aP()); var1.getChatStyle().setInsertion(this.getName()); return var1; } public float getEyeHeight() { float var1 = 1.62F; if (this.isPlayerSleeping()) { var1 = 0.2F; } if (this.isSneaking()) { var1 -= 0.08F; } return var1; } public void setAbsorptionAmount(float p_110149_1_) { if (p_110149_1_ < 0.0F) { p_110149_1_ = 0.0F; } this.getDataWatcher().updateObject(17, Float.valueOf(p_110149_1_)); } public float getAbsorptionAmount() { return this.getDataWatcher().getWatchableObjectFloat(17); } /** * Gets a players UUID given their GameProfie */ public static UUID getUUID(GameProfile p_146094_0_) { UUID var1 = p_146094_0_.getId(); if (var1 == null) { var1 = func_175147_b(p_146094_0_.getName()); } return var1; } public static UUID func_175147_b(String p_175147_0_) { return UUID.nameUUIDFromBytes(("OfflinePlayer:" + p_175147_0_).getBytes(Charsets.UTF_8)); } public boolean func_175146_a(LockCode p_175146_1_) { if (p_175146_1_.isEmpty()) { return true; } else { ItemStack var2 = this.getCurrentEquippedItem(); return var2 != null && var2.hasDisplayName() ? var2.getDisplayName().equals(p_175146_1_.getLock()) : false; } } public boolean sendCommandFeedback() { return MinecraftServer.getServer().worldServers[0].getGameRules().getGameRuleBooleanValue("sendCommandFeedback"); } public boolean func_174820_d(int p_174820_1_, ItemStack p_174820_2_) { if (p_174820_1_ >= 0 && p_174820_1_ < this.inventory.mainInventory.length) { this.inventory.setInventorySlotContents(p_174820_1_, p_174820_2_); return true; } else { int var3 = p_174820_1_ - 100; int var4; if (var3 >= 0 && var3 < this.inventory.armorInventory.length) { var4 = var3 + 1; if (p_174820_2_ != null && p_174820_2_.getItem() != null) { if (p_174820_2_.getItem() instanceof ItemArmor) { if (EntityLiving.getArmorPosition(p_174820_2_) != var4) { return false; } } else if (var4 != 4 || p_174820_2_.getItem() != Items.skull && !(p_174820_2_.getItem() instanceof ItemBlock)) { return false; } } this.inventory.setInventorySlotContents(var3 + this.inventory.mainInventory.length, p_174820_2_); return true; } else { var4 = p_174820_1_ - 200; if (var4 >= 0 && var4 < this.theInventoryEnderChest.getSizeInventory()) { this.theInventoryEnderChest.setInventorySlotContents(var4, p_174820_2_); return true; } else { return false; } } } } public static enum EnumChatVisibility { FULL("FULL", 0, 0, "options.chat.visibility.full"), SYSTEM("SYSTEM", 1, 1, "options.chat.visibility.system"), HIDDEN("HIDDEN", 2, 2, "options.chat.visibility.hidden"); private static final EntityPlayer.EnumChatVisibility[] field_151432_d = new EntityPlayer.EnumChatVisibility[values().length]; private final int chatVisibility; private final String resourceKey; private static final EntityPlayer.EnumChatVisibility[] $VALUES = new EntityPlayer.EnumChatVisibility[]{FULL, SYSTEM, HIDDEN}; private static final String __OBFID = "CL_00001714"; private EnumChatVisibility(String p_i45323_1_, int p_i45323_2_, int p_i45323_3_, String p_i45323_4_) { this.chatVisibility = p_i45323_3_; this.resourceKey = p_i45323_4_; } public int getChatVisibility() { return this.chatVisibility; } public static EntityPlayer.EnumChatVisibility getEnumChatVisibility(int p_151426_0_) { return field_151432_d[p_151426_0_ % field_151432_d.length]; } static { EntityPlayer.EnumChatVisibility[] var0 = values(); int var1 = var0.length; for (int var2 = 0; var2 < var1; ++var2) { EntityPlayer.EnumChatVisibility var3 = var0[var2]; field_151432_d[var3.chatVisibility] = var3; } } } public static enum EnumStatus { OK("OK", 0), NOT_POSSIBLE_HERE("NOT_POSSIBLE_HERE", 1), NOT_POSSIBLE_NOW("NOT_POSSIBLE_NOW", 2), TOO_FAR_AWAY("TOO_FAR_AWAY", 3), OTHER_PROBLEM("OTHER_PROBLEM", 4), NOT_SAFE("NOT_SAFE", 5); private static final EntityPlayer.EnumStatus[] $VALUES = new EntityPlayer.EnumStatus[]{OK, NOT_POSSIBLE_HERE, NOT_POSSIBLE_NOW, TOO_FAR_AWAY, OTHER_PROBLEM, NOT_SAFE}; private static final String __OBFID = "CL_00001712"; private EnumStatus(String p_i1751_1_, int p_i1751_2_) { } } static final class SwitchEnumFacing { static final int[] field_179420_a = new int[EnumFacing.values().length]; private static final String __OBFID = "CL_00002188"; static { try { field_179420_a[EnumFacing.SOUTH.ordinal()] = 1; } catch (NoSuchFieldError var4) { ; } try { field_179420_a[EnumFacing.NORTH.ordinal()] = 2; } catch (NoSuchFieldError var3) { ; } try { field_179420_a[EnumFacing.WEST.ordinal()] = 3; } catch (NoSuchFieldError var2) { ; } try { field_179420_a[EnumFacing.EAST.ordinal()] = 4; } catch (NoSuchFieldError var1) { ; } } } }