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

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

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

import java.util.Iterator;
import java.util.List;
import net.minecraft.server.v1_7_R1.EntityVillager;
import net.minecraft.server.v1_7_R1.Vec3D;
import org.bukkit.Location;
import org.bukkit.entity.LivingEntity;
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.NotAVillagerException;
import de.kumpelblase2.remoteentities.nms.RandomPositionGenerator;
import de.kumpelblase2.remoteentities.persistence.ParameterData;
import de.kumpelblase2.remoteentities.persistence.SerializeAs;
import de.kumpelblase2.remoteentities.utilities.ReflectionUtil;

/**
* Using this desire the villager baby will play around with another baby villager.
*/
public class DesirePlay extends DesireBase
{
  protected EntityVillager m_villager;
  protected EntityVillager m_friend;
  protected int m_playTick;
  @SerializeAs(pos = 1)
  protected double m_speed;

  @Deprecated
  public DesirePlay(RemoteEntity inEntity)
  {
    super(inEntity);
    if(!(this.getEntityHandle() instanceof EntityVillager))
      throw new NotAVillagerException();

    this.m_villager = (EntityVillager)this.getEntityHandle();
    this.m_type = DesireType.PRIMAL_INSTINCT;
  }

  public DesirePlay()
  {
    this(-1);
  }

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

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

    this.m_villager = (EntityVillager)this.getEntityHandle();
  }

  @SuppressWarnings("rawtypes")
  @Override
  public boolean shouldExecute()
  {
    if(this.getEntityHandle() == null)
      return false;

    if(this.m_villager.getAge() >= 0)
      return false;
    else if(this.m_villager.aI().nextInt(400) != 0)
      return false;
    else
    {
      List villagers = this.m_villager.world.a(EntityVillager.class, this.m_villager.boundingBox.grow(6, 3, 6));
      double minDist = Double.MAX_VALUE;
      Iterator it = villagers.iterator();

      while(it.hasNext())
      {
        EntityVillager villager = (EntityVillager)it.next();
        if(villager != this.m_villager && !villager.bZ() && villager.getAge() < 0)
        {
          double dist = villager.e(this.m_villager);

          if(dist <= minDist)
          {
            minDist = dist;
            this.m_friend = villager;
          }
        }
      }

      if(this.m_friend == null)
      {
        Vec3D vec = RandomPositionGenerator.a(this.m_villager, 16, 3);

        if(vec == null)
          return false;

        Vec3D.a.release(vec);
      }

      return true;
    }
  }

  @Override
  public boolean canContinue()
  {
    return this.m_playTick > 0;
  }

  @Override
  public void startExecuting()
  {
    if(this.m_friend != null)
      this.m_villager.j(true);

    this.m_playTick = 1000;
  }

  @Override
  public void stopExecuting()
  {
    this.m_villager.j(false);
    this.m_friend = null;
  }

  @Override
  public boolean update()
  {
    this.m_playTick--;
    if(this.m_friend != null)
    {
      if(this.m_villager.e(this.m_friend) > 4)
        this.getRemoteEntity().move((LivingEntity)this.m_friend.getBukkitEntity(), (this.m_speed == -1 ? this.getRemoteEntity().getSpeed() : this.m_speed));
    }
    else if(this.getNavigation().g())
    {
      Vec3D vec = RandomPositionGenerator.a(this.m_villager, 16, 3);

      if(vec == null)
        return true;

      this.getRemoteEntity().move(new Location(this.getRemoteEntity().getBukkitEntity().getWorld(), vec.c, vec.d, vec.e), (this.m_speed == -1 ? this.getRemoteEntity().getSpeed() : this.m_speed));
      Vec3D.a.release(vec);
    }
    return true;
  }

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

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

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.