@events.inputотменить нельзя9 методовПосле того как игра собрала ввод за тик, но до того как применила его к движению.
Тут движение это уже не нажатые клавиши, а числа: вперёд-назад и вбок, каждое от -1.0 до 1.0. Их можно переписать, и игра пойдёт туда, куда скажет скрипт.
Через input делают автоходьбу, всплытие в воде, вечный спринт, обход блокировки движения. Это аккуратнее, чем дёргать клавиши через mc.options: ты не ломаешь настоящие нажатия игрока, а правишь готовый результат.
Отдельная пара методов, setYaw и setYawSmooth, пересчитывает ввод под другой угол взгляда. Нужна, когда камера смотрит в одну сторону, а идти надо в другую: при тихой наводке персонаж иначе будет ходить боком.
| Метод | Возвращает | Зачем |
|---|---|---|
getForward() / setForward(v) | float / ничего | Вперёд-назад: 1.0 вперёд, -1.0 назад, 0.0 стоим |
getStrafe() / setStrafe(v) | float / ничего | Вбок: 1.0 влево, -1.0 вправо |
isJump() / setJump(b) | bool / ничего | Прыжок в этом тике |
isSneak() / setSneak(b) | bool / ничего | Приседание |
isSprint() / setSprint(b) | bool / ничего | Спринт |
getSneakSlowDownMultiplier() / setSneakSlowDownMultiplier(v) | float / ничего | Насколько присед замедляет движение (по умолчанию 0.3) |
setYaw(yaw) | ничего | Пересчитать ввод так, чтобы движение шло по указанному углу |
setYaw(yaw, direction) | ничего | То же, но исходное направление задаётся вторым аргументом |
setYawSmooth(yaw) | ничего | Плавный вариант: ввод не щёлкает по восьми направлениям, а поворачивается точно |
mod = Module("WaterJump", "Movement")
@events.input
def on_input(event):
if not mod.isEnabled() or not world.ingame():
return
if mc.player.isTouchingWater():
event.setJump(True) # всплываем без зажатого пробела
if event.getForward() != 0.0: # спринт только когда реально идём
event.setSprint(True)# при тихой наводке камера смотрит на цель, а идти нужно туда,
# куда игрок жмёт. setYaw пересчитывает ввод под нужный угол
mod = Module("SilentMove", "Movement")
@events.input
def on_input(event):
if not mod.isEnabled() or not world.ingame():
return
yaw, _pitch = rotations.player() # куда камера смотрит на самом деле
event.setYawSmooth(yaw)Общий список всех событий и правила подписки лежат на странице События.