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

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);
}
}
}
}
 
Используй кнопку вставки кода, чтобы твой код нормально отображался.

Я предлагаю решить твою задачу примерно так:
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() - radius; x < tntBlock.getX() + radius; x++) {
            for (int y = tntBlock.getY() - radius; y < tntBlock.getY() + radius; y++) {
                for (int z = tntBlock.getZ() - radius; z < tntBlock.getZ() + radius; z++) {
                    Block radiusBlock = world.getBlockAt(x, y, z);
                    if (radiusBlock.getType() == Material.OBSIDIAN) {
                        event.blockList().add(radiusBlock);
                    }
                }
            }
        }
    }
 
Используй кнопку вставки кода, чтобы твой код нормально отображался.

Я предлагаю решить твою задачу примерно так:
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() - radius; x < tntBlock.getX() + radius; x++) {
            for (int y = tntBlock.getY() - radius; y < tntBlock.getY() + radius; y++) {
                for (int z = tntBlock.getZ() - radius; z < tntBlock.getZ() + radius; z++) {
                    Block radiusBlock = world.getBlockAt(x, y, z);
                    if (radiusBlock.getType() == Material.OBSIDIAN) {
                        event.blockList().add(radiusBlock);
                    }
                }
            }
        }
    }
Спасибо, потом проверю
 
вот я сделал, но обсидиан не взрываеться:
@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);

}
}
}
}
}
}
 
Назад
Верх