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

Помогите В разработке плагина

Тема в разделе "Разработка плагинов для новичков", создана пользователем Fresh624, 11 янв 2015.

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

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

    Баллы:
    66
    Имя в Minecraft:
    Fresh624
    Я хочу сделать такой плагин, чтобы при становлении в определённую точку игрока лечило. Настройка точки делается командой. Как реализовать эту точку?
     
  2. Хостинг MineCraft
    <
  3. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    При написании команды добавляешь координаты, откуда она была прописана (а лучше Location) в List.
    В ивенте движения игрока берёшь его Location и перебераешь по List'y. Если совпадение, то лечишь.
     
  4. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Нужно использовать не равенство точки, математически это почти невозможно, а некий эпсилон.
    if(location.distance(точка) < epsilon) ...
     
  5. Автор темы
    Fresh624

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

    Баллы:
    66
    Имя в Minecraft:
    Fresh624
    Можно поподробнее
     
  6. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Что по подробнее? Гугл всё скажет, если правильно на него "надавить"
     
  7. Автор темы
    Fresh624

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

    Баллы:
    66
    Имя в Minecraft:
    Fresh624
    Ок[DOUBLEPOST=1420985792,1420985003][/DOUBLEPOST]
    Что-то типа такого
    1. loc = new HashMap<String, Location>();
    2. loc.put(sender.getName(), ((Location) sender));
     
  8. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Кто-то не знает языка.
     
  9. Автор темы
    Fresh624

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

    Баллы:
    66
    Имя в Minecraft:
    Fresh624
    Код не мой
     
  10. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Ну это только подтверждает мои слова.
     
  11. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    Преобразование sender'а в Location - это что-то новенькое :D
     
  12. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Не знаешь что делать, жми по подсказкам IDE :D
     
  13. Автор темы
    Fresh624

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

    Баллы:
    66
    Имя в Minecraft:
    Fresh624
    Реал код не мой, лазил по баккиту и у америкосов брал.
     
  14. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    Это код индусов.
     
  15. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Индусы этот код бы на 10 строк растянули.
     
  16. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    Ну так это только aplha версия :D
     
  17. LaoTheLizard

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

    Баллы:
    103
    Skype:
    sgp_the_controller
    Лишь бы до гаммы разговор не зашел. Гамма - вещь опасная.[DOUBLEPOST=1421408382,1421407404][/DOUBLEPOST]Вот, попробовал написать, как вариант. Уверен, можно сделать лучше, но лучше я не умею.

    @EventHandler
    public void onPlayerMove(PlayerMoveEvent e){
    Player p = e.getPlayer();
    Location loc = p.getLocation();
    String w1 = loc.getWorld().getName().toString();
    int x1 = loc.getBlockX(), y1 = loc.getBlockY(), z1 = loc.getBlockZ();
    Set<String> points = config.getConfigurationSection("Points").getKeys(false);
    for(String point : points){
    String w2 = config.getString("Points." + point + ".world");
    int x2 = config.getInt("Points." + point + ".x");
    int y2 = config.getInt("Points." + point + ".y");
    int z2 = config.getInt("Points." + point + ".z");
    int radius = config.getInt("Radius");
    if(w1.equalsIgnoreCase(w2) && Math.abs(x1-x2) <= radius && Math.abs(y1-y2) <= radius && Math.abs(y1-y2) <= radius ) {
    p.setHealth(10);
    return;
    }
    }
    }[DOUBLEPOST=1421408697][/DOUBLEPOST]Можно еще сделать у каждой точки свой радиус. Тогда будет так:
    int radius = config.getInt("Points." + point + ".radius");
     
    Последнее редактирование: 16 янв 2015
  18. Smaylik03

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

    Баллы:
    88
    Skype:
    Bruse_Williams
    Имя в Minecraft:
    Alex_Wells
    Можно сделать лист с локейшинами, как писали выше, загружая его при загрузке плагина из конфига, ну а при завершении сохранять лист, если вы добавили новые точки =)
     
  19. LaoTheLizard

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

    Баллы:
    103
    Skype:
    sgp_the_controller
    Ну у меня суть та же, только реализацию я усложнил - мне так удобнее. В любом случае, в работе эти два варианта будут работать одинаково.
     
  20. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Вместо такой проверки
    лучше создай из координат точки и названия мира "точечный" Location, и используй
    (не помню как точно называется метод у локейшена, возвращающий квадрат расстояния между ними, а свой радиус ты можешь возвести в квадрат заблаговременно).
    Так код более короткий, читабельный, и радиус у тебя сферический, а не кубический.

    И да, используй тег [ CODE=Java] ... [ /CODE].
     
  21. LaoTheLizard

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

    Баллы:
    103
    Skype:
    sgp_the_controller
    Я написал, как знал. Ты знаешь лучший вариант - исправь мой (или напиши новый) и приведи сюда полный результат. По себе сужу - проще взять готовую рабочую процедуру или даже написать с нуля собственную, чем ковыряться-исправлять в чужих.
     

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