- Баллы
- 61
- Имя в Minecraft
- Ratewio
Пишется библиотека, поэтому нужно много потенциала расширения.
В частности как эффективно решить данную проблему:
Нужно отслеживать BlockPlaceEvent и проверять условие к примеру if(event.getBlock().getType() == Material.DIAMOND_BLOCK){ ... } else { ... };
Если утверждение верно - то нужно обработать евент одними "фильтрами", если не верно - другими.
Представим что у нас есть "специальные блоки" и если мы их ставим - то должны проверяться одни функции, если ставим не "специальный блок" то другие функции.
!!!:
Это можно решить создав два своих класса ("SpecialTypeBlockPlace", "DefaultTypeBlockPlace")
Вызывать их, и на основе isCancelled() отменять евент или нет или делать другие действия ..
Но переписывать все евенты в org.bukkit.event.block.* долго.
Плюс вызов этих евентов - их создание, передача в конструктор всего того, что есть в евенте BlockPlaceEvent...
Можно и сделать статические списки List<Predicate> или List<Consumer>, для того, чтобы плагины могли добовлять свои "фильтры" у нашей библиотеки и она будет их обрабатывать, на основе чего отменять евент или нет или делать что-то...
но это тоже загроможденно и "не элегантно"
Что вы можете предложить.
В частности как эффективно решить данную проблему:
Нужно отслеживать BlockPlaceEvent и проверять условие к примеру if(event.getBlock().getType() == Material.DIAMOND_BLOCK){ ... } else { ... };
Если утверждение верно - то нужно обработать евент одними "фильтрами", если не верно - другими.
Представим что у нас есть "специальные блоки" и если мы их ставим - то должны проверяться одни функции, если ставим не "специальный блок" то другие функции.
!!!:
Это можно решить создав два своих класса ("SpecialTypeBlockPlace", "DefaultTypeBlockPlace")
Вызывать их, и на основе isCancelled() отменять евент или нет или делать другие действия ..
Но переписывать все евенты в org.bukkit.event.block.* долго.
Плюс вызов этих евентов - их создание, передача в конструктор всего того, что есть в евенте BlockPlaceEvent...
Можно и сделать статические списки List<Predicate> или List<Consumer>, для того, чтобы плагины могли добовлять свои "фильтры" у нашей библиотеки и она будет их обрабатывать, на основе чего отменять евент или нет или делать что-то...
но это тоже загроможденно и "не элегантно"
Что вы можете предложить.

