|
比如我想在任何情况下,玩家都只能破坏或者放置指定方块,原版的冒险模式下,仍然会有许多方块可以被改变,单纯拦截实体放置和破坏方块,是不够的,因为会有很多事件会改变方块无法监测到,
知道会有非常频繁的事件,但可以分类检测和广播。
如果可以检测到所有方块的更改事件,做很多功能就变得简单,
这个事件应该也可以在客户端检测,这样就可以减少一些服务器端的压力
比如我需要做一个探测方块功能,需要每帧更新玩家周围指定方块的数量,如果每帧扫描方块,范围超过10立方,基本服务器就无法承受,如果有方块更改事件,只需要扫描一次,方法更改时自动更新就可以了,性能和扫描范围可以提升n倍。
比如我要检测任意植物的生长事件,这个基本就无法通过扫描来检测了,这个就非常需要这个事件
另外像水流,众所周知的小学生卡服的方法,就是在高山上放置一个水方块,这样会导致大范围的水流,这种也不方便来检测
综合起来,主要就是检测ServerEntityTryPlaceBlockEvent和ServerPlayerTryDestroyBlockEvent事件无法检测的方块更改事件,,
其中主要包含了
游戏随机刻更新的方块事件,如(植物生长,水流岩浆流更新),
玩家操作导致的方块开关,如各种开关事件(开关门,活版门,拉杆,按钮等)
玩家操作导致的方块状态变化,(如堆肥桶,炼药锅,酿造台等)
玩家操作导致的容器方块数据变化,(比如领地系统中,禁止玩家拿别人领地里箱子的物品,酿造台里面的药水)
甚至红石器件的变化,用于限制红石器件的运行等
|
|