@events.collision_shapeможно отменить4 методаКаждый раз, когда игра спрашивает у блока форму столкновения. Это происходит для каждого блока рядом с каждой движущейся сущностью.
Событие даёт подменить или убрать столкновение конкретного блока: event.cancel() делает блок проходимым, setShape задаёт свою форму.
На нём строят проход сквозь стены, отключение столкновения с определёнными блоками, снятие невидимых барьеров.
Форма это VoxelShape из самой игры. Пустую берут так: VoxelShapes = jimport("net.minecraft.util.shape.VoxelShapes"), затем VoxelShapes.empty().
| Метод | Возвращает | Зачем |
|---|---|---|
getState() | BlockState | Состояние блока. Объект Minecraft, нужен wrap |
getPos() | BlockPos | Координаты блока. Объект Minecraft, нужен wrap |
getShape() / setShape(shape) | VoxelShape / ничего | Форма столкновения |
cancel() / isCancelled() | ничего / bool | Убрать столкновение: блок станет проходимым |
mod = Module("NoWeb", "Movement")
mod.setDesc("Паутина не замедляет")
@events.collision_shape
def on_collision(event):
# обработчик обязан быть ДЕШЁВЫМ: он зовётся на каждый блок рядом с каждой сущностью
if not mod.isEnabled():
return
state = event.getState()
if "cobweb" in str(state.getBlock()):
event.cancel() # блок становится проходимымОбщий список всех событий и правила подписки лежат на странице События.