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

Статус
В этой теме нельзя размещать новые ответы.
Версия 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); // заменяешь на свою проверку
    }
477
7
51
а отменить отправку пакетов о ударе на сервер со стороны клиента. То есть вообще не сообщать серверу об ударе.
ты делаешь дичь, зачем тебе с клиента отменять когда тебе просто нужно на сервере отменить и всё, щас ты делаешь костыли говно
 
22
1
0
ты делаешь дичь, зачем тебе с клиента отменять когда тебе просто нужно на сервере отменить и всё, щас ты делаешь костыли говно
Я не могу поставить моды на сервер Spigot/PaperSpigot к которому ещё и доступа не имею.
 
22
1
0
Это что чит? Т.к больше похоже на это, раз у тебя нету доступа и ты на клиенте пытаешься это дело отменить....
На этом сервере есть 1 клан, его участникам запрещено атаковать друг друга, в целях уменьшения нарушений данного правила меня попросили написать данный мод.
 
22
1
0
а не проще это дело сделать плагином?
Опять же я не имею доступа к файлам сервера, да и никакой администратор в своём уме не будет ставить плагин от не проверенного игрока, да и ради одного клана
 
477
7
51
В 1. Тебе нужно на клиенте получить свежие данные игроков из клана
В 2. Тебе нужно пройтись по всем игрокам клана и не является ли игрок которого бьют и отменить эвент,
не знаю как ты на клиенте будешь проверять всех игроков клана
ну даже если ты сделал это, то отменяй нажатие левой кнопки мыши что ли, идей пока нету
 
22
1
0
не знаю как ты на клиенте будешь проверять всех игроков клана
ну даже если ты сделал это, то отменяй нажатие левой кнопки мыши что ли, идей пока нету
Почему бы не запользовать конфигурацию мода?
 
477
7
51
да и никакой администратор в своём уме не будет ставить плагин от не проверенного игрока, да и ради одного клана
НО ЗАТО ПРОСЯТ СДЕЛАТЬ МОД ЧТОБЫ НЕ НАРУШАЛИ, мда, можно считать это чит клиентом, т.к ты будешь ставить свой мод и в нарушение правил сервера если нет разрешение на отмену урона по друзьям то это нарушение, ибо возможно что урон специально сделали, а ты так скажем используя этот мод удобно отменяешь урон, такое себе дело
 
22
1
0
Я всё таки смог отменять клик, только почему то, когда я делаю
if(mc.pointedEntity instanceof EntityOtherPlayerMP)
Ивент отменяется даже если mc.pointedEntity возвращает не объект игрока, а допустим объект зомби.
 
Последнее редактирование:
292
14
160
Попробуй перехватить PlayerControllerMP#attackEntity. Второй аргумент метода - это сущность, по которой ударил игрок. Т.е. тебе нужно отменять вызов оригинального метода, если сущность является другом игрока.
Код хука будет примерно такой
Java:
    @Hook(returnCondition = ReturnCondition.ON_TRUE)
    public static boolean attackEntity(PlayerControllerMP controller, EntityPlayer player, Entity entity) {
        return isFriend((EntityPlayer)entity); // заменяешь на свою проверку
    }
 
292
14
160

Вложения

  • 1597918053981.png
    1597918053981.png
    8 KB · Просмотры: 5
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); // заменяешь на свою проверку
    }
Получается, что проверка вернёт boolean значение и удар отменится если оно окажется true и не отменится если false?
 
22
1
0
Почитай подробнее, как работают хуки, если с ними ещё не знаком: [Гайд][Легко][1.6+] Модификация чужого кода при запуске (трансфомеры)
Спасибо, я начал читать статью. Всё работает! Я даже представить не мог, что кто то осмелится написать либу для изменения байт кода майна.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху