结论
通过火焰方块的放置判断当前的位置是否可以生成地狱门传送方块,其中判断是否满足生成的条件使用的PortalShape类。若可以生成EventHooks的onTrySpawnPortal方法。其中EventHooks的onTrySpawnPortal方法调用了PortalSpawnEvent事件。之后得到的结果为true的情况下。通过PortalShape类的createPortalBlocks方法创建方块。
意义
地狱门就是一个多方块结构,通过这个实现我们可以设计其他的多方块结构。
PortalShape类
用于处理和检测游戏中的传送门
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| PortalShape类 MIN_WIDTH MAX_WIDTH MIN_HEIGHT MAX_HEIGHT IBlockStateExtension::isPortalFrame;
findEmptyPortalShape()
findPortalShap()
PortalShape()
calculateBottomLeft(BlockPos)
calculateWidth()
getDistanceUntilEdgeAboveFrame()
calculateHeight()
getDistanceUntilTop()
isEmpty()
isValid()
createPortalBlocks()
isComplete()
getRelativePosition()
PortalInfo createPortalInfo()
findCollisionFreePosition()
|
BaseFrieBlock类
// 火焰类型方块的基类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| BaseFireBlock
getStateForPlacement getState() getShape() animateTick() canBurn(); entityInside() onPlace() inPortalDimension() spawnDestroyParticles() playerWillDestroy() canBePlacedAt() isPortal()
|