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

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

Discussion in 'Помощь' started by BoberMod, Dec 4, 2015.

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

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

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

    Как пофиксить?
    Spigot 1.8.8
     
  2. Хостинг MineCraft
    <
  3. deadanykey

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

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

    Эвент из него:
    Code:
        @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 Активный участник Пользователь

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

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

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

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

    Trophy Points:
    96
    Нет, я жмотяра. :nerd:
     
  7. Grego

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Share This Page