Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Регенерация руды

musel70

Активный участник
Пользователь
Баллы
88
Народ, подскажите, как сделать так, чтобы разрушенная руда заменяется на бедрок, а через 10 сек опять становилась рудой.
 
Код:
public HashMap<Location, Long> blocks_reset_timer = new HashMap<Location, Long>(); // Храним локацию блока и время, когда его сломали
public HashMap<Location, Integer> blocks_reset_ids = new HashMap<Location, Integer>(); // Храним локацию блока и его ид
public HashMap<Integer, Location> blocks_to_reset = new HashMap<Integer, Location>(); // Храним номер блока (у каждого восстанавливаемого этим кодом блока должен быть свой номер) и его локацию
public int reset_time = 10; // Время восстановления в секундах
 
@EventHandler
public void onBlockBreak(BlockBreakEvent e) {
    if(blocks_to_reset.containsValue(e.getBlock().getLocation()) {
        e.getBlock().setTypeId(7); // Ставим на место блока админиум
        blocks_reset_timer.put(e.getBlock().getLocation(), System.currentTimeMillis()); // Заносим данные о времени разрушения
    }
}
 
@Override
public void onEnable() {
    getServer().getPluginManager().registerEvents(this, this);
    Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() { // Создаем таймер
        Iterator<Location> iterator = blocks_to_reset.iterator(); // Итератор для перебора значений хешмапа
        while(iterator.hasNext()) {
            Location loc = iterator.next();
            long break_time = blocks_reset_timer.get(loc);
            if((break_time + (reset_time * 1000)) - System.currentTimeMillis() < 0) { // Если 10 секунд прошло..
                blocks_reset_timer.remove(loc); // Удаляем данные о разрушении блока
                loc.getBlock().setTypeId(blocks_reset_ids.get(loc)); // Восстанавливаем блок
            }
        }
    }, 0, 20); // 20 - 1 секунда.
}


Написал минут за 20, его оптимизировать нужно. Этот будет хорошо сервер грузить.
 

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

Назад
Верх