Package com.sijobe.spc.wrapper

Source Code of com.sijobe.spc.wrapper.Player

package com.sijobe.spc.wrapper;

import net.minecraft.src.EntityClientPlayerMP;
import net.minecraft.src.EntityPlayer;
import net.minecraft.src.EntityPlayerMP;
import net.minecraft.src.EnumGameType;
import net.minecraft.src.ItemStack;
import net.minecraft.src.MovingObjectPosition;
import net.minecraft.src.PotionEffect;
import net.minecraft.src.Vec3;

/**
* Provides a wrapper around the Minecraft player classes.
*
* @author simo_415
* @version 1.0
*/
public class Player {

   /**
    * The object that the instance is wrapped around
    */
   private final EntityPlayer player;

   public Player(EntityPlayer player) {
      this.player = player;
   }

   /**
    * Sets the player position and if on server sends the update to the client
    *
    * @param c - The coordinate that the player is being moved to
    */
   public void setPosition(Coordinate c) {
      if (player instanceof EntityPlayerMP) {
         ((EntityPlayerMP) player).setPositionAndUpdate(c.getX(), c.getY(), c.getZ());
      } else {
         player.setPosition(c.getX(), c.getY(), c.getZ());
      }
   }

   /**
    * Gets the current position that the player is currently standing
    *
    * @return The position that the player is standing
    */
   public Coordinate getPosition() {
      return new Coordinate(player.posX, player.posY, player.posZ);
   }

   /**
    * Gets the player rotation yaw
    *
    * @return Rotation Yaw
    */
   public float getYaw() {
      return player.rotationYaw;
   }

   /**
    * Sets the rotation yaw of the player
    *
    * @param yaw - The yaw value to set to the player
    */
   public void setYaw(float yaw) {
      player.rotationYaw = yaw;
   }

   /**
    * Gets the player rotation pitch
    *
    * @return Rotation pitch
    */
   public float getPitch() {
      return player.rotationPitch;
   }

   /**
    * Sets the rotation pitch of the player
    *
    * @param pitch - The pitch value to set to the player
    */
   public void setPitch(float pitch) {
      player.rotationPitch = pitch;
   }

   /**
    * Gets the world that the player is currently in
    *
    * @return The world that the player is currently in
    */
   public World getWorld() {
      if (player instanceof EntityPlayerMP) {
         return new World(((EntityPlayerMP) player).theItemInWorldManager.theWorld); // why?
      } else {
         return new World(player.worldObj);
      }
   }

   /**
    * Sends a chat message to the user
    *
    * @param message - The message to send to the user
    */
   public void sendChatMessage(String message) {
      player.addChatMessage(message);
   }

   /**
    * Gives the player a maximum stack of the specified item
    *
    * @param id - The item id
    */
   public void givePlayerItem(int id) {
      givePlayerItem(id, Item.getMaxStack(id));
   }

   /**
    * Gives the player a maximum stack of the specified item
    *
    * @param id - The item id
    * @param quantity - The quantity of the item
    */
   public void givePlayerItem(int id, int quantity) {
      givePlayerItem(id, quantity, 0);
   }

   /**
    * Gives the player a maximum stack of the specified item
    *
    * @param id - The item id
    * @param quantity - The quantity of the item
    * @param damage - The "damage" (metadata) value of the item
    */
   public void givePlayerItem(int id, int quantity, int damage) {
      ItemStack itemStack = new ItemStack(id, quantity, damage);
      if (!player.inventory.addItemStackToInventory(itemStack)) {
         player.dropPlayerItem(itemStack);
      }
   }

   /**
    * Gets the players current health
    *
    * @return The value of the players health
    */
   public float getHealth() {
      return player.func_110143_aJ();
   }

   /**
    * Sets the players health to the specified value
    *
    * @param health - The health amount
    */
   public void setHealth(float health) {
      player.setEntityHealth(health);
   }

   /**
    * Heals the player the specified quantity. Use a negative number to remove
    * the specified amount from the player.
    *
    * @param quantity - The ammount to heal the player
    */
   public void heal(float quantity) {
      setHealth(getHealth() + quantity);
   }

   /**
    * Gets the players current hunger level
    *
    * @return The hunger level
    */
   public int getHunger() {
      return player.getFoodStats().getFoodLevel();
   }

   /**
    * Sets the players hunger level
    *
    * @param food - The hunger level to set to
    */
   public void setHunger(int food) {
      player.getFoodStats().setFoodLevel(food);
   }

   /**
    * Gets the boolean value representing whether player damage is on or off.
    *
    * @return True when damage is on, false when damage is off
    */
   public boolean getDamage() {
      return !player.capabilities.disableDamage;
   }

   /**
    * Sets whether player damage is on or off
    *
    * @param damage - when true it turns player damage on, false turns it off
    */
   public void setDamage(boolean damage) {
      player.capabilities.disableDamage = !damage;
   }

