Package net.minecraft.src

Source Code of net.minecraft.src.EntityPlayerSP

package net.minecraft.src;

// Spout Start

import org.spoutcraft.api.Spoutcraft;
import org.spoutcraft.api.util.FixedLocation;
import org.spoutcraft.client.SpoutClient;
import org.spoutcraft.client.config.Configuration;
import org.spoutcraft.client.gui.minimap.GuiOverviewMap;
import org.spoutcraft.client.packet.PacketRenderDistance;
import org.spoutcraft.client.player.ClientPlayer;
// Spout End

public class EntityPlayerSP extends AbstractClientPlayer {
 
  public MovementInput movementInput; 
  protected Minecraft mc;

  /**
   * Used to tell if the player pressed forward twice. If this is at 0 and it's pressed (And they are allowed to sprint,
   * aka enough food on the ground etc) it sets this to 7. If it's pressed and it's greater than 0 enable sprinting.
   */
  protected int sprintToggleTimer;

  /** Ticks left before sprinting is disabled. */
  public int sprintingTicksLeft;
  public float renderArmYaw;
  public float renderArmPitch;
  public float prevRenderArmYaw;
  public float prevRenderArmPitch;
  private int horseJumpPowerCounter;
  private float horseJumpPower;
  private MouseFilter field_71162_ch = new MouseFilter();
  private MouseFilter field_71160_ci = new MouseFilter();
  private MouseFilter field_71161_cj = new MouseFilter();

  /** The amount of time an entity has been in a Portal */
  public float timeInPortal;

  /** The amount of time an entity has been in a Portal the previous tick */
  public float prevTimeInPortal;
  // Spout Start
  public FixedLocation lastClickLocation = null;
  private KeyBinding fogKey = null;
  // Spout End

  public EntityPlayerSP(Minecraft par1Minecraft, World par2World, Session par3Session, int par4) {
    super(par2World, par3Session.getUsername());
    this.mc = par1Minecraft;
    this.dimension = par4;   
    // Spout Start
    ((ClientPlayer) spoutEnty).setPlayer(this);
    SpoutClient.getInstance().player = (ClientPlayer) spoutEnty;
    // Spout End
  }

  public void updateEntityActionState() {
    super.updateEntityActionState();
    this.moveStrafing = this.movementInput.moveStrafe;
    this.moveForward = this.movementInput.moveForward;
    // Spout Start
    this.isJumping = this.movementInput.jump || this.isTreadingWater();
    // Spout End
    this.prevRenderArmYaw = this.renderArmYaw;
    this.prevRenderArmPitch = this.renderArmPitch;
    this.renderArmPitch = (float)((double)this.renderArmPitch + (double)(this.rotationPitch - this.renderArmPitch) * 0.5D);
    this.renderArmYaw = (float)((double)this.renderArmYaw + (double)(this.rotationYaw - this.renderArmYaw) * 0.5D);
  }
 
