Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Рандомная телепортация игроков

chief

Активный участник
Пользователь
Баллы
76
Надо настроить плагин под мои потребности но я не понимаю, каким образом это сделать.
Это кусочек кода на рандомную телепортацию игроков но он имеет одну небольшую проблему. Иногда он телепортирует на спавн.
Java:
   public void portSelf(Player p) {
      World world = p.getWorld();
      if(world.getEnvironment().equals(Environment.NETHER)) {
         logger.info(p.getDisplayName() + " is randomporting in the nether!");
         this.netherPort(p);
      } else {
         double randomX = (double)((int)(Math.random() * (double)(xmax - xmin)) + xmin + 0.5);
         double randomZ = (double)((int)(Math.random() * (double)(zmax - zmin)) + zmin + 0.5);
         Location tempLoc = new Location(world, randomX, 1.0D, randomZ);
         int highy = world.getHighestBlockYAt(tempLoc);
         Location spot = new Location(world, randomX, (double)highy, randomZ);
         Location loc = new Location(world, randomX, (double)(highy - 1), randomZ);
         Iterator var13 = avoid.iterator();

         while(var13.hasNext()) {
            int b = ((Integer)var13.next()).intValue();
            if(loc.getBlock().getTypeId() == b) {
               this.portSelf(p);
               return;
            }
         }
      }
   }
Где zmax - максимальные координаты от центра по оси Z
Гду zmin - минимальныке координати от центра по оси Z
Где xmax - максимальные координаты от центра по оси X
Гду xmin - минимальныке координати от центра по оси X

Вопрос заключается в следующем. Как сделать так, чтобы телепортация происходила от ~ 100 блоков от центра?
 
Последнее редактирование:
Используй, пожалуйста, тег CODE=Java, а не JavaScript :) В нём можно будет копи-пастить текст без номеров строк.
Сейчас подумаю над твоим вопросом.
Не очень понял смысл строки Iterator var13 = avoid.iterator(); и всех ниже её. Можешь рассказать?
Тем временем мне кажется это рабочее:
Java:
public void portSelf(Player p)
{
    // Исходные данные
    double xmax = 1000, xmin = -1000, zmax = 1000, zmin = -1000;

    World world = p.getWorld();
    if(world.getEnvironment().equals(Environment.NETHER))
    {
        logger.log(Level.INFO, "{0} is randomporting in the nether!", p.getDisplayName());
        this.netherPort(p);
    } else {
        Location targetLoc = new Location(world, 0.0, 1.0, 0.0);
        for(;;)
        {
           double randomX = 0.5 + xmin + Math.random() * (xmax - xmin);
           double randomZ = 0.5 + zmin + Math.random() * (zmax - zmin);
           if(randomX * randomX + randomZ * randomZ < safeRadius * safeRadius)
               continue;
           int highestBlockY = world.getHighestBlockYAt(targetLoc);
           targetLoc.setX(randomX);
           targetLoc.setY(highestBlockY - 1);
           targetLoc.setZ(randomZ);
           break;
        }
        p.teleport(targetLoc);
    }
}
 
Последнее редактирование:
Не очень понял смысл строки Iterator var13 = avoid.iterator(); и всех ниже её.
Получает блоки под игроком и решает телепортировать туда или нет (Черный список блоков, на ки нельзя телепортировать игрока)

Надо сделать так, чтобы игроков не телепортировало в радиусе 100 блоков от центра мира, или лучше сделать проверку на приват, но я не очень понимаю, как это можно реализовать
@Reality_SC К вам еще один вопрос. Вы знаток всего :-)
В текст надо вставить табуляцию но у меня не получается это сделать. Пробовал два метода и ничего не получается ("\t" и "%-20s")
Java:
left.add(String.format("y:%.2f %s", mc.thePlayer.posY, Direction.directions[heading]));
Надо передвинуть "%s" на относительное расстояние от "y:%.2f"
 
Получает блоки под игроком и решает телепортировать туда или нет (Черный список блоков, на ки нельзя телепортировать игрока)
Тогда сам :)
Надо сделать так, чтобы игроков не телепортировало в радиусе 100 блоков от центра мира, или лучше сделать проверку на приват, но я не очень понимаю, как это можно реализовать
Поменял код выше, глянь. Если я правильно тебя понял ... при выборе случайной координаты не выбирать её ближе к центру карты, чем 100 блоков? В общем, теорема Пифагора наше всё.
В текст надо вставить табуляцию но у меня не получается это сделать. Пробовал два метода и ничего не получается ("\t" и "%-20s")
Это будет выводиться в чате? Если да, то печалька, майновские шрифты не моноширные.
Символ \t это да, табуляция, но не думаю что майн его как-то корректно воспримет — от силы это будет какой-то константной длины пробел.
В строке формата вместо %.2f попробуй написать %5.2f, это заставит число всегда перед точкой иметь определённое число знаков, лишние справа будут пробелами (либо %05.2f — нулями).
 

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

Назад
Верх