Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

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

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

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

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

    Как пофиксить?
    Spigot 1.8.8
     
  2. Хостинг MineCraft
    <
  3. 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());
            }
    
        }
     
  4. Grego

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

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

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

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

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

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

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

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

    alexandrage Администратор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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