  /**
   * 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() {
    // Spout Start
    if (this.sprintingTicksLeft > 0 && !runToggle) {
    // Spout End
      --this.sprintingTicksLeft;

      if (this.sprintingTicksLeft == 0) {
        this.setSprinting(false);
      }
    }

    if (this.sprintToggleTimer > 0) {
      --this.sprintToggleTimer;
    }

    if (this.mc.playerController.enableEverythingIsScrewedUpMode()) {
      this.posX = this.posZ = 0.5D;
      this.posX = 0.0D;
      this.posZ = 0.0D;
      this.rotationYaw = (float)this.ticksExisted / 12.0F;
      this.rotationPitch = 10.0F;
      this.posY = 68.5D;
    } else {
      if (!this.mc.statFileWriter.hasAchievementUnlocked(AchievementList.openInventory)) {
        // Spout Start
        //this.mc.guiAchievement.queueAchievementInformation(AchievementList.openInventory);
        // Spout End
      }

      this.prevTimeInPortal = this.timeInPortal;

      if (this.inPortal) {
        if (this.mc.currentScreen != null) {
          this.mc.displayGuiScreen((GuiScreen)null);
        }

        if (this.timeInPortal == 0.0F) {
          this.mc.sndManager.playSoundFX("portal.trigger", 1.0F, this.rand.nextFloat() * 0.4F + 0.8F);
        }

        this.timeInPortal += 0.0125F;

        if (this.timeInPortal >= 1.0F) {
          this.timeInPortal = 1.0F;
        }

        this.inPortal = false;
      } else if (this.isPotionActive(Potion.confusion) && this.getActivePotionEffect(Potion.confusion).getDuration() > 60) {
        this.timeInPortal += 0.006666667F;

        if (this.timeInPortal > 1.0F) {
          this.timeInPortal = 1.0F;
        }
      } else {
        if (this.timeInPortal > 0.0F) {
          this.timeInPortal -= 0.05F;
        }

        if (this.timeInPortal < 0.0F) {
          this.timeInPortal = 0.0F;
        }
      }

      if (this.timeUntilPortal > 0) {
        --this.timeUntilPortal;
      }

      // Spout Start
      boolean wasFlightUp = movementInput.flyingUp;
      // Spout End

      boolean var1 = this.movementInput.jump;
      float var2 = 0.8F;
      boolean var3 = this.movementInput.moveForward >= var2;
      // Spout Start - Keep parameter
      this.movementInput.updatePlayerMoveState(this);
      // Spout End

      if (this.isUsingItem() && !this.isRiding()) {
        this.movementInput.moveStrafe *= 0.2F;
        this.movementInput.moveForward *= 0.2F;
        this.sprintToggleTimer = 0;
      }

      if (this.movementInput.sneak && this.ySize < 0.2F) {
        this.ySize = 0.2F;
      }

      this.pushOutOfBlocks(this.posX - (double)this.width * 0.35D, this.boundingBox.minY + 0.5D, this.posZ + (double)this.width * 0.35D);
      this.pushOutOfBlocks(this.posX - (double)this.width * 0.35D, this.boundingBox.minY + 0.5D, this.posZ - (double)this.width * 0.35D);
      this.pushOutOfBlocks(this.posX + (double)this.width * 0.35D, this.boundingBox.minY + 0.5D, this.posZ - (double)this.width * 0.35D);
      this.pushOutOfBlocks(this.posX + (double)this.width * 0.35D, this.boundingBox.minY + 0.5D, this.posZ + (double)this.width * 0.35D);
      boolean var4 = (float)this.getFoodStats().getFoodLevel() > 6.0F || this.capabilities.allowFlying;

      if (this.onGround && !var3 && this.movementInput.moveForward >= var2 && !this.isSprinting() && var4 && !this.isUsingItem() && !this.isPotionActive(Potion.blindness)) {
        if (this.sprintToggleTimer == 0) {
          this.sprintToggleTimer = 7;
        } else {
          this.setSprinting(true);
          this.sprintToggleTimer = 0;
        }
      }

      if (this.isSneaking()) {
        this.sprintToggleTimer = 0;
      }

      if (this.isSprinting() && (this.movementInput.moveForward < var2 || this.isCollidedHorizontally || !var4)) {
        this.setSprinting(false);
      }

      // Spout Start
      if (this.capabilities.allowFlying && !wasFlightUp && this.movementInput.flyingUp) {
      // Spout End
        if (this.flyToggleTimer == 0) {
          this.flyToggleTimer = 7;
        } else {
          this.capabilities.isFlying = !this.capabilities.isFlying;
          this.sendPlayerAbilities();
          this.flyToggleTimer = 0;
        }
      }

      if (this.capabilities.isFlying) {
        // Spout Start
        if (this.movementInput.flyingDown) {
          if (SpoutClient.getInstance().isFlySpeedCheat()) {
            this.motionY -= 0.15D * Configuration.getFlightSpeedFactor();
          } else {
            this.motionY -= 0.15D;
          }
        }

        if (this.movementInput.flyingUp) {
          if (SpoutClient.getInstance().isFlySpeedCheat()) {
            this.motionY += 0.15D * Configuration.getFlightSpeedFactor();
          } else {
            this.motionY += 0.15D;
          }
        }
        // Spout End
      }

      if (this.isRidingHorse()) {
        if (this.horseJumpPowerCounter < 0) {
          ++this.horseJumpPowerCounter;

          if (this.horseJumpPowerCounter == 0) {
            this.horseJumpPower = 0.0F;
          }
        }

        if (var1 && !this.movementInput.jump) {
          this.horseJumpPowerCounter = -10;
          this.func_110318_g();
        } else if (!var1 && this.movementInput.jump) {
          this.horseJumpPowerCounter = 0;
          this.horseJumpPower = 0.0F;
        } else if (var1) {
          ++this.horseJumpPowerCounter;

          if (this.horseJumpPowerCounter < 10) {
            this.horseJumpPower = (float)this.horseJumpPowerCounter * 0.1F;
          } else {
            this.horseJumpPower = 0.8F + 2.0F / (float)(this.horseJumpPowerCounter - 9) * 0.1F;
          }
        }
      } else {
        this.horseJumpPower = 0.0F;
      }
     
      super.onLivingUpdate();

      if (this.onGround && this.capabilities.isFlying) {
        this.capabilities.isFlying = false;
        this.sendPlayerAbilities();
      }
    }
  }

  /**
   * Gets the player's field of view multiplier. (ex. when flying)
   */
  public float getFOVMultiplier() {
    float var1 = 1.0F;

    if (this.capabilities.isFlying) {
      var1 *= 1.1F;
    }

    AttributeInstance var2 = this.getEntityAttribute(SharedMonsterAttributes.movementSpeed);
    var1 = (float)((double)var1 * ((var2.getAttributeValue() / (double)this.capabilities.getWalkSpeed() + 1.0D) / 2.0D));

    if (this.isUsingItem() && this.getItemInUse().itemID == Item.bow.itemID) {
      int var3 = this.getItemInUseDuration();
      float var4 = (float)var3 / 20.0F;

      if (var4 > 1.0F) {
        var4 = 1.0F;
      } else {
        var4 *= var4;
      }

      var1 *= 1.0F - var4 * 0.15F;
    }

    return var1;
  }

