Прыжки

Версия Minecraft
1.12.2
API
Forge
25
1
0
Всем привет. Нужно при определенных условиях отключать игроку возможность прыгнуть. Пробовал ставить motionY на -0.1, вроде частично помогает, игрок не может прыгать если стоит на месте, но при спринте появляется возможность делать микропрыжки. Есть ли еще какие либо способы это сделать?
 
352
26
97
Ловить LivingJumpEvent, если игрок - сетать motionY на 0, однако, при спринте будут изменяться ещё и motionX + motionZ. Можешь сделать WrapWithCodition в NetHandlerPlayServer#processPlayer, у него там есть вызов метода jump, просто не обрабатывать этот пакет, так получится более корректно, чтобы сохранить работу motion-ов в целом, если вдруг они изменяются посредством не прыжков.
 
352
26
97
При определенных условиях просто не дает кнопку жать.
Это костыль. Пакет со стороны клиента всё равно получится отправить пакет, хотя если посмотреть на читы, то через эти же пакеты там далеко не только прыгать получится.
По WrapWithCodition не получилось разобраться
Java:
@Mixin(NetHandlerPlayServer.class)
public abstract class MixinNetworkHandler {
    @WrapWithCondition(method = "processPlayer", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/EntityPlayerMP;jump()V"))
    public boolean preventJump(EntityPlayerMP player) {
        return player.isCreative();
    }
}
 
Сверху