Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

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

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

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

    Баллы:
    88
    Народ, подскажите, как сделать так, чтобы разрушенная руда заменяется на бедрок, а через 10 сек опять становилась рудой.
     
  2. Хостинг MineCraft
    <
  3. Ukedrethose

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

    Баллы:
    78
    Skype:
    rines_skype
    Имя в Minecraft:
    RinesThaix
    Код:
    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, его оптимизировать нужно. Этот будет хорошо сервер грузить.
     
    musel70 нравится это.

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