  /**
   * sets current screen to null (used on escape buttons of GUIs)
   */
  public void closeScreen() {
    super.closeScreen();
    this.mc.displayGuiScreen((GuiScreen)null);
  }

  /**
   * Displays the GUI for editing a sign. Args: tileEntitySign
   */
  public void displayGUIEditSign(TileEntity par1TileEntity) {
    if (par1TileEntity instanceof TileEntitySign) {
      this.mc.displayGuiScreen(new GuiEditSign((TileEntitySign)par1TileEntity));
    } else if (par1TileEntity instanceof TileEntityCommandBlock) {
      this.mc.displayGuiScreen(new GuiCommandBlock((TileEntityCommandBlock)par1TileEntity));
    }
  }

  /**
   * Displays the GUI for interacting with a book.
   */
  public void displayGUIBook(ItemStack par1ItemStack) {
    Item var2 = par1ItemStack.getItem();

    if (var2 == Item.writtenBook) {
      this.mc.displayGuiScreen(new GuiScreenBook(this, par1ItemStack, false));
    } else if (var2 == Item.writableBook) {
      this.mc.displayGuiScreen(new GuiScreenBook(this, par1ItemStack, true));
    }
  }

  /**
   * Displays the GUI for interacting with a chest inventory. Args: chestInventory
   */
  public void displayGUIChest(IInventory par1IInventory) {
    this.mc.displayGuiScreen(new GuiChest(this.inventory, par1IInventory));
  }

  public void displayGUIHopper(TileEntityHopper par1TileEntityHopper) {
    this.mc.displayGuiScreen(new GuiHopper(this.inventory, par1TileEntityHopper));
  }

  public void displayGUIHopperMinecart(EntityMinecartHopper par1EntityMinecartHopper) {
    this.mc.displayGuiScreen(new GuiHopper(this.inventory, par1EntityMinecartHopper));
  }
 
  public void displayGUIHorse(EntityHorse par1EntityHorse, IInventory par2IInventory) {
    this.mc.displayGuiScreen(new GuiScreenHorseInventory(this.inventory, par2IInventory, par1EntityHorse));
  }

  /**
   * Displays the crafting GUI for a workbench.
   */
  public void displayGUIWorkbench(int par1, int par2, int par3) {
    this.mc.displayGuiScreen(new GuiCrafting(this.inventory, this.worldObj, par1, par2, par3));
  }

