@events.tick_endотменить нельзябез методовВ самом конце тика игрока, когда движение, физика и позиция уже пересчитаны.
tick приходит до расчёта тика, tick_end после. Разница важна, когда нужен результат, а не намерение: куда игрок реально сдвинулся, изменилась ли скорость, сработал ли прыжок.
Тут удобно снимать показания для сравнения с прошлым тиком: скорость по горизонтали, смещение позиции, состояние на земле.
Своих методов у события нет: клиент просто сообщает, что момент наступил. Всё нужное берут из mc, world и своих переменных.
last = {"x": 0.0, "z": 0.0}
@events.tick_end
def on_tick_end(event):
if not world.ingame():
return
p = mc.player
dx = p.getX() - last["x"]
dz = p.getZ() - last["z"]
last["x"], last["z"] = p.getX(), p.getZ()
# блоков в секунду: за тик прошли dx и dz, тиков в секунде двадцать
client.overlay("%.2f бл/с" % ((dx * dx + dz * dz) ** 0.5 * 20))Общий список всех событий и правила подписки лежат на странице События.