Package de.kumpelblase2.remoteentities.api.thinking

Source Code of de.kumpelblase2.remoteentities.api.thinking.RideBehavior

package de.kumpelblase2.remoteentities.api.thinking;

import net.minecraft.server.v1_7_R1.EntityLiving;
import de.kumpelblase2.remoteentities.api.RemoteEntity;
import de.kumpelblase2.remoteentities.persistence.ParameterData;
import de.kumpelblase2.remoteentities.persistence.SerializeAs;
import de.kumpelblase2.remoteentities.utilities.ReflectionUtil;

public abstract class RideBehavior extends BaseBehavior
{
  @SerializeAs(pos = 1)
  private boolean m_jumpEnabled;
  @SerializeAs(pos = 2)
  private boolean m_canFly;

  public RideBehavior(RemoteEntity inEntity)
  {
    this(inEntity, true);
  }

  public RideBehavior(RemoteEntity inEntity, boolean inJumpEnabled)
  {
    this(inEntity, inJumpEnabled, false);
  }

  public RideBehavior(RemoteEntity inEntity, boolean inJumpEnabled, boolean inCanFly)
  {
    super(inEntity);
    this.m_name = "Ride";
    this.m_jumpEnabled = inJumpEnabled;
    this.m_canFly = inCanFly;
  }

  /**
   *
   *
   * @param inMotion
   */
  public void ride(float[] inMotion)
  {
    EntityLiving entity = this.m_entity.getHandle();
    if(entity.passenger == null)
      return;

    this.m_entity.setYaw(entity.passenger.yaw);
    this.m_entity.setPitch(entity.passenger.pitch);
    entity.X = 0.5f;
    if(inMotion[0] == 0)
      inMotion[0] = ((EntityLiving)entity.passenger).be * 0.5f;

    if(inMotion[1] == 0)
      inMotion[1] = ((EntityLiving)entity.passenger).bf;

    if(this.m_canFly)
    {
      if(entity.passenger instanceof EntityLiving)
      {
        if(ReflectionUtil.isJumping((EntityLiving)entity.passenger))
          inMotion[2] = 0.5f;
        else if(((EntityLiving)entity.passenger).pitch >= 40)
          inMotion[2] = -0.15f;
      }
    }
    else if(this.m_jumpEnabled && ReflectionUtil.isJumping((EntityLiving)entity.passenger))
    {
      if(entity.onGround)
        inMotion[2] = 0.5f;
    }

    this.onRide(inMotion);
  }

  /**
   *
   *
   * @param inMotion
   */
  protected abstract void onRide(float[] inMotion);

  public boolean isJumpEnabled()
  {
    return this.m_jumpEnabled;
  }

  public void setJumpEnabled(boolean inEnabled)
  {
    this.m_jumpEnabled = inEnabled;
  }

  public boolean canFly()
  {
    return this.m_canFly;
  }

  public void setCanFly(boolean inFly)
  {
    this.m_canFly = inFly;
  }

  @Override
  public ParameterData[] getSerializableData()
  {
    return ReflectionUtil.getParameterDataForClass(this).toArray(new ParameterData[0]);
  }
}
TOP

Related Classes of de.kumpelblase2.remoteentities.api.thinking.RideBehavior

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.