Files
CatServer/patches/net/minecraft/pathfinding/WalkNodeProcessor.java.patch
2019-02-24 22:29:41 +08:00

63 lines
2.8 KiB
Diff

--- ../src-base/minecraft/net/minecraft/pathfinding/WalkNodeProcessor.java
+++ ../src-work/minecraft/net/minecraft/pathfinding/WalkNodeProcessor.java
@@ -23,6 +23,7 @@
public class WalkNodeProcessor extends NodeProcessor
{
protected float avoidsWater;
+ protected EntityLiving currentEntity;
public void init(IBlockAccess sourceIn, EntityLiving mob)
{
@@ -295,7 +296,9 @@
PathNodeType pathnodetype = PathNodeType.BLOCKED;
double d0 = (double)entitylivingIn.width / 2.0D;
BlockPos blockpos = new BlockPos(entitylivingIn);
+ this.currentEntity = entitylivingIn;
pathnodetype = this.getPathNodeType(blockaccessIn, x, y, z, xSize, ySize, zSize, canBreakDoorsIn, canEnterDoorsIn, enumset, pathnodetype, blockpos);
+ this.currentEntity = null;
if (enumset.contains(PathNodeType.FENCE))
{
@@ -399,6 +402,8 @@
{
pathnodetype = PathNodeType.DAMAGE_CACTUS;
}
+
+ if (pathnodetype1 == PathNodeType.DAMAGE_OTHER) pathnodetype = PathNodeType.DAMAGE_OTHER;
}
pathnodetype = this.checkNeighborBlocks(blockaccessIn, x, y, z, pathnodetype);
@@ -417,16 +422,19 @@
{
if (i != 0 || j != 0)
{
- Block block = p_193578_1_.getBlockState(blockpos$pooledmutableblockpos.setPos(i + p_193578_2_, p_193578_3_, j + p_193578_4_)).getBlock();
+ IBlockState state = p_193578_1_.getBlockState(blockpos$pooledmutableblockpos.setPos(i + p_193578_2_, p_193578_3_, j + p_193578_4_));
+ Block block = state.getBlock();
+ PathNodeType type = block.getAiPathNodeType(state, p_193578_1_, blockpos$pooledmutableblockpos, this.currentEntity);
- if (block == Blocks.CACTUS)
+ if (block == Blocks.CACTUS || type == PathNodeType.DAMAGE_CACTUS)
{
p_193578_5_ = PathNodeType.DANGER_CACTUS;
}
- else if (block == Blocks.FIRE)
+ else if (block == Blocks.FIRE || type == PathNodeType.DAMAGE_FIRE)
{
p_193578_5_ = PathNodeType.DANGER_FIRE;
}
+ else if (type == PathNodeType.DAMAGE_OTHER) p_193578_5_ = PathNodeType.DANGER_OTHER;
}
}
}
@@ -443,6 +451,9 @@
Block block = iblockstate.getBlock();
Material material = iblockstate.getMaterial();
+ PathNodeType type = block.getAiPathNodeType(iblockstate, p_189553_1_, blockpos, this.currentEntity);
+ if (type != null) return type;
+
if (material == Material.AIR)
{
return PathNodeType.OPEN;