Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: This feature may not be available in some browsers.
EntityExplodeEvent#blockList. Проходишься по каждому блоку, сравнивая его с сундуком. Если сундук, то убираешь из списка; если другой блок - ломаешь его.при взрыве динамита взрывались только определенные блоки, к примеру чтобы при взрыве взрывались только сундуки, а остальные блоки не задевало.
BlockPlaceEventкогда ты поставил динамит он сразу поджигался?
Не понял как мне призвать этот динамит? Убрать то я убрал..EntityExplodeEvent#blockList. Проходишься по каждому блоку, сравнивая его с сундуком. Если сундук, то убираешь из списка; если другой блок - ломаешь его.
Посмотреть реализацию можно, например, здесь:
Авторизуйтесь для просмотра ссылок.
BlockPlaceEvent
Если поставили динамит, то убираешь этот блок (setType(Material.AIR)) и призываешь на том месте динамит.
Можно примерный код?
TNTPrimed tnt = event.getBlock().getWorld().spawnEntity(event.getBlock().getLocation().add(0.5, 0, 0.5), EntityType.PRIMED_TNT);
tnt.setSource(Игрок);
tnt.setFuseTicks(через сколько тиков произойдёт бабах);
EntityExplodeEvent#blockList. Проходишься по каждому блоку, сравнивая его с сундуком. Если сундук, то убираешь из списка; если другой блок - ломаешь его.
Посмотреть реализацию можно, например, здесь:
Авторизуйтесь для просмотра ссылок.
@EventHandler
public void onExplode(EntityExplodeEvent event) {
List<Block> bl = new ArrayList<>(event.blockList());
for (Block b : bl)
if (b.getType() != Material.CHEST) {
event.setCancelled(true);
if (b.getType() == Material.CHEST) {
event.setCancelled(false);
Извиняюсь за мою возможно тупость, все мы учимсяВо-первых, event.setCancelled отменяет весь ивент взрыва.
Во-вторых, тебе надо оставлять/убирать из списка блоки, которые (не) надо взрывать.
В-третьих, Iterator используй, иначе ошибки поплывут (Пример не просто так скидывал).
"List<Block> bl = new ArrayList<>(event.blockList());" создаст новый список, вам нужно использовать старый "List<Block> bl = event.blockList();".Извиняюсь за мою возможно тупость, все мы учимся
Я не понял как мне убирать со списка или оставлять блоки, в примере он берет строки из конфига насколько я понимаю, а как мне обозначить четкие предметы именно в коде?
//bl - список блоков, которые взрываются
//block - одно значение из списка bl
//switch для каждого блока
switch (block.getType()){ // Получить материал блока
case CHEST: //Материалы блоков (которые мы оставляем в списке и взрываем их)
case TRAPPED_CHEST:
break; //Остановка выполнения switch если материал соответствует одному из блока
default: //Все остальные материалы блоков
bl .remove(block); //Удаляем из списка блоков, которые должны не взрываться
}
//if для каждого блока
if(block.getType() != Material.CHEST)
blocks.remove(block);
}
при взрыве взрывались только сундуки, а остальные блоки не задевало.
@EventHandler
public void onEntityExplode(EntityExplodeEvent e) {
e.blockList().removeIf(block -> block.getState() instanceof Chest);
}
bl .remove(block); /
ConcurrentModificationException не вылезет?().removeIf(bl
Так получается внести только 1 блок, я чуть поменял кодJava:@EventHandler public void onEntityExplode(EntityExplodeEvent e) { e.blockList().removeIf(block -> block.getState() instanceof Chest); }
List<Block> bloc = event.blockList();
bloc.removeIf(block -> block.getType() != Material.CHEST);
List<Block> bloc = event.blockList();
bloc.removeIf(block -> block.getType() != Material.CHEST);
bloc.removeIf(block -> block.getType() != Material.ACACIA_DOOR);
Так получается внести только 1 блок, я чуть поменял код
Но при добавлении 2 блока ничего не происходитJava:List<Block> bloc = event.blockList(); bloc.removeIf(block -> block.getType() != Material.CHEST);
![]()
private final List<Material> materials = List.of(Material.CHEST, Material.FURNACE);
@EventHandler
public void onBlockExplode(EntityExplodeEvent e) {
e.blockList().removeIf(block -> materials.contains(block.getType()));
}
Мы используем основные cookies для обеспечения работы этого сайта, а также дополнительные cookies для обеспечения максимального удобства пользователя.
Посмотрите дополнительную информацию и настройте свои предпочтения