  public void displayGUIEnchantment(int par1, int par2, int par3, String par4Str) {
    this.mc.displayGuiScreen(new GuiEnchantment(this.inventory, this.worldObj, par1, par2, par3, par4Str));
  }

  /**
   * Displays the GUI for interacting with an anvil.
   */
  public void displayGUIAnvil(int par1, int par2, int par3) {
    this.mc.displayGuiScreen(new GuiRepair(this.inventory, this.worldObj, par1, par2, par3));
  }

  /**
   * Displays the furnace GUI for the passed in furnace entity. Args: tileEntityFurnace
   */
  public void displayGUIFurnace(TileEntityFurnace par1TileEntityFurnace) {
    this.mc.displayGuiScreen(new GuiFurnace(this.inventory, par1TileEntityFurnace));
  }

  /**
   * Displays the GUI for interacting with a brewing stand.
   */
  public void displayGUIBrewingStand(TileEntityBrewingStand par1TileEntityBrewingStand) {
    this.mc.displayGuiScreen(new GuiBrewingStand(this.inventory, par1TileEntityBrewingStand));
  }

  /**
   * Displays the GUI for interacting with a beacon.
   */
  public void displayGUIBeacon(TileEntityBeacon par1TileEntityBeacon) {
    this.mc.displayGuiScreen(new GuiBeacon(this.inventory, par1TileEntityBeacon));
  }

  /**
   * Displays the dipsenser GUI for the passed in dispenser entity. Args: TileEntityDispenser
   */
  public void displayGUIDispenser(TileEntityDispenser par1TileEntityDispenser) {
    this.mc.displayGuiScreen(new GuiDispenser(this.inventory, par1TileEntityDispenser));
  }

  public void displayGUIMerchant(IMerchant par1IMerchant, String par2Str) {
    this.mc.displayGuiScreen(new GuiMerchant(this.inventory, par1IMerchant, this.worldObj, par2Str));
  }

  /**
   * Called when the player performs a critical hit on the Entity. Args: entity that was hit critically
   */
  public void onCriticalHit(Entity par1Entity) {
    this.mc.effectRenderer.addEffect(new EntityCrit2FX(this.mc.theWorld, par1Entity));
  }

  public void onEnchantmentCritical(Entity par1Entity) {
    EntityCrit2FX var2 = new EntityCrit2FX(this.mc.theWorld, par1Entity, "magicCrit");
    this.mc.effectRenderer.addEffect(var2);
  }

  /**
   * Called whenever an item is picked up from walking over it. Args: pickedUpEntity, stackSize
   */
  public void onItemPickup(Entity par1Entity, int par2) {
    this.mc.effectRenderer.addEffect(new EntityPickupFX(this.mc.theWorld, par1Entity, this, -0.5F));
  }

  /**
   * Returns if this entity is sneaking.
   */
  public boolean isSneaking() {
    return this.movementInput.sneak && !this.sleeping;
  }

  /**
   * Updates health locally.
   */
  public void setPlayerSPHealth(float par1) {
    float var2 = this.getHealth() - par1;

    if (var2 <= 0.0F) {
      this.setHealth(par1);

      if (var2 < 0.0F) {
        this.hurtResistantTime = this.maxHurtResistantTime / 2;
      }
    } else {
      this.lastDamage = var2;
      this.setHealth(this.getHealth());
      this.hurtResistantTime = this.maxHurtResistantTime;
      this.damageEntity(DamageSource.generic, var2);
      this.hurtTime = this.maxHurtTime = 10;
    }
  }

  /**
   * Add a chat message to the player
   */
  public void addChatMessage(String par1Str) {
    this.mc.ingameGUI.getChatGUI().addTranslatedMessage(par1Str, new Object[0]);
  }

  /**
   * Adds a value to a statistic field.
   */
  public void addStat(StatBase par1StatBase, int par2) {
    if (par1StatBase != null) {
      if (par1StatBase.isAchievement()) {
        Achievement var3 = (Achievement)par1StatBase;

        if (var3.parentAchievement == null || this.mc.statFileWriter.hasAchievementUnlocked(var3.parentAchievement)) {
          if (!this.mc.statFileWriter.hasAchievementUnlocked(var3)) {
            this.mc.guiAchievement.queueTakenAchievement(var3);
          }

          this.mc.statFileWriter.readStat(par1StatBase, par2);
        }
      } else {
        this.mc.statFileWriter.readStat(par1StatBase, par2);
      }
    }
  }

