package openblocks.common.entity.ai;
import com.mojang.authlib.GameProfile;
import java.util.List;
import net.minecraft.entity.ai.EntityAIBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.pathfinding.PathNavigate;
import net.minecraft.world.World;
import openblocks.common.entity.EntityMiniMe;
import openmods.utils.WorldUtils;
public class EntityAIPickupPlayer extends EntityAIBase {
private EntityMiniMe minime;
private PathNavigate pathFinder;
private EntityPlayer targetPlayer;
public EntityAIPickupPlayer(EntityMiniMe entity) {
this.minime = entity;
this.pathFinder = entity.getNavigator();
setMutexBits(3);
}
@Override
public boolean shouldExecute() {
if (minime.getPickupCooldown() > 0) return false;
if (!pathFinder.noPath()) return false;
if (!minime.worldObj.isRemote) {
List<EntityPlayer> players = WorldUtils.getEntitiesWithinAABB(minime.worldObj, EntityPlayer.class, minime.boundingBox.expand(10, 10, 10));
for (EntityPlayer player : players) {
if (canRidePlayer(player)) {
targetPlayer = player;
return true;
}
}
}
return false;
}
@Override
public void resetTask() {
pathFinder.clearPathEntity();
targetPlayer = null;
}
@Override
public boolean continueExecuting() {
return minime.isEntityAlive() &&
!pathFinder.noPath() &&
canRidePlayer(targetPlayer);
}
@Override
public void startExecuting() {
if (targetPlayer != null) {
pathFinder.tryMoveToXYZ(targetPlayer.posX, targetPlayer.posY, targetPlayer.posZ, 1f);
}
}
@Override
public void updateTask() {
super.updateTask();
World world = minime.worldObj;
if (!world.isRemote && canRidePlayer(targetPlayer)) {
if (minime.getDistanceToEntity(targetPlayer) < 1.0) {
targetPlayer.mountEntity(minime);
}
}
}
private boolean canRidePlayer(EntityPlayer player) {
final GameProfile owner = minime.getOwner();
return owner != null && player != null &&
player.getGameProfile().getId().equals(owner.getId()) &&
player.ridingEntity == null;
}
}