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

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

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

import net.minecraft.server.v1_7_R1.*;
import org.bukkit.entity.Player;
import de.kumpelblase2.remoteentities.api.RemoteEntity;
import de.kumpelblase2.remoteentities.api.features.RidingFeature;
import de.kumpelblase2.remoteentities.api.features.TamedRidingFeature;
import de.kumpelblase2.remoteentities.api.thinking.DesireBase;
import de.kumpelblase2.remoteentities.api.thinking.DesireType;
import de.kumpelblase2.remoteentities.exceptions.NotRideableException;
import de.kumpelblase2.remoteentities.persistence.ParameterData;
import de.kumpelblase2.remoteentities.persistence.SerializeAs;
import de.kumpelblase2.remoteentities.utilities.ReflectionUtil;

public class DesireTameByRiding extends DesireBase
{
  protected double m_x;
  protected double m_y;
  protected double m_z;
  @SerializeAs(pos = 1)
  protected double m_speed;

  @Deprecated
  public DesireTameByRiding(RemoteEntity inEntity)
  {
    this(inEntity, 1.2d);
  }

  @Deprecated
  public DesireTameByRiding(RemoteEntity inEntity, double inSpeed)
  {
    super(inEntity);
    if(!(inEntity.getHandle() instanceof EntityHorse) && !inEntity.getFeatures().hasFeature(RidingFeature.class))
      throw new NotRideableException();

    this.m_speed = inSpeed;
    this.m_type = DesireType.PRIMAL_INSTINCT;
  }

  public DesireTameByRiding()
  {
    this(1.2d);
  }

  public DesireTameByRiding(double inSpeed)
  {
    super();
    this.m_speed = inSpeed;
    this.m_type = DesireType.PRIMAL_INSTINCT;
  }

  @Override
  public boolean shouldExecute()
  {
    if(!(this.getEntityHandle() instanceof EntityHorse) && !this.m_entity.getFeatures().hasFeature(RidingFeature.class))
      throw new NotRideableException();

    if(!this.canBeRidden() && this.getEntityHandle().passenger != null)
    {
      Vec3D vec = de.kumpelblase2.remoteentities.nms.RandomPositionGenerator.a(this.getEntityHandle(), 5, 4);

      if(vec == null)
        return false;
      else
      {
        this.m_x = vec.c;
        this.m_y = vec.d;
        this.m_z = vec.e;
        return true;
      }
    }

    return false;
  }

  @Override
  public void startExecuting()
  {
    this.getNavigation().a(this.m_x, this.m_y, this.m_z, this.m_speed);
  }

  @Override
  public boolean canContinue()
  {
    return !this.getNavigation().g() && this.getEntityHandle().passenger != null;
  }

  @Override
  public boolean update()
  {
    EntityLiving entity = this.getEntityHandle();
    if(entity.aI().nextInt(50) == 0)
    {
      if(entity.passenger instanceof EntityHuman)
      {
        int i = this.getTemper();
        int j = 100; //horse.getMaxDomestication()

        if(j > 0 && entity.aI().nextInt(j) < i)
        {
          this.setRideable();
          entity.world.broadcastEntityEffect(entity, (byte)7);
          return false;
        }

        this.increseRideableChance(5);
      }

      entity.passenger.mount(null);
      entity.passenger = null;
      if(entity instanceof EntityHorse)
        ((EntityHorse)entity).cz();

      entity.world.broadcastEntityEffect(entity, (byte)6);
    }

    return true;
  }

  protected void setRideable()
  {
    if(this.getEntityHandle() instanceof EntityHorse)
      ((EntityHorse)this.getEntityHandle()).g((EntityHuman)((EntityHorse)this.getEntityHandle()).passenger);
    else
    {
      RidingFeature ridingFeature = this.getRemoteEntity().getFeatures().getFeature(RidingFeature.class);
      ridingFeature.setRideable(true);
      if(ridingFeature instanceof TamedRidingFeature)
        ((TamedRidingFeature)ridingFeature).tame((Player)this.getEntityHandle().passenger.getBukkitEntity());
    }
  }

  protected boolean canBeRidden()
  {
    if(this.getEntityHandle() instanceof EntityHorse)
      return ((EntityHorse)this.getEntityHandle()).bS();
    else
      return this.getRemoteEntity().getFeatures().getFeature(RidingFeature.class).isPreparedToRide();
  }

  protected void increseRideableChance(int inIncrease)
  {
    if(this.getEntityHandle() instanceof EntityHorse)
      ((EntityHorse)this.getEntityHandle()).v(inIncrease);
    else
      this.getRemoteEntity().getFeatures().getFeature(RidingFeature.class).increaseTemper(inIncrease);
  }

  protected int getTemper()
  {
    if(this.getEntityHandle() instanceof EntityHorse)
      return ((EntityHorse)this.getEntityHandle()).getTemper();
    else
      return this.getRemoteEntity().getFeatures().getFeature(RidingFeature.class).getTemper();
  }

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

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

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.