  private boolean isBlockTranslucent(int par1, int par2, int par3) {
    return this.worldObj.isBlockNormalCube(par1, par2, par3);
  }

  /**
   * Adds velocity to push the entity out of blocks at the specified x, y, z position Args: x, y, z
   */
  protected boolean pushOutOfBlocks(double par1, double par3, double par5) {
    int var7 = MathHelper.floor_double(par1);
    int var8 = MathHelper.floor_double(par3);
    int var9 = MathHelper.floor_double(par5);
    double var10 = par1 - (double)var7;
    double var12 = par5 - (double)var9;

    if (this.isBlockTranslucent(var7, var8, var9) || this.isBlockTranslucent(var7, var8 + 1, var9)) {
      boolean var14 = !this.isBlockTranslucent(var7 - 1, var8, var9) && !this.isBlockTranslucent(var7 - 1, var8 + 1, var9);
      boolean var15 = !this.isBlockTranslucent(var7 + 1, var8, var9) && !this.isBlockTranslucent(var7 + 1, var8 + 1, var9);
      boolean var16 = !this.isBlockTranslucent(var7, var8, var9 - 1) && !this.isBlockTranslucent(var7, var8 + 1, var9 - 1);
      boolean var17 = !this.isBlockTranslucent(var7, var8, var9 + 1) && !this.isBlockTranslucent(var7, var8 + 1, var9 + 1);
      byte var18 = -1;
      double var19 = 9999.0D;

      if (var14 && var10 < var19) {
        var19 = var10;
        var18 = 0;
      }

      if (var15 && 1.0D - var10 < var19) {
        var19 = 1.0D - var10;
        var18 = 1;
      }

      if (var16 && var12 < var19) {
        var19 = var12;
        var18 = 4;
      }

      if (var17 && 1.0D - var12 < var19) {
        var19 = 1.0D - var12;
        var18 = 5;
      }

      float var21 = 0.1F;

      if (var18 == 0) {
        this.motionX = (double)(-var21);
      }

      if (var18 == 1) {
        this.motionX = (double)var21;
      }

      if (var18 == 4) {
        this.motionZ = (double)(-var21);
      }

      if (var18 == 5) {
        this.motionZ = (double)var21;
      }
    }

    return false;
  }

  /**
   * Set sprinting switch for Entity.
   */
  public void setSprinting(boolean par1) {
    super.setSprinting(par1);
    this.sprintingTicksLeft = par1 ? 600 : 0;
  }

  /**
   * Sets the current XP, total XP, and level number.
   */
  public void setXPStats(float par1, int par2, int par3) {
    this.experience = par1;
    this.experienceTotal = par2;
    this.experienceLevel = par3;
  }

  //ToDO: This printChatMessage() method may not need to be called, its blocked within 1.5.2
  public void sendChatToPlayer(ChatMessageComponent par1ChatMessageComponent) {
    this.mc.ingameGUI.getChatGUI().printChatMessage(par1ChatMessageComponent.toStringWithFormatting(true));
  }

  /**
   * Returns true if the command sender is allowed to use the given command.
   */
  public boolean canCommandSenderUseCommand(int par1, String par2Str) {
    return par1 <= 0;
  }

  /**
   * Return the position for this command sender.
   */
  public ChunkCoordinates getPlayerCoordinates() {
    return new ChunkCoordinates(MathHelper.floor_double(this.posX + 0.5D), MathHelper.floor_double(this.posY + 0.5D), MathHelper.floor_double(this.posZ + 0.5D));
  }

  /**
   * Returns the item that this EntityLiving is holding, if any.
   */
  public ItemStack getHeldItem() {
    return this.inventory.getCurrentItem();
  }

  public void playSound(String par1Str, float par2, float par3) {
    this.worldObj.playSound(this.posX, this.posY - (double)this.yOffset, this.posZ, par1Str, par2, par3, false);
  }
 