   /**
    * Sets the item contained within the specified inventory slot
    *
    * @param slot - The slot to set
    * @param id - The item id
    * @param quantity - The item quantity
    * @param damage - The item "damage" value
    * @return True if the slot was correctly set, false otherwise
    */
   public boolean setInventorySlot(int slot, int id, int quantity, int damage) {
      if (slot < 0 || slot >= player.inventory.mainInventory.length) {
         return false;
      } else if (!Item.isValidItem(id)) {
         if (id == 0) {
            player.inventory.mainInventory[slot] = null;
            return true;
         }
         return false;
      }
      player.inventory.mainInventory[slot] = new ItemStack(id, quantity, damage);
      return true;
   }

   /**
    * Performs a trace on the players view to the specified maximum distance.
    * The trace returns the coordinate where it hits a block or null if nothing
    * was found.
    *
    * @param distance - The maximum distance to check
    * @return A coordinate object containing the block that was inline with
    *         the players view
    */
   public Coordinate trace(double distance) {
      MovingObjectPosition m = rayTrace(distance, 1.0F);
      if (m == null) {
         return null;
      }
      return new Coordinate(m.blockX, m.blockY, m.blockZ);
   }

   public MovingObjectPosition rayTrace(double distance, float partialTickTime) {
      Vec3 positionVec = getPositionVec(partialTickTime);
      Vec3 lookVec = player.getLook(partialTickTime);
      Vec3 hitVec = positionVec.addVector(lookVec.xCoord * distance, lookVec.yCoord * distance, lookVec.zCoord * distance);
      return player.worldObj.rayTraceBlocks_do_do(positionVec, hitVec, false, true); // TODO: Validate correct params
   }

   /**
    * interpolated position vector
    */
   public Vec3 getPositionVec(float partialTickTime) {
      double offsetY = player.posY + player.getEyeHeight();
      if (partialTickTime == 1.0F) {
         return getWorld().getMinecraftWorld().getWorldVec3Pool().getVecFromPool(player.posX, offsetY, player.posZ);
      } else {
         double var2 = player.prevPosX + (player.posX - player.prevPosX) * partialTickTime;
         double var4 = player.prevPosY + (offsetY - (player.prevPosY + player.getEyeHeight())) * partialTickTime;
         double var6 = player.prevPosZ + (player.posZ - player.prevPosZ) * partialTickTime;
         return getWorld().getMinecraftWorld().getWorldVec3Pool().getVecFromPool(var2, var4, var6);
      }
   }

   /*public String getGameType() { // TODO
   }*/

   /**
    * Sets the gametype that the player uses
    *
    * @param gametype - The player game type
    * @return True if the specified gametype was found
    */
   public boolean setGameType(String gametype) {
      EnumGameType chosen = null;
      if ((chosen = EnumGameType.getByName(gametype)) == null) {
         return false;
      }
      player.setGameType(chosen);
      return true;
   }

   /**
    * Gets the players name
    *
    * @return The players name
    */
   public String getPlayerName() {
      return player.getEntityName();
   }

   /**
    * Gets the item ID of the current held item
    *
    * @return The ID of the currently held item
    */
   public int getCurrentItem() {
      try {
         return player.inventory.mainInventory[getCurrentSlot()].itemID;
      } catch (NullPointerException e) {
         return 0;
      }
   }

   /**
    * Gets the slot number of the current item
    *
    * @return A value 0-8 based on the slot currently selected
    */
   public int getCurrentSlot() {
      return player.inventory.currentItem;
   }

   /**
    * Sets the URL that the skin is retrieved from
    *
    * @param URL - The URL the skin is taken from
    */
   public void setSkin(String URL) {
      //TODO: Set username? AbstractClientPlayer - player.skinUrl = URL;
   }

   /**
    * Sets the player's current motion
    *
    * @param motion - The motion to set to the player
    */
   public void setMotion(Coordinate motion) {
      player.motionX = motion.getX();
      player.motionY = motion.getY();
      player.motionZ = motion.getZ();
   }

   /**
    * Gets the player's current motion
    *
    * @return The motion of the player
    */
   public Coordinate getMotion() {
      return new Coordinate(player.motionX, player.motionY, player.motionZ);
   }

   /**
    * Checks if the specified position is able to contain a player. This
    * involves two squares at the player's height that are empty and one block
    * beneath the player's feet.
    *
    * @param player - The player object
    * @param x - The X coordinate
    * @param y - The Y coordinate
    * @param z - The Z coordinate
    * @return True if the player can stand in the specified location
    */
   public boolean isClear(Coordinate location) {
      return getWorld().getBlockId(location.getBlockX(), location.getBlockY(), location.getBlockZ()) == 0
      && getWorld().getBlockId(location.getBlockX(), location.getBlockY() + 1, location.getBlockZ()) == 0
      && !(getWorld().getBlockId(location.getBlockX(), location.getBlockY() - 1, location.getBlockZ()) == 0);
   }

