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

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);
 
Просто возьми координаты четырех барьеров(Например, один будет -10000, а другой 10000), и при генерации числа используй эти границы, т.е. от -9999 до 9999, так же и с двумя другими(Короче просто надо посчитать размер мира в пределах барьера).

P.S. Код не читабельный, разделяй строки что-ли)
 
Если кидаешь код, то кидай его как-то читабельно.
Для начала, что у тебя там вообще происходит? в плане, нормально, что ты игнорируешь факт того, что игрок может оказаться в водухе/в лаве или что-то подобное.
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);
Не стоит постоянно создавать новые класса, когда этого можно не делать.
 
Тоже чтоль понекропостить. Если нужно не от центра координат, поправите сами.
Код:
    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));
    }
 
Назад
Верх