  /**
   * Returns whether the entity is in a local (client) world
   */
  public boolean isClientWorld() {
    return true;
  }

  public boolean isRidingHorse() {
    return this.ridingEntity != null && this.ridingEntity instanceof EntityHorse;
  }

  public float getHorseJumpPower() {
    return this.horseJumpPower;
  }

  protected void func_110318_g() {}

  // Spout
  public boolean canSprint() {
    return this.getFoodStats().getFoodLevel() > 6.0F;
  }

  @Override
  public void handleKeyPress(int key, boolean keyReleased) {
    if (keyReleased) {
      final GameSettings settings = SpoutClient.getHandle().gameSettings;

      // Fog toggle
      if (key == settings.keyBindToggleFog.keyCode) {
        byte view = (byte)settings.renderDistance;
        byte newView = (byte) SpoutClient.getInstance().getActivePlayer().getNextRenderDistance().getValue();
        fogKey = settings.keyBindToggleFog;
        settings.keyBindToggleFog = new KeyBinding("key.fog", -1);
        if (view != newView) {
          Configuration.setRenderDistance(newView);
          Configuration.write();
          if (this instanceof EntityClientPlayerMP && Spoutcraft.getClient().isSpoutEnabled()) {
            SpoutClient.getInstance().getPacketManager().sendSpoutPacket(new PacketRenderDistance((byte)newView));
          }
        }
      // Sneak toggle
      } else if (key == settings.keySneakToggle.keyCode) {
        sneakToggle = !sneakToggle;
        if (sneakToggle) {
          runToggle = false;
          setSprinting(false);
          treadWaterToggle = false;
        }
      // Run toggle
      } else if (key == settings.keyRunToggle.keyCode) {
        runToggle = !runToggle;
        setSprinting(runToggle);
        if (runToggle) {
          sneakToggle = false;
          treadWaterToggle = false;
        }
      // Water tread
      } else if (key == settings.keyTreadWaterToggle.keyCode) {
        treadWaterToggle = !treadWaterToggle;
        if (treadWaterToggle) {
          runToggle = false;
          setSprinting(false);
          sneakToggle = false;
        }
      // Auto forward
      } else if (key == settings.keyAutoForward.keyCode) {
        if (Spoutcraft.hasPermission("spout.plugin.autorun.forward")) {
          autoforwardToggle = !autoforwardToggle;
          autoBackwardToggle = false;
        }
      } else if (key == settings.keyBindForward.keyCode && autoforwardToggle) {
        autoforwardToggle = false;
        autoBackwardToggle = false;
      // Auto backward
      } else if (key == settings.keyAutoBackward.keyCode) {
        if (Spoutcraft.hasPermission("spout.plugin.autorun.backward")) {
          autoBackwardToggle = !autoBackwardToggle;
          autoforwardToggle = false;
        }
      } else if (key == settings.keyBindBack.keyCode && autoBackwardToggle) {
        autoBackwardToggle = false;
        autoforwardToggle = false;
      // Overview map
      } else if (key == settings.keyWaypoint.keyCode){
        if(Spoutcraft.hasPermission("spout.plugin.overviewmap")) {
          mc.displayGuiScreen(new GuiOverviewMap());
        }
      } else if (key == settings.keyHideChat.keyCode){
        if (Spoutcraft.getActivePlayer() != null) {
          Spoutcraft.getActivePlayer().getMainScreen().getChatTextBox().setVisible(!Spoutcraft.getActivePlayer().getMainScreen().getChatTextBox().isVisible());
        }
      }

      if (this.capabilities.allowFlying && key == settings.keyFlyToggle.keyCode) {
        this.capabilities.isFlying = !this.capabilities.isFlying;
        if (this.capabilities.isFlying) {
          posY += 0.1D;
          this.motionY += 0.15D;
        }
      }
    }
  }

  @Override
  public void onUpdate() {
    if (fogKey != null) {
      SpoutClient.getHandle().gameSettings.keyBindToggleFog = fogKey;
      fogKey = null;
    }
    super.onUpdate();
  }
  // Spout End
}
TOP

Related Classes of net.minecraft.src.EntityPlayerSP

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.