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

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

Discussion in 'Разработка плагинов для новичков' started by musel70, Aug 12, 2013.

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

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

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

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

    Trophy Points:
    78
    Skype:
    rines_skype
    Имя в Minecraft:
    RinesThaix
    Code:
    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 likes this.

Share This Page