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

Помогите Запрет невозможного дропа

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

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

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

    Баллы:
    76
    В общем, знаете, как на prison-е с кристаликса вещички сразу в инвентарь дропаются? Так вот: я сделал нечто такое же. Но проблема: даже если ты сломаешь камень лопатой, он выпадет. Как же нам это пофиксить кроме костылей, аля "если у игрока в руке кирка..."?
    Код:
    for(ItemStack item:e.getBlock().getDrops()){
                p.getInventory().addItem(item);
            }
    //сам дроп с ивента BrekBlock.
     
  2. AtomicScience

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

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Воспользуйся методом .isDropItems() BlockBreakEvent'а
     
  3. alexandrage

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

    Баллы:
    173
    Код:
            Collection<ItemStack> stacks = e.getBlock().getDrops(e.getPlayer().getInventory().getItemInMainHand());
            for(ItemStack stack : stacks) {
                e.getPlayer().getInventory().addItem(stack);
            }
            e.setCancelled(true);
     
  4. Автор темы
    pro100koder

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

    Баллы:
    76
    Спасибо большое) Тема закрыта.
     
  5. Автор темы
    pro100koder

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

    Баллы:
    76
    Так-с... Мои тестеры нашли баг. Блоки из привата дропаются, и не ломаются. Крч дюп...
     
  6. Dgarmos

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

    Баллы:
    61
    Все обиды в жизни за 5 минут.
     
  7. Exception_Prototype

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

    Баллы:
    96
    проверяй отмену эвента
     
  8. Автор темы
    pro100koder

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

    Баллы:
    76
    Ну простите, не создавать же тему по почти той же проблеме...
     
  9. Автор темы
    pro100koder

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

    Баллы:
    76
    e.isCancelled()? Окей, ща попробую... Так вот, зачем это создано)
     
  10. Dgarmos

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

    Баллы:
    61
    Ну пока не проверил - не писать.)
     
  11. Автор темы
    pro100koder

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

    Баллы:
    76
    Ну, раз уж написал, то как-то автоматизовать поддержку шёлка/удачи можно? Или самому прописывать и проверять каждую травинку, камешек...
     
  12. InterWall

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

    Баллы:
    173
    Не, я понимаю ещё некропост в тему полугодовой давности критиковать, а здесь в чём проблема?
    Да, кстати, раз уж ты у нас такой старожил, что учишь других юзеров жизни, прочитай пункт 5.9 правил с пометкой "Запрещается":
    5.9. Запрещается злоупотреблять в сообщениях заглавными буквами, большими размерами шрифтов, яркими цветами (способ привлечения внимания к своим сообщениям).
     
  13. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    @EventHandler (ignoreCancelled = true)
    Должно быть почти во всех событиях, которые вам не нужно обрабатывать, если они были отменены раньше.
     
  14. Автор темы
    pro100koder

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

    Баллы:
    76
    Я про это реально не знал) Как и не знал, что в getDrops() можно вставить инструмент из руки, и не знаю, как давать именно тот дроп, который дали бы учитывая зачарования предмета... И да, я отношусь к тем "программистам", которые учатся на опыте и текущих требованиях. Я никогда не зазубривал ничего лишнего. Я всегда учу только то, что мне нужно. Зачем знать, когда в Китае сдохла муха, если ты живёшь в России? Зачем знать, как работать с блоками, если раньше ты работал с GUI? Почему бы не учить только то, что тебе нужно, и жить без знания какой-то мелочи, которая, как большинство знаний из школы/вуза и т. п., в жизни могут и не пригодиться? Моё личное мнение: учить то, что нужно, а не то, что учат все. Кхм. вернёмся к теме: мне нужно костылить и самому проверять чар, выдавая всякие предметы через свой код по-отдельности, или есть какой-то более автоматизированный способ?
     
  15. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Если ты про зачарования по типу "Удачи" то да, самому. Сначала вызывается события разрушения блока, а только потом сервер берет дроп из блока по инструменту и добавляет рандом для таких вот зачаров. Это можно увидеть, посмотрев код в ядре. Нужно симулировать все так же, как делает сервер.
     
  16. Автор темы
    pro100koder

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

    Баллы:
    76
    С шёлком так же?
     
  17. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Не уверен, скорее шелк работает на getDrops(ItemStack), но ты можешь всегда это проверить самостоятельно
     
  18. Автор темы
    pro100koder

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

    Баллы:
    76
    А, кстати, это не работает... Может быть WE обрабатывает события после моего плагина? Как указать в spigot-e порядок загрузки плагинов?
     
  19. DeethzzCoder

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

    Баллы:
    76
    Можно в plugin.yml установить какие плагины должны грузиться до и после твоего, подробнее тут - https://bukkit.gamepedia.com/Plugin_YAML/ru
     
  20. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Оно работает так как я там и написал. Без указания приоритета будет NORMAL, остальные тут:
    https://www.spigotmc.org/wiki/bbcode.1415/archive (пункт 2)
    Слушатель с LOWEST будет реагировать самым первым, с HIGHEST - самым последним. MONITOR идет после HIGHEST, но его строго не рекомендуется использовать, если нужно изменять параметры события.
     

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