Войти или зарегистрироваться

Помогите Как проверять, в ивенте, нужный ли взрываеться тнт?

  • Автор темы Автор темы ItsWay
  • Дата начала Дата начала

ItsWay

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
ItsWay
Всем привет, интересует тем, как проверить в ивенте ExplodeEntityEvent был ли взорван определённый тнт который добавляется в игру с помощью этого класса
public class TntManager {

private system plugin;

ItemManager (system plugin) {

this.plugin = plugin;

}

public static ItemStack tnt1;

public static void init() {

Createtnt1();
}

private static void Createtnt1() {
ItemStack item = new ItemStack(Material.TNT, 1);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName("TNT TIER 1");
List<String> lore = new ArrayList<>();
lore.add("Bahaet 10 na 10");
lore.add("Prikol, on bahaet obsidian)");
meta.setLore(lore);
item.setItemMeta(meta);
tnt1 = item;
}
}
Очень нужна помощь.
 
1. abuse static.
2. проверка с помощью ХэшМапы. Добавляешь нужный тнт в карту и после проверяешь по той карте, взорвался ли тот тнт или нет.
 
1. abuse static.
2. проверка с помощью ХэшМапы. Добавляешь нужный тнт в карту и после проверяешь по той карте, взорвался ли тот тнт или нет.
А можно как то из ивента получить сам тнт который взрывается и сравнить его с тнт который я добавил в материалы?
 
А можно как то из ивента получить сам тнт который взрывается и сравнить его с тнт который я добавил в материалы?
написала же про мапу. Ты уже добавил по лору в мапу, можешь по ней и сравнивать, тот ли это тнт или нет.

List<String> lore = new ArrayList<>();
lore.add("Bahaet 10 na 10");
lore.add("Prikol, on bahaet obsidian)");
 
написала же про мапу. Ты уже добавил по лору в мапу, можешь по ней и сравнивать, тот ли это тнт или нет.

List<String> lore = new ArrayList<>();
lore.add("Bahaet 10 na 10");
lore.add("Prikol, on bahaet obsidian)");
ок, спс
 
написала же про мапу. Ты уже добавил по лору в мапу, можешь по ней и сравнивать, тот ли это тнт или нет.

List<String> lore = new ArrayList<>();
lore.add("Bahaet 10 na 10");
lore.add("Prikol, on bahaet obsidian)");
Я извиняюсь, у меня не складываеться, можешь на коде накидать?
 
написала же про мапу. Ты уже добавил по лору в мапу, можешь по ней и сравнивать, тот ли это тнт или нет.

List<String> lore = new ArrayList<>();
lore.add("Bahaet 10 na 10");
lore.add("Prikol, on bahaet obsidian)");
Можешь в виде кода скинуть? Я никогда не работал с HashMap, для меня это ещё не изученный этап
 
Если нужно, чтобы ТНТ определялся даже после перезагрузки плагина/сервера, то придется хранить информацию о ТНТ на диске или в базе данных.
С версии 1.14+ можно хранить в PersistentDataContainer чанков
 
Если нужно, чтобы ТНТ определялся даже после перезагрузки плагина/сервера, то придется хранить информацию о ТНТ на диске или в базе данных.
С версии 1.14+ можно хранить в PersistentDataContainer чанков
Ты уже один раз челику одному я видел помогал, переделывал в виде ивента взрыва блока, но он не работает, потому что ты не учёл что tnt это тоже entity, я провернул махинацию на примере простого тнт с ивентом EntityExplodeEvent, получилось вот так.
Код:
    public void onExplode(EntityExplodeEvent e) {
        FileConfiguration config = plugin.getConfig();
        int radiusexplode = config.getInt("configurations.tnt`s.standart_tnt.explode-obsidian-radius");
        World world = e.getEntity().getWorld();
        if (e.getEntityType() == EntityType.PRIMED_TNT) {
            for (int x = e.getEntity().getLocation().getBlockX() - radiusexplode; x < e.getEntity().getLocation().getBlockX() + radiusexplode; x++) {
                for (int y = e.getEntity().getLocation().getBlockY() - radiusexplode; y < e.getEntity().getLocation().getBlockY() + radiusexplode; y++) {
                    for (int z = e.getEntity().getLocation().getBlockZ() - radiusexplode; z < e.getEntity().getLocation().getBlockZ() + radiusexplode; z++) {
                        Block radiusBlock = world.getBlockAt(x, y, z);
                       if(config.getBoolean("configurations.tnt`s.standart_tnt.explode-obsidian") == true) {           
                        if(radiusBlock.getType() == Material.OBSIDIAN) {
                            e.blockList().add(radiusBlock);
                            Bukkit.broadcast("Succesfully", null);
                            return;
                        }
                       }
                       if(config.getBoolean("configurations.tnt`s.standart_tnt.explode-obsidian") == false) {
                           e.blockList().remove(radiusBlock);
                       }
                    }
                }
            }
    }
    }
Это с обычным тнт, но вопрос, как сделать это с тнт который я сам добавил через ItemMeta?
 
Ты уже один раз челику одному я видел помогал, переделывал в виде ивента взрыва блока, но он не работает, потому что ты не учёл что tnt это тоже entity, я провернул махинацию на примере простого тнт с ивентом EntityExplodeEvent, получилось вот так.
Код:
    public void onExplode(EntityExplodeEvent e) {
        FileConfiguration config = plugin.getConfig();
        int radiusexplode = config.getInt("configurations.tnt`s.standart_tnt.explode-obsidian-radius");
        World world = e.getEntity().getWorld();
        if (e.getEntityType() == EntityType.PRIMED_TNT) {
            for (int x = e.getEntity().getLocation().getBlockX() - radiusexplode; x < e.getEntity().getLocation().getBlockX() + radiusexplode; x++) {
                for (int y = e.getEntity().getLocation().getBlockY() - radiusexplode; y < e.getEntity().getLocation().getBlockY() + radiusexplode; y++) {
                    for (int z = e.getEntity().getLocation().getBlockZ() - radiusexplode; z < e.getEntity().getLocation().getBlockZ() + radiusexplode; z++) {
                        Block radiusBlock = world.getBlockAt(x, y, z);
                       if(config.getBoolean("configurations.tnt`s.standart_tnt.explode-obsidian") == true) {          
                        if(radiusBlock.getType() == Material.OBSIDIAN) {
                            e.blockList().add(radiusBlock);
                            Bukkit.broadcast("Succesfully", null);
                            return;
                        }
                       }
                       if(config.getBoolean("configurations.tnt`s.standart_tnt.explode-obsidian") == false) {
                           e.blockList().remove(radiusBlock);
                       }
                    }
                }
            }
    }
    }
Это с обычным тнт, но вопрос, как сделать это с тнт который я сам добавил через ItemMeta?
А не с обычным тнт
 
А не с обычным тнт
Если брать конкретно твой код, то при установке блока ТНТ необходимо добавлять его в конфиг в том случае, если на предмете в руке есть подходящая ItemMeta
 
Звучит сложно.. Не мой уровень. Тема закрыта.
 
1. abuse static.
2. проверка с помощью ХэшМапы. Добавляешь нужный тнт в карту и после проверяешь по той карте, взорвался ли тот тнт или нет.
Можно по подробней, в ивенте взорвался тнт в хеш мапе проверять? И как изменять значение? При каком действие всмысле изменять?
 
Назад
Верх