Помогите Проход сквозь дверь 1.8.7

  • Автор темы Автор темы BoberMod
  • Дата начала Дата начала

BoberMod

Активный участник
Пользователь
Баллы
76
Ник в Minecraft
BoberMod
Суть бага в том, что зажимаешь шифт и ПКМ на дверь - проходишь сквозь нее.
Как пофиксить?
Spigot 1.8.8
 
Да, только узнал. Где вы написали ответ на мой вопрос?
Я соорудил отдельный плагин для этой задачи. Это костыль, но работает.

Эвент из него:
Код:
    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
    public void onPlayerMove(PlayerMoveEvent event) {
        Player player = event.getPlayer();

        Block block = event.getTo().getBlock();
        int typeId = block.getTypeId();

        // Двери.
        if ((typeId == 64
                || typeId == 71
                || typeId == 193
                || typeId == 194
                || typeId == 195
                || typeId == 196
                || typeId == 197
                // Люки.
                || typeId == 96
                || typeId == 167
                // Калитки.
                || typeId == 107
                || typeId == 183
                || typeId == 184
                || typeId == 185
                || typeId == 186
                || typeId == 187)
                && player.isSneaking()
                && (isProtectWorldGuard(player, block.getLocation()) || isProtectLWC(player, block))) {

            player.teleport(event.getFrom());
        }

    }
 
Я соорудил отдельный плагин для этой задачи. Это костыль, но работает.

Эвент из него:
Код:
    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
    public void onPlayerMove(PlayerMoveEvent event) {
        Player player = event.getPlayer();

        Block block = event.getTo().getBlock();
        int typeId = block.getTypeId();

        // Двери.
        if ((typeId == 64
                || typeId == 71
                || typeId == 193
                || typeId == 194
                || typeId == 195
                || typeId == 196
                || typeId == 197
                // Люки.
                || typeId == 96
                || typeId == 167
                // Калитки.
                || typeId == 107
                || typeId == 183
                || typeId == 184
                || typeId == 185
                || typeId == 186
                || typeId == 187)
                && player.isSneaking()
                && (isProtectWorldGuard(player, block.getLocation()) || isProtectLWC(player, block))) {

            player.teleport(event.getFrom());
        }

    }
скинь этот плагин
 
Тогда смирись и завидуй молча.
P.s реализация все равно полнейший быдлокод.
Ок, как, по-Вашему, нужно было сделать? Жду вариантов.

P.S. setCancelled для интеракта в данном случае не сработает как надо. Это к сведению.
 
Сейчас проверил на Spigot 1_8_R3 (1.8.8) и WE+WG 1.6 - всё нормально. Советую обновить ядро и WE и WG. Не думаю, что между ядрами 1.8.7 и 1.8.8 большая разница - разве что необходимый багфикс.
Кстати, данный финт производился на ванильном клинте или как?

Ок, как, по-Вашему, нужно было сделать? Жду вариантов.
Для начала нужно понять природу бага, а потом уже исправлять нормальными способами, а не костылить и говнокодить.
 
Последнее редактирование:
Для начала нужно понять природу бага, а потом уже исправлять нормальными способами, а не костылить.
Замечу, что этот "костыль" работает. Событие PlayerMoveEvent использовано не просто так.

Также замечу, что пока ничего конструктивного я не услышал.
 
Замечу, что этот "костыль" работает. Событие PlayerMoveEvent использовано не просто так.
Из серии "работает - не трогай". Вот такие вот программисты вырастают, идут на работу, а потом все удивляются, почему в России (или другой стране СНГ) всё через жопу.

Также замечу, что пока ничего конструктивного я не услышал.
А предложение разобраться в проблеме - это не конструктивно? Или, может, не оптимально?
Врага всегда нужно знать в лицо. Чтобы, так сказать, знать, с кем бороться.
 
Из серии "работает - не трогай". Вот такие вот программисты вырастают, идут на работу, а потом удивляемся, почему России (или другой стране СНГ) всё через жопу.
А предложение разобраться в проблеме - это не конструктивно? Или, может, не оптимально?
Я вполне верю, что Вы -достойный программист. Предложите вариант решения?
Моё решение выше. Ну вот настолько у меня мозгов хватило, уж извините.
 
Я вполне верю, что Вы -достойный программист. Предложите вариант решения?
Моё решение выше. Ну вот настолько у меня мозгов хватило, уж извините.
Варианты решения предложены мной выше - для начала обновить ядро и плагины. Это оптимально.
Также уточнить, возможен ли баг на ванильных клиентах или с какими-то модами (какими?).
После этой проверки можно будет понять, банально ли ядро не проверяет прохождение через неполный блок, не "закрывает" дверь обратно при отмене события, или, возможно, определяет игрока каким-то привилегированным. Причём при данном раскладе дело может быть и вовсе не в ядре, а в плагине или серверном моде, например.
 
Варианты решения предложены мной выше - для начала обновить ядро и плагины. Это оптимально.
Также уточнить, возможен ли баг на ванильных клиентах или с какими-то модами (какими).
После этой проверки можно будет понять, банально ли ядро не проверяет прохождение через неполный блок, не "закрывает" дверь обратно при отмене события, или, возможно, определяет игрока каким-то привилегированным. Причём при данном раскладе дело может быть и вовсе не в ядре, а в плагине или серверном моде, например.
По моим наблюдениям баг был в ядре (не обновлял, так как не на что было обновлять). Видимо, ядро не совсем корректно обрабатывало отмену события (от LWC или WG), в результате чего игрок оставался "внутри" двери, что позволяло ему потихоньку двигаться вперёд, пока он не оказывался внутри. Замечу, что такой финт возможен, только если зажать Shift (присесть).
Таким образом, отмена PlayerInteractEvent практически никак не спасало (за исключением слегка увеличенного времени на прохождение сквозь дверь).
Поэтому я использовал PlayerMoveEvent, которое просто переставляет игрока назад, если дверь запривачена или игрок в чужом регионе.

Как обстоит дело с новыми версиями, я не знаю, так как не проверял вовсе.
 
Как обстоит дело с новыми версиями, я не знаю, так как не проверял вовсе.
Если же дело в ядре - пламенный привет разрабам. Багрепорты кидать можно. А при наличии умений и самостоятельно исправлять.
В любом случае, сейчас всё работает нормально (по крайней мере на ванильном клиенте + на сервере с тремя плагинами: PEX, WE, WG).
 
Назад
Верх Низ