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

Помогите Как сделать ртп

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

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

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

    Баллы:
    66
    Имя в Minecraft:
    steklopaKet32_46
    Мне для мини игры нужен специальный рандом телепорт . Сторонние плагины не хочу юзать)
    Меня тпхает за world boarder как это исправить?
    код

    int gx = (int) p.getWorld().getWorldBorder().getCenter().getX();
    int gz = (int) p.getWorld().getWorldBorder().getCenter().getZ();
    int gg = (int) p.getWorld().getWorldBorder().getSize();
    p.sendMessage("dfdf "+gg);
    int x =gg/2 + gx;
    int z=gg/2 + gz;
    Random rnd = new Random();
    int xr = rnd.nextInt(x+1);
    int zr = rnd.nextInt(z+1);
    int y = 0;
    for(;y<200;y++) {
    Location l = new Location(p.getWorld(), xr, y, zr);
    if(l.getBlock().getType() == Material.AIR) {
    break;

    }
    }
    Location loc = new Location(p.getWorld(), xr, y, zr);
    p.teleport(loc);
     
  2. RiGocha

    RiGocha Участник Пользователь

    Баллы:
    31
    Просто возьми координаты четырех барьеров(Например, один будет -10000, а другой 10000), и при генерации числа используй эти границы, т.е. от -9999 до 9999, так же и с двумя другими(Короче просто надо посчитать размер мира в пределах барьера).

    P.S. Код не читабельный, разделяй строки что-ли)
     
  3. sidey383

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

    Баллы:
    61
    Имя в Minecraft:
    sidey383
    Если кидаешь код, то кидай его как-то читабельно.
    Для начала, что у тебя там вообще происходит? в плане, нормально, что ты игнорируешь факт того, что игрок может оказаться в водухе/в лаве или что-то подобное.
    int xr = rnd.nextInt(x+1);
    int zr = rnd.nextInt(z+1);

    меня очень смущают x и z, от которых берётся число.
    x и z равны одной из границ по x и y. Какой-то бред получается.
    Кажется, это должно быть как-то так.
    int xr = gx+gg/2-rnd.nextInt(gg);
    int zr = gz+gg/2-rnd.nextInt(gg);
    тогда значения xr будут в диапазоне от gx-gg/2 до gx+gg/2
    Далее, лучше, пожалуй, сделать что-то такое

    Код:
    Location loc = new Location( p.getWorld(), xr, 1, zr);
    for ( y=2; y<200; y++)
    {
        if (loc.getBlock().getType() == Material.AIR) break;
        loc.setY(y);
    }
    p.teleport(loc);
    Не стоит постоянно создавать новые класса, когда этого можно не делать.
     
  4. Lemar98

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

    Баллы:
    76
    Тема с февраля 19 года, держу в курсе
    Орнул с этого
     
  5. alexandrage

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

    Баллы:
    173
    Тоже чтоль понекропостить. Если нужно не от центра координат, поправите сами.
    Код:
        public static void randomTP(World world, Player player, int radius) {
            Random rd = new Random();
            int x = rd.nextInt(radius + 1) - radius / 2;
            int z = rd.nextInt(radius + 1) - radius / 2;
            int y = world.getHighestBlockYAt(x, z);
            player.teleport(new Location(world, x, y + 1, z));
        }
     

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