1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Эффективный инструмент ломания блока?

Тема в разделе "Разработка плагинов для новичков", создана пользователем pro100koder, 30 июл 2020.

Статус темы:
Закрыта.
  1. Автор темы
    pro100koder

    pro100koder Активный участник Пользователь

    Баллы:
    76
    Как получить эффективный для ломания блока инструмент?
    Вот есть в 1.13.2 такой красивый метод: Material.getHardness(). Выдаёт прочность блока.
    Хорошо, вот она у меня есть. А теперь мне нужно узнать, ломали ли его правильным инструментом. Вопрос: каким методом и из какого объекта достать хоть какую-то наводку на нужный тип инструментов?
    P. S. Пишу некий анти-fastbreak, основанный на запоминании ломания за 5 realtime секунд и оповещении об этом администрации. У игроков не будет отменяться каждый 2 блок при ломании (если пинг), да и ложных срабатываний минимум, т. к. за 5 секунд почти любые пинги будут подавлены.
     
  2. nutrolshok

    nutrolshok Активный участник Пользователь

    Баллы:
    76
    Записываешь просто эффективные инструменты для блока, а потом достаёшь их.
     
  3. Автор темы
    pro100koder

    pro100koder Активный участник Пользователь

    Баллы:
    76
    Каким образом записывать? Делать базу вручную со всеми материалами minecraft-а? Или пилить сложную систему, где с сервера сначала находят наиболее популярную скорость для опр. блока? (Крайне неточная, лагающая дичь)? Неужели в material и т. п. нет никаких намёков на инструменты?
     
  4. nutrolshok

    nutrolshok Активный участник Пользователь

    Баллы:
    76
    Вручную со всеми материалами.
     
  5. ArtFect

    ArtFect Активный участник

    Баллы:
    61
    Имя в Minecraft:
    Fiw
    Вроде как в апи такого нет. Посмотри как это определяется в ядре. Это находится в методе b(IBlockData iblockdata) в EntityHuman классе (в маппингах форджа это getDigSpeed(BlockState state) в PlayerEntity), он возвращает число от 0 до 1 - на сколько процентов игрок сломает блок за тик. Там учитывается правильный ли инструмент, эффективность на инструменте, эффекты на игроке, в воздухе/в воде ли находится игрок и т.д... Тебе тоже это все надо учесть (Ну или вызвать этот метод). Конкретно правильность инструмента там определяется путем сверки со списком правильных материалов для этого инструмента. Пример с топором:
    upload_2020-8-4_20-8-26.png
     
    Последнее редактирование: 4 авг 2020
  6. Автор темы
    pro100koder

    pro100koder Активный участник Пользователь

    Баллы:
    76
    Огромное спасибо, нагуглил, через NMS запилил. Только теперь есть проблемы, связанные с задержкой между блоками... Я сохраняю скорость ломания и прочность блока в объект Break, делим прочность материала на скорость - и вуаля. Время, за которое игрок должен без читов сломать блок (правда не совсем понятно, в чём оно). Однако между сломанными блоками есть какая-то задержка, тупо подобрать правильное число не получается. Точность в итоге оказывается хуже, чем при обычной системе с временем ломания одного блока. Что делать? При записи за 5 секунд сломаных блоков лопатой и рукой числа имеют большую разницу. Я так понимаю, дело в 4-тиковом апдейте предмета в руке при зажатой кнопке...
     
  7. ArtFect

    ArtFect Активный участник

    Баллы:
    61
    Имя в Minecraft:
    Fiw
    Когда ломаешь блоки не мгновенно, добавляется 5 тиков задержки после ломания. Многие клиенты делают быстрое ломание путем убирания этой задержки
    https://minecraft.gamepedia.com/Instant_mining
     
  8. Автор темы
    pro100koder

    pro100koder Активный участник Пользователь

    Баллы:
    76
    Не знаю. Даже при искусственном добавлении задержки к общему таймеру по 0,25 сек., всё равно результат алмазной лопаты сильно отличается от деревянной. Т. к. проверка идёт за 5 секунд, всегда результат должен быть близок к 5, но если "подогнать" под деревянную лопату, чтобы было 5 - алмазная выдаст 4. Подогнать алмазной 5 - деревянная отклоняется. При этом, я учёл умножение hardness на 1,5 и прочие особенности из википедии, всё равно результат не усредняется. Даже если и алм и дер будут одинаково выдавать - камень и железо начнёт фигнёй страдать. Пока что сделал убогую систему, напоминающую NCP, просто из интереса... Хотя хотелось бы сделать профессиональный античит именно от fastbreak-а, т. к. уже в 2 режимах fastbreak имеет огромное влияние на баланс и его крайне криво палит NCP (вечные жалобы что блок откатывается и спам в чате от NCP, если на сервере есть пинг или игрок через тапок к интернету подключен. Долгосрочный лимит мог бы это всё исправить, но его нельзя посчитать! :mad:)
     
  9. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    NCP надо настраивать уметь. Никогда никто не жаловался за много лет.
     
  10. Автор темы
    pro100koder

    pro100koder Активный участник Пользователь

    Баллы:
    76
    Откуда информация?
    Мне проще именно эту самую часть NCP самому своими ручками перепилить, чем настроить его так, как мне нужно.
    P. S. Забыл закрыть тему... Я всё допилил, тупо забив на единый лимит. По факту сделал тот же NCP, но с чуть другим принципом работы.
    P. P. S. Год назад, когда настраивал NCP, не нашёл достойных пояснений, что за что отвечает в настройках ломания блоков NCP. За то тонна готовых настроек, которые так и кричат: самая правильная! Самая правильная!
     
Статус темы:
Закрыта.

Поделиться этой страницей