Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Плагин [TP] AmazingRTP v1.0 - рандомные локации [1.8.9+]

Тема в разделе "Неподтвержденные плагины", создана пользователем DonDays, 7 сен 2016.

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

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    AmazingRTP v1.0 - рандомные локации для новичков
    Описание - Заходя на новый школо-сервер, мы сразу выходим со спавна и начинаем строить дом, добывать ресурсы и развиваться в отличии от агрошкольников. Порой это не так легко, ведь около спавна обычно стоят грифферы сторожилы сервера, которые убивают нас сразу, как мы выходим с безопасной территории спавна, впоследствии чего мы теряем интерес к этому серверу. AmazingRTP - один из многочисленых плагинов призван решить эту проблему! Когда игроки пропишут команду /rtp их телепортирует в рандомную локацию.

    Команды:
    • Телепортироваться в рандомную локацию - /rtp
    Конфигурация:
    • tpMsg - сообщение при телепортации

    Скачать - https://yadi.sk/d/cz7_D2OLurwhg
     
    Последнее редактирование: 7 сен 2016
  2. Хостинг MineCraft
    <
  3. 0x1EE7C0DE

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

    Баллы:
    36
    Код:
    public static int X_LIMIT = 8000;
    public static int Z_LIMIT = 3000;
    public static int NX_LIMIT = 0;
    public static int NZ_LIMIT = 0;
    
    Лучше вывести это в конфиг
     
  4. Автор темы
    DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Спасибо, сейчас выведу.
     
  5. 0x1EE7C0DE

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

    Баллы:
    36
    А лучше сделай указание радиуса от спавна, в котором будет появляться игрок
     
  6. Автор темы
    DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Еще не разобрался с
    [QUOTE="Лучше вывести это в конфиг[/QUOTE]
     
  7. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Вывести в конфиг максимальные значения, либо опрашивать максимальные корды у WorldBorder, либо спрашивать у сервера.
    Проверять куда телепортируешь - будет очень не приятно игроку, если его тпшнет в лаву/в воду/на кактус/к аллаху.
    И всё.
     
  8. CatCoder

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

    Баллы:
    76
    Имя в Minecraft:
    CatCoder
    А с помощью Math рандомные корды получить нельзя?
     
  9. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Можно, но придётся умножать значение. Но на сколько умножать? Опять обращаться к Math.random()?
     
  10. CatCoder

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

    Баллы:
    76
    Имя в Minecraft:
    CatCoder
    Ну можно вот так например сделать:
    Код:
      public Location getSafeLocation(World w)
      {
        int randomX = (int)(Math.random() * 1000.0D);
        int randomZ = (int)(Math.random() * 1000.0D);
        int randomY = w.getHighestBlockYAt(randomX, randomZ);
        Location randomLocation = new Location(w, randomX, randomY, randomZ);
        if (randomLocation.getBlock().getBiome().toString().contains("OCEAN")) {
          return getSafeLocation(w);
        }
        return randomLocation.add(0.0D, 1.0D, 0.0D);
      }
     
  11. CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Говно, а не код.

    Во-первых, лучше проверять блок, который оказался под ногами у игрока. Будь то кактус, лава, вода, воздух - вызывать метод поиска рандомной локации по новой.
    Во-вторых, проще использовать обычный Random и брать int.

    Ещё лучше, если при этом ты будешь проверять ещё и блоки по бокам, от новой локации. Там, напимер, может быть пламя или кактус.
     
  12. CatCoder

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

    Баллы:
    76
    Имя в Minecraft:
    CatCoder
    Приведи пример твоего НЕ говно кода.
     
  13. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    Stack Overflow'у привет.
     
  14. ♯Chet_LI

    ♯Chet_LI Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    Crass
    На 1.10 пойдет?
     
  15. CatCoder

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

    Баллы:
    76
    Имя в Minecraft:
    CatCoder
    ок.
     
  16. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    http://pastebin.com/0wP87q5Q
    Декомпильнутый и порезанный от "лишнего" метод для одного игрока из ядра 1.10.
     
  17. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    А если я порезал WB мир с радиусом 350 блоков?
    Так же твой метод будет использовать только положительные координаты.
    Math.random() == new Random().nextDouble()

    Ну и в конце как обычно от меня немножко каках, коли меряться собираемся.
    Код немного старый, ибо был сдекомпилен и немного улучшен ещё до того, как появился Java8.
    Зависимость от WorldBorder.

    Код:
    public static final List<Integer> BLACKLIST = Arrays.asList(new Integer[]{8, 9, 10, 11, 18, 51, 81});
    public Location chooseSpawn(World world) {
        BorderData bd = this.getWorldBorderPlugin().getWorldBorder(world.getName());
    
        double xmin = bd.getX() - bd.getRadiusX();
        double xmax = bd.getX() + bd.getRadiusX();
        double zmin = bd.getZ() - bd.getRadiusZ();
        double zmax = bd.getZ() + bd.getRadiusZ();
    
        double xrand = 0;
        double zrand = 0;
        double y = -1;
    
        do {
            xrand = ThreadLocalRandom.current().nextDouble(xmin, xmax);
            zrand = ThreadLocalRandom.current().nextDouble(zmin, zmax);
    
            y = getValidHighestY(world, xrand, zrand);
    
        } while (y == -1);
    
        Location location = new Location(world, xrand, y, zrand);
        location.setX(location.getBlockX() + 0.5D);
        location.setZ(location.getBlockZ() + 0.5D);
    
        return location;
    }
    
    private double getValidHighestY(World world, double x, double z) {
        world.getChunkAt(new Location(world, x, 0, z)).load();
        int y = 257;
        int blockid = 0;
        while (y >= 0 && blockid == 0) {
            y--;
            blockid = world.getBlockTypeIdAt((int) x, (int) y, (int) z);
        }
    
        if (y == 0) {
            return -1;
        }
    
        if (BLACKLIST.contains(blockid)) {
            return -1;
        }
    
        return y;
    }
     
  18. CatCoder

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

    Баллы:
    76
    Имя в Minecraft:
    CatCoder
    Здесь я уже сказать ничего не смогу. Вы сильнее меня в жабке :D
     

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