Code/net/minecraft/world/entity/ai/behavior/InsideBrownianWalk.java

41 lines
2.0 KiB
Java

package net.minecraft.world.entity.ai.behavior;
import java.util.Collections;
import java.util.List;
import net.minecraft.Util;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.PathfinderMob;
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder;
import net.minecraft.world.entity.ai.behavior.declarative.MemoryAccessor;
import net.minecraft.world.entity.ai.memory.MemoryModuleType;
import net.minecraft.world.entity.ai.memory.WalkTarget;
public class InsideBrownianWalk {
public static BehaviorControl<PathfinderMob> create(float p_259775_) {
return BehaviorBuilder.create(
p_258399_ -> p_258399_.group(p_258399_.absent(MemoryModuleType.WALK_TARGET))
.apply(
p_258399_,
p_258397_ -> (p_258393_, p_258394_, p_258395_) -> {
if (p_258393_.canSeeSky(p_258394_.blockPosition())) {
return false;
} else {
BlockPos blockpos = p_258394_.blockPosition();
List<BlockPos> list = BlockPos.betweenClosedStream(blockpos.offset(-1, -1, -1), blockpos.offset(1, 1, 1))
.map(BlockPos::immutable)
.collect(Util.toMutableList());
Collections.shuffle(list);
list.stream()
.filter(p_309042_ -> !p_258393_.canSeeSky(p_309042_))
.filter(p_23237_ -> p_258393_.loadedAndEntityCanStandOn(p_23237_, p_258394_))
.filter(p_23227_ -> p_258393_.noCollision(p_258394_))
.findFirst()
.ifPresent(p_258402_ -> p_258397_.set(new WalkTarget(p_258402_, p_259775_, 0)));
return true;
}
}
)
);
}
}