实体方块的判断——源码中调用isNormalCube()的位置总结

游戏版本:Minecraft Java Edition 1.13.2 源码来源:mcp 不保证下列调用目的的表述正确性,仅均为个人猜想


isNormalCube

实体方块,实心方块,整砖,普通方块,具体指什么?

在我看来,绝大部分时间里,当我们提及“实体方块”一词的时候,指的都是能压线压箱发矿车的那一类实心完整方块。在源码中,这些,都是通过一个叫做isNormalCube()的函数进行判定的

net/minecraft/block/Block.java:293

我猜这个是实体方块

这个函数里的三个判据我先不细究,先来看看源码中所有调用isNormalCube()的位置,来看看这个实体方块判断,会用在什么地方

箱子压箱判定

net/minecraft/block/BlockChest.java:335

箱子上面有实体方块时无法打开

末影箱压箱判定

net/minecraft/block/BlockEnderChest.java:97

末影箱上面有实体方块时无法打开

比较器隔方块检测容器的判定

net/minecraft/block/BlockRedstoneComparator.java:85

红石粉的各种判定

压线判定

net/minecraft/block/BlockRedstoneWire.java:150

红石粉更新

看看是沿实体方块的表面上传还是下传

红石粉信号更新

net/minecraft/block/BlockRedstoneWire.java:222

方块增加时

net/minecraft/block/BlockRedstoneWire.java:305

方块替换时

net/minecraft/block/BlockRedstoneWire.java:341

判断信号源

net/minecraft/block/BlockRedstoneWire.java:438

地狱门方块刷新僵尸猪人

net/minecraft/block/BlockPortal.java:70

只在实体方块上面刷猪人

获得红石信号强度时判断强弱充能

net/minecraft/world/World.java:2548

判断更新隔实体方块检测容器的比较器输出

net/minecraft/world/World.java:3071

刷怪循环

集群刷怪的开始判定

net/minecraft/world/WorldEntitySpawner.java:107

实体方块会在集群刷怪的开始打断集群刷怪

水生生物的刷新判定

net/minecraft/world/WorldEntitySpawner.java

水生生物刷新方块的上方不能是实体方块

挤出卡入实体方块中的玩家

net/minecraft/client/entity/EntityPlayerSP.java:474

net/minecraft/client/entity/EntityPlayerSP.java:534

net/minecraft/entity/player/EntityPlayer.java:1826

玩家类中所使用的isNormalCube()

其实也只是一层套娃

net/minecraft/entity/player/EntityPlayer.java:1830

矿车在激活的充能铁轨上贴实体方块时的启动

net/minecraft/entity/item/EntityMinecart.java:615

蝙蝠倒挂睡觉

net/minecraft/entity/passive/EntityBat.java:132

net/minecraft/entity/passive/EntityBat.java:174

得倒挂在实体方块下才可能睡觉


相关链接