package net.minecraft.server; import com.google.common.collect.ImmutableMap; import java.util.Optional; import javax.annotation.Nullable; public class BehavorMove extends Behavior<EntityInsentient> { @Nullable private PathEntity a; @Nullable private BlockPosition b; private float c; private int d; public BehavorMove(int i) { super(ImmutableMap.of(MemoryModuleType.PATH, MemoryStatus.VALUE_ABSENT, MemoryModuleType.WALK_TARGET, MemoryStatus.VALUE_PRESENT), i); } protected boolean a(WorldServer worldserver, EntityInsentient entityinsentient) { BehaviorController<?> behaviorcontroller = entityinsentient.getBehaviorController(); MemoryTarget memorytarget = (MemoryTarget) behaviorcontroller.getMemory(MemoryModuleType.WALK_TARGET).get(); if (!this.a(entityinsentient, memorytarget) && this.a(entityinsentient, memorytarget, worldserver.getTime())) { this.b = memorytarget.a().a(); return true; } else { behaviorcontroller.removeMemory(MemoryModuleType.WALK_TARGET); return false; } } protected boolean g(WorldServer worldserver, EntityInsentient entityinsentient, long i) { if (this.a != null && this.b != null) { Optional<MemoryTarget> optional = entityinsentient.getBehaviorController().getMemory(MemoryModuleType.WALK_TARGET); NavigationAbstract navigationabstract = entityinsentient.getNavigation(); return !navigationabstract.m() && optional.isPresent() && !this.a(entityinsentient, (MemoryTarget) optional.get()); } else { return false; } } protected void f(WorldServer worldserver, EntityInsentient entityinsentient, long i) { entityinsentient.getNavigation().o(); entityinsentient.getBehaviorController().removeMemory(MemoryModuleType.WALK_TARGET); entityinsentient.getBehaviorController().removeMemory(MemoryModuleType.PATH); this.a = null; } protected void a(WorldServer worldserver, EntityInsentient entityinsentient, long i) { entityinsentient.getBehaviorController().setMemory(MemoryModuleType.PATH, (Object) this.a); entityinsentient.getNavigation().a(this.a, (double) this.c); this.d = worldserver.getRandom().nextInt(10); } protected void d(WorldServer worldserver, EntityInsentient entityinsentient, long i) { --this.d; if (this.d <= 0) { PathEntity pathentity = entityinsentient.getNavigation().k(); BehaviorController<?> behaviorcontroller = entityinsentient.getBehaviorController(); if (this.a != pathentity) { this.a = pathentity; behaviorcontroller.setMemory(MemoryModuleType.PATH, (Object) pathentity); } if (pathentity != null && this.b != null) { MemoryTarget memorytarget = (MemoryTarget) behaviorcontroller.getMemory(MemoryModuleType.WALK_TARGET).get(); if (memorytarget.a().a().m(this.b) > 4.0D && this.a(entityinsentient, memorytarget, worldserver.getTime())) { this.b = memorytarget.a().a(); this.a(worldserver, entityinsentient, i); } } } } private boolean a(EntityInsentient entityinsentient, MemoryTarget memorytarget, long i) { BlockPosition blockposition = memorytarget.a().a(); this.a = entityinsentient.getNavigation().a(blockposition, 0); this.c = memorytarget.b(); if (!this.a(entityinsentient, memorytarget)) { BehaviorController<?> behaviorcontroller = entityinsentient.getBehaviorController(); boolean flag = this.a != null && this.a.h(); if (flag) { behaviorcontroller.setMemory(MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE, Optional.empty()); } else if (!behaviorcontroller.hasMemory(MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE)) { behaviorcontroller.setMemory(MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE, (Object) i); } if (this.a != null) { return true; } Vec3D vec3d = RandomPositionGenerator.a((EntityCreature) entityinsentient, 10, 7, new Vec3D(blockposition)); if (vec3d != null) { this.a = entityinsentient.getNavigation().a(vec3d.x, vec3d.y, vec3d.z, 0); return this.a != null; } } return false; } private boolean a(EntityInsentient entityinsentient, MemoryTarget memorytarget) { return memorytarget.a().a().n(new BlockPosition(entityinsentient)) <= memorytarget.c(); } }