   /**
    * Checks if the specified position is able to contain a player. This
    * involves two squares at the player's height that are empty and one block
    * below the player being empty.
    *
    * @param player - The player object
    * @param x - The X coordinate
    * @param y - The Y coordinate
    * @param z - The Z coordinate
    * @return True if the player can fall in the specified location
    */
   public boolean isClearBelow(Coordinate location) {
      return getWorld().getBlockId(location.getBlockX(), location.getBlockY(), location.getBlockZ()) == 0
      && getWorld().getBlockId(location.getBlockX(), location.getBlockY() + 1, location.getBlockZ()) == 0
      && getWorld().getBlockId(location.getBlockX(), location.getBlockY() - 1, location.getBlockZ()) == 0;
   }
  
   /**
    * Gets the movement forward. This is a value between -1 and 1. -1 is when
    * the player is moving backward, 1 is that player moving forward. The value
    * of the float is the percentage of speed the player is moving.
    *
    * @return The movement forward percentage
    */
   public float getMovementForward() {
      if (player instanceof EntityPlayerMP) {
         return ((EntityPlayerMP) player).getMoveForwardField();
      } else if (player instanceof EntityClientPlayerMP) {
         return ((EntityClientPlayerMP) player).getMovementForward();
      } else {
         return 0F;
      }
   }

   /**
    * Gets the movement strafe. This is a value between -1 and 1. -1 is when
    * the player is moving right, 1 is that player moving left. The value
    * of the float is the percentage of speed the player is moving.
    *
    * @return The movement strafe percentage
    */
   public float getMovementStrafe() {
      if (player instanceof EntityPlayerMP) {
         return ((EntityPlayerMP) player).getMoveStrafingField();
      } else if (player instanceof EntityClientPlayerMP) {
         return ((EntityClientPlayerMP) player).getMovementStrafe();
      } else {
         return 0F;
      }
   }

   /**
    * Sets the player's step height.
    *
    * @param height - The height of the player's step
    */
   public void setStepHeight(float height) {
      player.stepHeight = height;
   }

   /**
    * Gets the step height of the player
    *
    * @return Height (in blocks) of the player step height
    */
   public float getStepHeight() {
      return player.stepHeight;
   }

   /**
    * Gets the internal Minecraft player object
    *
    * @return The Minecraft player object
    */
   public EntityPlayer getMinecraftPlayer() {
      return player;
   }

   /**
    * Removes the specified potion from the player
    *
    * @param potion - The potion ID to remove
    */
   public void removePotionEffect(int potion) {
      player.removePotionEffect(potion);
   }

   /**
    * Removes all potion effects
    */
   public void removeAllPotionEffects() {
      player.clearActivePotions();
   }

   /**
    * Adds a potion effect to the player
    *
    * @param id - The ID of the potion
    * @param duration - The duration the potion should run for
    * @param strength - The strength of effect to add
    */
   public void addPotionEffect(int id, int duration, int strength) {
      player.addPotionEffect(new PotionEffect(id, duration, strength));
   }

   /**
    * Changes the dimension that the player is in
    *
    * @param dimension - The dimension to move the player to
    */
   public void changeDimension(int dimension) {
      player.travelToDimension(dimension);
   }

   /**
    * Sets the quantity of air that the player has
    *
    * @param air - The quantity of air that the player has
    */
   public void setAir(int air) {
      player.setAir(air);
   }

   /**
    * Gives the specified achievement to the player. Note that this will only
    * work in client mode, server cannot give achievements to the player.
    *
    * @param name - The name of the achievement
    * @return If the achievement was able to be added to the player
    */
   public boolean addAchievement(String name) {
      if (player instanceof EntityClientPlayerMP) {
         if (Stats.doesAchievementExist(name)) {
            player.triggerAchievement(Stats.getAchievementByName(name));
            return true;
         }
      }
      return false;
   }

   /**
    * Returns true if flying is permitted for the user, false otherwise
    *
    * @return True if flying is permitted
    */
   public boolean getAllowFlying() {
      return player.capabilities.allowFlying;
   }

   /**
    * Allows and disables Minecraft flying mode
    *
    * @param allow - True to allow flying, false to disable it
    */
   public void setAllowFlying(boolean allow) {
      player.capabilities.allowFlying = allow;
      player.capabilities.isFlying = allow;
      player.sendPlayerAbilities();
   }

   /**
    * Returns true if the player is currently in creative mode, false if in
    * survival or adventure mode.
    *
    * @return True is in creative mode, false otherwise.
    */
   public boolean isCreativeMode() {
      return player.capabilities.isCreativeMode;
   }
  
   /**
    * Gets the players username
    *
    * @return The players username
    */
   public String getUsername() {
      if (player instanceof EntityClientPlayerMP) {
         return ((EntityClientPlayerMP) player).getUsername();
      } else if (player instanceof EntityPlayerMP) {
         ((EntityPlayerMP) player).getUsername();
      }
      return "";
   }
}
TOP

Related Classes of com.sijobe.spc.wrapper.Player

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.