package net.minecraft.world.entity.ai.goal; import net.minecraft.core.BlockPos; import net.minecraft.tags.FluidTags; import net.minecraft.util.Mth; import net.minecraft.world.entity.PathfinderMob; public class TryFindWaterGoal extends Goal { private final PathfinderMob mob; public TryFindWaterGoal(final PathfinderMob mob) { this.mob = mob; } @Override public boolean canUse() { return this.mob.onGround() && !this.mob.level().getFluidState(this.mob.blockPosition()).is(FluidTags.WATER); } @Override public void start() { BlockPos waterPos = null; for (BlockPos pos : BlockPos.betweenClosed( Mth.floor(this.mob.getX() - 2.0), Mth.floor(this.mob.getY() - 2.0), Mth.floor(this.mob.getZ() - 2.0), Mth.floor(this.mob.getX() + 2.0), this.mob.getBlockY(), Mth.floor(this.mob.getZ() + 2.0) )) { if (this.mob.level().getFluidState(pos).is(FluidTags.WATER)) { waterPos = pos; break; } } if (waterPos != null) { this.mob.getMoveControl().setWantedPosition(waterPos.getX(), waterPos.getY(), waterPos.getZ(), 1.0); } } }