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

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

Тема в разделе "Помощь", создана пользователем BoberMod, 4 дек 2015.

  1. Автор темы
    BoberMod

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

    Баллы:
    76
    Имя в Minecraft:
    BoberMod
    Суть бага в том, что зажимаешь шифт и ПКМ на дверь - проходишь сквозь нее.

    Как пофиксить?
    Spigot 1.8.8
     
  2. deadanykey

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

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

    Эвент из него:
    Код:
        @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());
            }
    
        }
     
  3. Grego

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

    Баллы:
    78
    Имя в Minecraft:
    Grego
    скинь этот плагин
     
  4. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    А самому плагин слепить никак?
    Тут только Main класс дописать с plugin.yml и можно в продакшен :cute:
     
  5. deadanykey

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

    Баллы:
    96
    Нет, я жмотяра. :nerd:
     
  6. Grego

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

    Баллы:
    78
    Имя в Minecraft:
    Grego
    Я нуб в джаве и вообще у меня нету exlipc'a
     
  7. alexandrage

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

    Баллы:
    173
    Тогда смирись и завидуй молча.
    P.s реализация все равно полнейший быдлокод. Да и нет основного кода проверки региона.
     
  8. deadanykey

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

    Баллы:
    96
    Ок, как, по-Вашему, нужно было сделать? Жду вариантов.

    P.S. setCancelled для интеракта в данном случае не сработает как надо. Это к сведению.
     
  9. Dymeth

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

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

    Для начала нужно понять природу бага, а потом уже исправлять нормальными способами, а не костылить и говнокодить.
     
    Последнее редактирование: 30 май 2016
  10. deadanykey

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

    Баллы:
    96
    Замечу, что этот "костыль" работает. Событие PlayerMoveEvent использовано не просто так.

    Также замечу, что пока ничего конструктивного я не услышал.
     
  11. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Из серии "работает - не трогай". Вот такие вот программисты вырастают, идут на работу, а потом все удивляются, почему в России (или другой стране СНГ) всё через жопу.

    А предложение разобраться в проблеме - это не конструктивно? Или, может, не оптимально?
    Врага всегда нужно знать в лицо. Чтобы, так сказать, знать, с кем бороться.
     
  12. deadanykey

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

    Баллы:
    96
    Я вполне верю, что Вы -достойный программист. Предложите вариант решения?
    Моё решение выше. Ну вот настолько у меня мозгов хватило, уж извините.
     
  13. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Варианты решения предложены мной выше - для начала обновить ядро и плагины. Это оптимально.
    Также уточнить, возможен ли баг на ванильных клиентах или с какими-то модами (какими?).
    После этой проверки можно будет понять, банально ли ядро не проверяет прохождение через неполный блок, не "закрывает" дверь обратно при отмене события, или, возможно, определяет игрока каким-то привилегированным. Причём при данном раскладе дело может быть и вовсе не в ядре, а в плагине или серверном моде, например.
     
  14. deadanykey

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

    Баллы:
    96
    По моим наблюдениям баг был в ядре (не обновлял, так как не на что было обновлять). Видимо, ядро не совсем корректно обрабатывало отмену события (от LWC или WG), в результате чего игрок оставался "внутри" двери, что позволяло ему потихоньку двигаться вперёд, пока он не оказывался внутри. Замечу, что такой финт возможен, только если зажать Shift (присесть).
    Таким образом, отмена PlayerInteractEvent практически никак не спасало (за исключением слегка увеличенного времени на прохождение сквозь дверь).
    Поэтому я использовал PlayerMoveEvent, которое просто переставляет игрока назад, если дверь запривачена или игрок в чужом регионе.

    Как обстоит дело с новыми версиями, я не знаю, так как не проверял вовсе.
     
  15. Dymeth

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

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

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