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

Hittcliff

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
Relion128
Мне нужно дабы код:

Код:
                    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]);
                            }
                        }
                        rec++;
                    }

выполнялась с другой задержкой, т.е эта часть кода находится в цикле (ниже фул код), и нужно чтобы конкретно этот код что указан выше работал с другой задержкой, допустим выполнился цикл фул кода, но т.к у кода выше другая задержка он не запускается вплодь до тех пор пока не закончится его цикл, ну или просто сделать задержку...



Код:
        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]);
                            }
                        }
                        rec++;
                    } //До сюда нужно делать задержку, дабы он работал с другой задержкой... Эта работает раз в 60 секунд..
                }
            }
        }.runTaskTimer(this, 0L, timer); //Эта допустим работает раз в 3 секунды..
Я пытался делить на классы, но суть такова, что код выше в любом случае обращается каждые 3 секунды, хотя мне нужно чтобы он делал это с задержкой в 60 секунд.


Для примера tested к которому обращается код выше:

Код:
 public void tested(PlayerJoinEvent event, String vois) {
        Player player = event.getPlayer();
        player.sendMessage(ChatColor.BLUE + "[DCore]: Вы на территорий: " + vois);
    }

Ах да, почему я просто не укажу основному циклу 60 секунд? Да просто потому, что он каждые 3 секунды ищет игрока, и если находит то должен выполнять действие с задержкой, например запускается песня, и дабы это песня каждые 3 секунды снова - снова - снова не включалась, нужно чтобы была задержка в цикле.
 
Да, за пределами, например в теле главного класса. Я себе это представляю как
Map<Player, Area> playersPerAreas = new HashMap<>().
Да, так где у тебя "..." проверять, что текущая зона отличается от предыдущей (которой может не быть):
playersPerAreas.get(player) != area
(!= для наглядности, но лучше использовать equals).
 
Да, за пределами, например в теле главного класса. Я себе это представляю как
Map<Player, Area> playersPerAreas = new HashMap<>().
Да, так где у тебя "..." проверять, что текущая зона отличается от предыдущей (которой может не быть):
playersPerAreas.get(player) != area
(!= для наглядности, но лучше использовать equals).

Код:
    @EventHandler
    public void OnJoin(PlayerJoinEvent event) {

        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]);
            HashMap<Player, Area> playersPerAreas = new HashMap<>();
           
            @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]);
                                   
                                    playersPerAreas.get(player).equals(valueXX[rec]);
                                   
                            }
                        }
                    }
                    rec++;
                }
            }
        }.runTaskTimer(this, 0L, timer);
    }

Вот второй класс
Код:
    public void tested(PlayerJoinEvent event, String vois) {
        Player player = event.getPlayer();

        // Позиция 1
        int SettinX1 = Integer.parseInt(getConfig().getString("swarp." + vois + ".x: " + "pos1"));
        int SettinY1 = Integer.parseInt(getConfig().getString("swarp." + vois + ".y: " + "pos1"));
        int SettinZ1 = Integer.parseInt(getConfig().getString("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);

    }

Вот весь класс, я уже не знаю...
 
Просто дабы более понятно было что да как у меня устроен код... реально, я чувствую себя дэбилом, причём конченным)
 
Просто дабы более понятно было что да как у меня устроен код... реально, я чувствую себя дэбилом, причём конченным)
Во всю суть происходящего вчитываться пока что не буду(позже), но вот это поправлю сейчас:
PHP:
//This
int SettinX1 = Integer.parseInt(getConfig().getString("swarp." + vois + ".x: " + "pos1"));
int SettinY1 = Integer.parseInt(getConfig().getString("swarp." + vois + ".y: " + "pos1"));
int SettinZ1 = Integer.parseInt(getConfig().getString("swarp." + vois + ".z: " + "pos1"));
//To:
int SettinX1 = getConfig().getInt("swarp." + vois + ".x: " + "pos1");
int SettinY1 = getConfig().getInt("swarp." + vois + ".y: " + "pos1");
int SettinZ1 = getConfig().getInt("swarp." + vois + ".z: " + "pos1");
 
Во всю суть происходящего вчитываться пока что не буду(позже), но вот это поправлю сейчас:
PHP:
//This
int SettinX1 = Integer.parseInt(getConfig().getString("swarp." + vois + ".x: " + "pos1"));
int SettinY1 = Integer.parseInt(getConfig().getString("swarp." + vois + ".y: " + "pos1"));
int SettinZ1 = Integer.parseInt(getConfig().getString("swarp." + vois + ".z: " + "pos1"));
//To:
int SettinX1 = getConfig().getInt("swarp." + vois + ".x: " + "pos1");
int SettinY1 = getConfig().getInt("swarp." + vois + ".y: " + "pos1");
int SettinZ1 = getConfig().getInt("swarp." + vois + ".z: " + "pos1");
Ты бы ему конфиг исправил, чтобы нормально хранилось.
 
Посмотрел.
Читаем СРАЗУ весь конфиг в память (HashMap, например). Потом работаем только с памятью.
При входе игрока следим за PlayerJoinEvent. Также не забываем про телепортирование (эвент не помню).
Потом с помощью PlayerMoveEvent следим за игроком.

При входе на территорию играем музыку и стартуем таймер на повторное проигрывание. Перед повтором чекаем, где игрок находится.
Ну ты Васют и тупой, конфиг в память сразу выгружается
 
Ну ты Васют и тупой, конфиг в память сразу выгружается
Это ещё вопрос, кто тут тупой (кстати, для меня и не вопрос вовсе).

1. HashMap значительно удобнее.
2. HashMap довольно шустрая штука.
 
Это ещё вопрос, кто тут тупой (кстати, для меня и не вопрос вовсе).

1. HashMap значительно удобнее.
2. HashMap довольно шустрая штука.
И че? Причем тут это? Ты сказал так что конфиг типо сразу в память не выгружается
 
И че? Причем тут это? Ты сказал так что конфиг типо сразу в память не выгружается
Я такого не говорил, это Вы почему-то так решили.
Впрочем, Вам виднее, удобнее же городить конструкцию getString("bla.bla.bla"), чем get("key").
 
Я такого не говорил, это Вы почему-то так решили.
Впрочем, Вам виднее, удобнее же городить конструкцию getString("bla.bla.bla"), чем get("key").
Ты шо тупой, где я это говорил. Ты сам написал что конфиг - не памятьupload_2018-1-6_16-56-25.png
 
Я такого не говорил, это Вы почему-то так решили.
Впрочем, Вам виднее, удобнее же городить конструкцию getString("bla.bla.bla"), чем get("key").
Ребята, по теме говорил лишь один человек, я один фиг не понял что к чему.
 
Тема поехала куда-то не туда...😗 Стали обсуждать кто прав и т.п...👎
 
Тема поехала куда-то не туда...😗 Стали обсуждать кто прав и т.п...👎
Как всегда. Тебе я советовал создать свой клас Cuboid и делать проверку наличия игрока внутри раз в 3 секунды. Могу даже код готовый дать.
 
Назад
Верх