@events.receive_packetможно отменить2 методаПакет пришёл от сервера, но игра его ещё не применила.
Обратная сторона сети: тут видно всё, что сервер сообщает клиенту. Урон, здоровье, отбрасывание, телепорты, чат сервера.
Пакет можно прочитать, поправить поля или выкинуть. Классика жанра это антикнокбэк: не принимать вектор отбрасывания.
Заменить пакет целиком нельзя, setPacket есть только у исходящих.
| Метод | Возвращает | Зачем |
|---|---|---|
getPacket() | Packet | Пришедший пакет. Объект игры, методы зовутся сразу |
cancel() / isCancelled() | ничего / bool | Выкинуть пакет, игра его не увидит |
VELOCITY = "net.minecraft.network.packet.s2c.play.EntityVelocityUpdateS2CPacket"
EXPLOSION = "net.minecraft.network.packet.s2c.play.ExplosionS2CPacket"
mod = Module("NoVelocity", "Combat")
@events.receive_packet
def on_receive(event):
if not mod.isEnabled() or not world.ingame():
return
packet = event.getPacket()
if is_instance(packet, VELOCITY):
# такой пакет летит на любую сущность, нас волнует только своя
if packet.getEntityId() == mc.player.getId():
event.cancel()
return
if is_instance(packet, EXPLOSION):
event.cancel() # взрывы тоже толкают игрокаОбщий список всех событий и правила подписки лежат на странице События.