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

Помогите Разрабатываю плагин на тнт

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    Krong
    ВОобщем делаю разные тнт, но не суть, мне надо на обычный тнт, как разрешить обычному тнт при взрыве взрывать сам обсидиан?
    Вот пробовал код:

    @EventHandler
    public void onBahaet(final PlayerInteractEvent e) {
    if (e.getClickedBlock() != null) {
    for (final TNT tnt : CustomTnT.getInstance().tnts) {
    if (e.getClickedBlock().getX() == tnt.getLocation().getBlockX() && e.getClickedBlock().getX() == tnt.getLocation().getBlockY() && e.getClickedBlock().getZ() == tnt.getLocation().getBlockZ()) {
    System.out.println(tnt.isObsidian());
    if (e.getItem() == null || e.getItem().getType() != Material.LEGACY_FLINT_AND_STEEL) {
    continue;
    }
    final TNT tnt2;
    final Iterator<Block> iterator2;
    Block block;
    final Iterator<Entity> iterator3;
    Entity entity;
    Bukkit.getServer().getScheduler().runTaskLater((Plugin)CustomTnT.getInstance(), () -> {
    if (tnt2.isObsidian()) {
    this.getBlocksInRadius(tnt2.getLocation(), tnt2.getRadius()).iterator();
    while (iterator2.hasNext()) {
    block = iterator2.next();
    if (block.getType() == Material.OBSIDIAN) {
    block.setType(Material.AIR);
    }
    }
    }
    if (tnt2.isKill()) {
    e.getPlayer().getNearbyEntities((double)tnt2.getRadius(), (double)tnt2.getRadius(), (double)tnt2.getRadius()).iterator();
    while (iterator3.hasNext()) {
    entity = iterator3.next();
    if (entity instanceof Player && entity != e.getPlayer()) {
    ((Player)entity).setHealth(0.0);
    }
    }
    }
    }, 80L);
    }
    }
    }
    }
     
  2. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Используй кнопку вставки кода, чтобы твой код нормально отображался.

    Я предлагаю решить твою задачу примерно так:
    PHP:
        @EventHandler
        
    private void onBlockExplode(final BlockExplodeEvent event) {
            
    Block tntBlock event.getBlock();
            if (!(
    tntBlock.getBlockData() instanceof TNT)) return;
            
    // TODO Добавить проверку на то, должен ли этот блок взрывать обсидиан

            
    World world tntBlock.getWorld();
            
    int radius 5// Радиус взрыва

            
    for (int x tntBlock.getX() - radiustntBlock.getX() + radiusx++) {
                for (
    int y tntBlock.getY() - radiustntBlock.getY() + radiusy++) {
                    for (
    int z tntBlock.getZ() - radiustntBlock.getZ() + radiusz++) {
                        
    Block radiusBlock world.getBlockAt(xyz);
                        if (
    radiusBlock.getType() == Material.OBSIDIAN) {
                            
    event.blockList().add(radiusBlock);
                        }
                    }
                }
            }
        }
     
  3. Автор темы
    Krongss_fur

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

    Баллы:
    76
    Имя в Minecraft:
    Krong
    Спасибо, потом проверю
     
  4. ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    вот я сделал, но обсидиан не взрываеться:
    @EventHandler
    public void onExplode(BlockExplodeEvent event) {
    Block tntblock = event.getBlock();
    int radiusexplode = 3;
    World world = tntblock.getWorld();
    if(tntblock.getBlockData() instanceof TNT) {
    for (int x = tntblock.getX() - radiusexplode; x < tntblock.getX() + radiusexplode; x++) {
    for (int y = tntblock.getY() - radiusexplode; y < tntblock.getY() + radiusexplode; y++) {
    for (int z = tntblock.getZ() - radiusexplode; z < tntblock.getZ() + radiusexplode; z++) {
    Block radiusBlock = world.getBlockAt(x, y, z);
    if (radiusBlock.getType() == Material.OBSIDIAN) {
    event.blockList().add(radiusBlock);

    }
    }
    }
    }
    }
    }
     

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