Запрет удара по сущности на клиенте

Статус
В этой теме нельзя размещать новые ответы.
Версия Minecraft
1.8.9
22
1
0
Здравствуйте, я работаю над одним очень простым модом, мод на друзей, его основная суть заключается в том, что даже если ты бьёшь по другу(нажимаешь левой кнопкой мыши наведённой на него) при игре на сервере, удар именно по нему просто не проходит. В гугле ничего толкового я найти не смог и начинаю подозревать что надо шаманить с пакетами. С конфигом.

Если что простите за тупость, я впервые переехал с плагинов на моды.
 
Решение
Попробуй перехватить PlayerControllerMP#attackEntity. Второй аргумент метода - это сущность, по которой ударил игрок. Т.е. тебе нужно отменять вызов оригинального метода, если сущность является другом игрока.
Код хука будет примерно такой
Java:
    @Hook(returnCondition = ReturnCondition.ON_TRUE)
    public static boolean attackEntity(PlayerControllerMP controller, EntityPlayer player, Entity entity) {
        return isFriend((EntityPlayer)entity); // заменяешь на свою проверку
    }
код покажи, мы не ясновидящие
Вот код,это то что есть на данный момент, остальной код я решил убрать до решения проблемы с отменой.
Код:
@SubscribeEvent
public void onHit(LivingAttackEvent event) {
    event.setResult(Result.DENY);
    event.setCancelled(true);
}
 
Так же делай надо будет делать проверку что игрок которого ты ударил является твоим другом и отменять эвент
Дело в том, что я уже написал нужный код для проверки друг ли или нет, я просто убрал его временно, чтобы сконцентрироваться на данной проблеме. Но код отмены уже не работает.
 
Java:
    @SubscribeEvent
    public void onLivingAttack(LivingHurtEvent e){
        if(!(e.entityLiving instanceof EntityPlayerMP)){
            return;
        }

        FriendsPlayer player = FriendsPlayer.forPlayer((EntityPlayerMP)e.entityLiving);
        Entity target = e.source.getSourceOfDamage();
        
        if(target instanceof EntityPlayerMP){
            if(player.isInFriends((EntityPlayerMP)target)){
                    e.ammount = e.ammount / 2F;
            }
        }
    }
Пример
 
Дамаг игроку которого ударили уменьшается в 2 раза
Да
Как я понял это подойдёт только для одиночной игры
нет
ведь не может же клиент изменить дамаг на сервере?
Этот эвент используется на серверной стороне
 
Изначально я писал мод именно для клиента
Лол, логику видишь нет? Вот именно её нет ты пытаешься на клиенте отменить урон по друзьям, бив игрока на сервере..
 
Лол, логику видишь нет? Вот именно её нет ты пытаешься на клиенте отменить урон по друзьям, бив игрока на сервере..
Не отменить урон, а отменить отправку пакетов о ударе на сервер со стороны клиента. То есть вообще не сообщать серверу об ударе.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху