Package de.kumpelblase2.remoteentities.api.thinking.goals

Source Code of de.kumpelblase2.remoteentities.api.thinking.goals.DesireSwell

package de.kumpelblase2.remoteentities.api.thinking.goals;

import net.minecraft.server.v1_7_R1.EntityCreeper;
import net.minecraft.server.v1_7_R1.EntityLiving;
import de.kumpelblase2.remoteentities.api.RemoteEntity;
import de.kumpelblase2.remoteentities.api.thinking.DesireBase;
import de.kumpelblase2.remoteentities.api.thinking.DesireType;
import de.kumpelblase2.remoteentities.exceptions.NotACreeperException;
import de.kumpelblase2.remoteentities.persistence.ParameterData;
import de.kumpelblase2.remoteentities.persistence.SerializeAs;
import de.kumpelblase2.remoteentities.utilities.ReflectionUtil;

/**
* Using this desire the creeper will start to explode when it's near its target.
*/
public class DesireSwell extends DesireBase
{
  protected EntityCreeper m_creeper;
  protected EntityLiving m_target;
  @SerializeAs(pos = 1)
  protected int m_minDistance;
  protected int m_minDistanceSqr;
  @SerializeAs(pos = 2)
  protected int m_maxDistance;
  protected int m_maxDistanceSqr;

  @Deprecated
  public DesireSwell(RemoteEntity inEntity)
  {
    this(inEntity, 3, 7);
  }

  @Deprecated
  public DesireSwell(RemoteEntity inEntity, int inMinDistance, int inMaxDistance)
  {
    super(inEntity);
    if(!(this.getEntityHandle() instanceof EntityCreeper))
      throw new NotACreeperException();

    this.m_creeper = (EntityCreeper)this.getEntityHandle();
    this.m_type = DesireType.PRIMAL_INSTINCT;
    this.m_minDistance = inMinDistance;
    this.m_minDistanceSqr = inMinDistance * inMinDistance;
    this.m_maxDistance = inMaxDistance;
    this.m_maxDistanceSqr = inMaxDistance * inMaxDistance;
  }

  public DesireSwell()
  {
    this(3, 7);
  }

  public DesireSwell(int inMinDistance, int inMaxDistance)
  {
    super();
    this.m_type = DesireType.PRIMAL_INSTINCT;
    this.m_minDistance = inMinDistance;
    this.m_minDistanceSqr = inMinDistance * inMinDistance;
    this.m_maxDistance = inMaxDistance;
    this.m_maxDistanceSqr = inMaxDistance * inMaxDistance;
  }

  @Override
  public void onAdd(RemoteEntity inEntity)
  {
    super.onAdd(inEntity);
    if(!(this.getEntityHandle() instanceof EntityCreeper))
      throw new NotACreeperException();

    this.m_creeper = (EntityCreeper)this.getEntityHandle();
  }

  @Override
  public boolean shouldExecute()
  {
    if(this.m_creeper == null)
      return false;

    EntityLiving target = this.m_creeper.getGoalTarget();
    return this.m_creeper.q() > 0 || target != null && this.m_creeper.e(target) < this.m_minDistanceSqr;
  }

  @Override
  public void startExecuting()
  {
    this.m_creeper.getNavigation().g();
    this.m_target = this.m_creeper.getGoalTarget();
  }

  @Override
  public void stopExecuting()
  {
    this.m_target = null;
  }

  @Override
  public boolean update()
  {
    if(this.m_target == null)
      this.m_creeper.a(-1);
    else if(this.m_creeper.e(this.m_target) > this.m_maxDistanceSqr)
      this.m_creeper.a(-1);
    else if(!this.m_creeper.getEntitySenses().canSee(this.m_target))
      this.m_creeper.a(-1);
    else
      this.m_creeper.a(1);
    return true;
  }

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

Related Classes of de.kumpelblase2.remoteentities.api.thinking.goals.DesireSwell

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.