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

pro100koder

Активный участник
Пользователь
Баллы
76
В общем, знаете, как на prison-е с кристаликса вещички сразу в инвентарь дропаются? Так вот: я сделал нечто такое же. Но проблема: даже если ты сломаешь камень лопатой, он выпадет. Как же нам это пофиксить кроме костылей, аля "если у игрока в руке кирка..."?
Код:
for(ItemStack item:e.getBlock().getDrops()){
            p.getInventory().addItem(item);
        }
//сам дроп с ивента BrekBlock.
 
Код:
        Collection<ItemStack> stacks = e.getBlock().getDrops(e.getPlayer().getInventory().getItemInMainHand());
        for(ItemStack stack : stacks) {
            e.getPlayer().getInventory().addItem(stack);
        }
        e.setCancelled(true);
 
Так-с... Мои тестеры нашли баг. Блоки из привата дропаются, и не ломаются. Крч дюп...
 
Ну пока не проверил - не писать.)
Ну, раз уж написал, то как-то автоматизовать поддержку шёлка/удачи можно? Или самому прописывать и проверять каждую травинку, камешек...
 
Все обиды в жизни за 5 минут.

Ну пока не проверил - не писать.)
Не, я понимаю ещё некропост в тему полугодовой давности критиковать, а здесь в чём проблема?
Да, кстати, раз уж ты у нас такой старожил, что учишь других юзеров жизни, прочитай пункт 5.9 правил с пометкой "Запрещается":
5.9. Запрещается злоупотреблять в сообщениях заглавными буквами, большими размерами шрифтов, яркими цветами (способ привлечения внимания к своим сообщениям).
 
@EventHandler (ignoreCancelled = true)
Должно быть почти во всех событиях, которые вам не нужно обрабатывать, если они были отменены раньше.
 
@EventHandler (ignoreCancelled = true)
Должно быть почти во всех событиях, которые вам не нужно обрабатывать, если они были отменены раньше.
Я про это реально не знал) Как и не знал, что в getDrops() можно вставить инструмент из руки, и не знаю, как давать именно тот дроп, который дали бы учитывая зачарования предмета... И да, я отношусь к тем "программистам", которые учатся на опыте и текущих требованиях. Я никогда не зазубривал ничего лишнего. Я всегда учу только то, что мне нужно. Зачем знать, когда в Китае сдохла муха, если ты живёшь в России? Зачем знать, как работать с блоками, если раньше ты работал с GUI? Почему бы не учить только то, что тебе нужно, и жить без знания какой-то мелочи, которая, как большинство знаний из школы/вуза и т. п., в жизни могут и не пригодиться? Моё личное мнение: учить то, что нужно, а не то, что учат все. Кхм. вернёмся к теме: мне нужно костылить и самому проверять чар, выдавая всякие предметы через свой код по-отдельности, или есть какой-то более автоматизированный способ?
 
Я про это реально не знал) Как и не знал, что в getDrops() можно вставить инструмент из руки, и не знаю, как давать именно тот дроп, который дали бы учитывая зачарования предмета... И да, я отношусь к тем "программистам", которые учатся на опыте и текущих требованиях. Я никогда не зазубривал ничего лишнего. Я всегда учу только то, что мне нужно. Зачем знать, когда в Китае сдохла муха, если ты живёшь в России? Зачем знать, как работать с блоками, если раньше ты работал с GUI? Почему бы не учить только то, что тебе нужно, и жить без знания какой-то мелочи, которая, как большинство знаний из школы/вуза и т. п., в жизни могут и не пригодиться? Моё личное мнение: учить то, что нужно, а не то, что учат все. Кхм. вернёмся к теме: мне нужно костылить и самому проверять чар, выдавая всякие предметы через свой код по-отдельности, или есть какой-то более автоматизированный способ?
Если ты про зачарования по типу "Удачи" то да, самому. Сначала вызывается события разрушения блока, а только потом сервер берет дроп из блока по инструменту и добавляет рандом для таких вот зачаров. Это можно увидеть, посмотрев код в ядре. Нужно симулировать все так же, как делает сервер.
 
Если ты про зачарования по типу "Удачи" то да, самому. Сначала вызывается события разрушения блока, а только потом сервер берет дроп из блока по инструменту и добавляет рандом для таких вот зачаров. Это можно увидеть, посмотрев код в ядре. Нужно симулировать все так же, как делает сервер.
С шёлком так же?
 
@EventHandler (ignoreCancelled = true)
Должно быть почти во всех событиях, которые вам не нужно обрабатывать, если они были отменены раньше.
А, кстати, это не работает... Может быть WE обрабатывает события после моего плагина? Как указать в spigot-e порядок загрузки плагинов?
 
А, кстати, это не работает... Может быть WE обрабатывает события после моего плагина? Как указать в spigot-e порядок загрузки плагинов?
Оно работает так как я там и написал. Без указания приоритета будет NORMAL, остальные тут:
https://www.spigotmc.org/wiki/bbcode.1415/archive (пункт 2)
Слушатель с LOWEST будет реагировать самым первым, с HIGHEST - самым последним. MONITOR идет после HIGHEST, но его строго не рекомендуется использовать, если нужно изменять параметры события.
 
Назад
Верх