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

Помогите Запрет взрыва определенного блока [Решено]

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

Статус темы:
Закрыта.
  1. Автор темы
    rapitor3

    rapitor3 Активный участник

    Баллы:
    61
    Здравствуйте! Стоит цель запретить взрыв сундуков и печек. Пытался реализовать с BlockExplodeEvent и BlockBreakEvent, но по итогу всё равно выпадает. Помогите пжлст, сроки горят, с друзяшками играть хочется ;)
    Вот попытки моей реализаций:

    @EventHandler
    public void explode(BlockExplodeEvent e){
    Block block = e.getBlock();
    Material material = block.getType();
    if (material == CHEST) {
    e.isCancelled();
    e.setCancelled(true);
    }
    }

    и

    @EventHandler
    public void explode(BlockBreakEvent e){
    if (e.getBlock().getType() == CHEST) {
    e.isCancelled();
    e.setCancelled(true);
    }
    }
     
  2. Spsiska_13

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

    Баллы:
    66
    Имя в Minecraft:
    Yura2108
    Эти два ивента можно и не использовать. Всё довольно просто - EntityExplodeEvent.
    @EventHandler
    public void explode(EntityExplodeEvent e){
    for(Block b : e.blockList()){
    if(b.getType() == Material.CHEST || b.getType() == Material.FURNACE) {
    e.blockList().remove(b);
    }
    }
    }
     
  3. Автор темы
    rapitor3

    rapitor3 Активный участник

    Баллы:
    61
    Спасибо, вроде работает. Только в консоли ругается что-то.


    [23:19:08] [Server thread/ERROR]: Could not pass event EntityExplodeEvent to control v1.0 SNAPSHOT
    org.bukkit.event.EventException: null
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:320) ~[spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:529) ~[spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:514) ~[spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at net.minecraft.server.v1_15_R1.Explosion.a(Explosion.java:247) ~[spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at net.minecraft.server.v1_15_R1.World.createExplosion(World.java:854) ~[spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at net.minecraft.server.v1_15_R1.WorldServer.createExplosion(WorldServer.java:1294) ~[spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at net.minecraft.server.v1_15_R1.World.createExplosion(World.java:843) ~[spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at net.minecraft.server.v1_15_R1.EntityTNTPrimed.explode(EntityTNTPrimed.java:88) ~[spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at net.minecraft.server.v1_15_R1.EntityTNTPrimed.tick(EntityTNTPrimed.java:67) ~[spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at net.minecraft.server.v1_15_R1.WorldServer.entityJoinedWorld(WorldServer.java:626) ~[spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at net.minecraft.server.v1_15_R1.World.a(World.java:718) [spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at net.minecraft.server.v1_15_R1.WorldServer.doTick(WorldServer.java:395) [spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at net.minecraft.server.v1_15_R1.MinecraftServer.b(MinecraftServer.java:1082) [spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at net.minecraft.server.v1_15_R1.DedicatedServer.b(DedicatedServer.java:399) [spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at net.minecraft.server.v1_15_R1.MinecraftServer.a(MinecraftServer.java:984) [spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at net.minecraft.server.v1_15_R1.MinecraftServer.run(MinecraftServer.java:824) [spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_221]
    Caused by: java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(Unknown Source) ~[?:1.8.0_221]
    at java.util.ArrayList$Itr.next(Unknown Source) ~[?:1.8.0_221]
    at com.rapitor3.Handler.explode(Handler.java:74) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_221]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_221]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_221]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_221]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:316) ~[spigot-1.15.2.jar:git-Spigot-800b93f-8160e29][/QUOTE]
     
  4. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    Прикольна, ты не сможешь удалить из листа элемент, который итерируешь... Будет ConcurrentModificationException
     
  5. alexandrage

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

    Баллы:
    173
    Вот так точно можно.
    Код:
        @EventHandler
        public void on(EntityExplodeEvent e) {
            e.blockList().removeIf(block -> block.getType().equals(Material.CHEST) || block.getType().equals(Material.FURNACE));
        }
     
  6. Автор темы
    rapitor3

    rapitor3 Активный участник

    Баллы:
    61
    Спасибо друг, работает без нареканий, прям как я хотел ;)

    Объявляю тему закрытой!
     
Статус темы:
Закрыта.

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