1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Работа с BukkitRunnable

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

  1. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Че за 42?
     
  2. Cookie1337

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

    Баллы:
    66
    upload_2018-1-8_23-2-18.png
     
  3. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
  4. InterWall

    InterWall Старожил Пользователь

    Баллы:
    173
    Единственное 42 которое я знаю — ответ на вопрос жизни, вселенной и вообще.
     
  5. Автор темы
    Hittcliff

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

    Баллы:
    66
    Имя в Minecraft:
    Relion128
    Я попробовал использовать Maven но ошибки...
    upload_2018-1-9_12-12-38.png
     
  6. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    1. Ты извлёк все файлы из архива? У тебя ошибка, что нет одного класса, MovingPlayersCatcher. Ааа, и Area тоже нету.
    Извлекай всё.
    2. Не надо было конечно подсовывать тебе Ломбок ... Ок, в классе Area убери все аннотации ( @ ), напиши сам конструктор и геттеры (методы вида getXPos1() и т.п.), в общем все, чего не хватает
     
    Последнее редактирование: 9 янв 2018
  7. Автор темы
    Hittcliff

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

    Баллы:
    66
    Имя в Minecraft:
    Relion128
    Я извлёк все файлы. Сейчас убрал все аннотаций из всех классов, ошибок меньше стало но остались..
    upload_2018-1-9_14-5-48.png Я
     
  8. Автор темы
    Hittcliff

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

    Баллы:
    66
    Имя в Minecraft:
    Relion128
    Хотя нет... так-же 28 ошибок и осталось, после сохранения все ошибки вернулись.
     
  9. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Читай ошибку: The method is undefined for the type Area (в классе Area нет метода getZ2).
    Я поэтому и сказал:
     
  10. Exception_Prototype

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

    Баллы:
    96
    На самом деле надо было давно уже сделать плагин-хелпер, который кидал бы нормально эвенты о входе и выходе игрока в/из приватов WG, а потом уже от него и отталкиваться.
     
  11. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Так есть такое уже
     
  12. Exception_Prototype

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

    Баллы:
    96
    И чё там? Годно? Линканёшь?
     
  13. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
  14. Exception_Prototype

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

    Баллы:
    96
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Годно, пока у тебя не овердохрена регионов, дальше пойдет просядка тпс.
     
  16. Exception_Prototype

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

    Баллы:
    96
    Есть варианты лучше?
     
  17. Автор темы
    Hittcliff

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

    Баллы:
    66
    Имя в Minecraft:
    Relion128
    Я нашёл немного другое решение. Немного тупое, но рабочее. Пишу вдруг кому надо будет.

    И так, я оставил цикл и т.п всё как есть, за одним исключением, т.е внутри цикла мы проверяем где игрок и если игрок попал в территорию т.е останавливать цикл и передавать сигнал другому классу, который работает с таймером, как только таймер отсчитывает нужное кол-во мы останавливаем его и снова отправляем на повторный запуск первого цикла:

    Код:
        @EventHandler
        public void OnJoin(PlayerJoinEvent event) {
    
            FileConfiguration config = getConfig();
    
            Player player = event.getPlayer();
    
            String name = player.getName();
            player.sendMessage(ChatColor.BLUE + "[DCore]: Запуск...");
            config.set(name + ".position.x: " + "pos1", "0");
            config.set(name + ".position.y: " + "pos1", "0");
            config.set(name + ".position.z: " + "pos1", "0");
            config.set(name + ".position.x: " + "pos2", "0");
            config.set(name + ".position.y: " + "pos2", "0");
            config.set(name + ".position.z: " + "pos2", "0");
    
            config.set("settings.dev", 1); // Режим разработчика
    
            saveConfig();
    
            int timer = Integer.parseInt(getConfig().getString("array.time")) * 20;
    
            new BukkitRunnable() {
                int rec = 0;
                int rec3 = Integer.parseInt(getConfig().getString("array.value"));
    
                List<String> list = config.getStringList("array.dir");
                String[] array = list.toArray(new String[0]);
    
               
                @Override
                public void run() {
                    if (rec == rec3 || rec > rec3) {
                        rec = 0;
                    } else {
                        // Позиция 1
                        int[] valueX = new int[rec3];
                        valueX[rec] = Integer.parseInt(getConfig().getString("swarp." + array[rec] + ".x: " + "pos1"));
    
                        int[] valueY = new int[rec3];
                        valueY[rec] = Integer.parseInt(getConfig().getString("swarp." + array[rec] + ".y: " + "pos1"));
    
                        int[] valueZ = new int[rec3];
                        valueZ[rec] = Integer.parseInt(getConfig().getString("swarp." + array[rec] + ".z: " + "pos1"));
    
                        // Позиция 2
                        int[] valueXX = new int[rec3];
                        valueXX[rec] = Integer.parseInt(getConfig().getString("swarp." + array[rec] + ".x: " + "pos2"));
    
                        int[] valueYY = new int[rec3];
                        valueYY[rec] = Integer.parseInt(getConfig().getString("swarp." + array[rec] + ".y: " + "pos2"));
    
                        int[] valueZZ = new int[rec3];
                        valueZZ[rec] = Integer.parseInt(getConfig().getString("swarp." + array[rec] + ".z: " + "pos2"));
                        Location b = player.getLocation(); // Создаём переменную!
    
                        if (b.getX() > valueX[rec] && b.getX() < valueXX[rec]) {
                            if (b.getY() > valueY[rec] && b.getY() < valueYY[rec]) {
                                if (b.getZ() > valueZ[rec] && b.getZ() < valueZZ[rec]) {
                                        tested(event, array[rec]);
                                        player.sendMessage(ChatColor.BLUE + "[DCore]: Остановка..."); //Для проверки этапа выводил в чат
                                        cancel(); //Делаем остановку цикла
                                }
                            }
                        }
                        rec++;
                    }
                }
            }.runTaskTimer(this, 0L, timer);
        }
    
    далее в tested
    Код:
        public void tested(PlayerJoinEvent event, String vois) {
            Player player = event.getPlayer();
    
            // Позиция 1
            int SettinX1 = getConfig().getInt("swarp." + vois + ".x: " + "pos1");
            int SettinY1 = getConfig().getInt("swarp." + vois + ".y: " + "pos1");
            int SettinZ1 = getConfig().getInt("swarp." + vois + ".z: " + "pos1");
    
            // Звук
            String SettinS = getConfig().getString(".swarp." + "." + vois + ".sound:");
            String master = getConfig().getString(".swarp." + "." + vois + ".category:");
            int Volume = Integer.parseInt(getConfig().getString(".swarp." + "." + vois + ".sound-volume:")); // Громкость
    
            getServer().dispatchCommand(getServer().getConsoleSender(), "playsound " + SettinS + " " + master + " "
                    + player.getName() + " " + SettinX1 + " " + SettinY1 + " " + SettinZ1 + " " + Volume);
            player.sendMessage(ChatColor.BLUE + "[DCore]: Вы на терреторий: " + vois);
            player.sendMessage(ChatColor.BLUE + "[DCore]: Играет:  " + SettinS);
    
    
           
            new BukkitRunnable() {
                int rec = 0; //Начальное кол-во
                int interTimer = Integer.parseInt(getConfig().getString(".swarp." + "." + vois + ".sound-time:")); //Берём из конфига через сколько повторять действие тут
    
                @Override
                public void run() {
                    if (rec == interTimer) {
                        player.sendMessage(ChatColor.BLUE + "[DCore]: Перезапуск..."); //Для себя сообщение
                        cancel(); //Останавливаем таймер
                        OnJoin(event); //Запускаем снова OnJoin
                    }
                    rec++;
                }
            }.runTaskTimer(this, 0L, 20); //Задержка 1 секунда
        }
    }
    
    В чём плюс этого для меня, во первых настройка процесса достаточно гибкая, второе что для меня важно это первый запуск скрипта происходит сразу после захода игрока в зону и повторный запуск скрипта через указанное время. Знаю что скрипт очень фиговый, но я пока что очень херовый говнокодер, да и допедрил до идеи такой случайно.
     
    Последнее редактирование: 11 янв 2018
  18. Автор темы
    Hittcliff

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

    Баллы:
    66
    Имя в Minecraft:
    Relion128
    Спасибо всем кто помогал на форуме, я ценю вашу помощь!
     
  19. Автор темы
    Hittcliff

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

    Баллы:
    66
    Имя в Minecraft:
    Relion128
    Слушай, теперь вопрос по другой части. Есть основной файл config.yml как допустим для определённой команды делай свой конфиг файл...
     
  20. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173

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