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

Помогите Каналы чата

Тема в разделе "Разработка плагинов для новичков", создана пользователем DigitalMisha, 29 июл 2014.

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

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

    Баллы:
    58
    Как можно отправлять сообщение не всем игрокам, а только выборочно?
    У меня уже есть такой код:
    Код:
    e.getRecipients().stream().filter((s) ->
        getSidePlayer(s).getSide().equals(ws)
    )
    Но как применить это к оригинальному списку, я не знаю.

    1.
    Код:
    e.getRecipients().stream()
    - я получаю список получателей и создаю поток для его обработки.
    2.
    Код:
    .filter
    - метод для фильтрации потока. Возвращает поток(!) с уже отфильтрованным списком.
    3.
    Код:
    (s) -> getSidePlayer().getSide().equals(ws)
    - предикат(интерфейс(в данном случае реализованный лямбдой) который принимает одно значение и возвращает boolean) который удостоверяется что получатель находится на стороне(во фракции) отправителя.
     
  2. Хостинг MineCraft
    <
  3. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Не *******йся, используй итераторы.
     
  4. Автор темы
    DigitalMisha

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

    Баллы:
    58
    Даже если использовать итераторы. Как полученное применить к сообщению?
     
  5. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    getRecipients() возвращает оригинальный список.
     
  6. Автор темы
    DigitalMisha

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

    Баллы:
    58
    При его изменении оригинальный разве поменяется?[DOUBLEPOST=1406645078,1406643734][/DOUBLEPOST]И еще вопрос: как считать Location из конфига?
     
  7. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Сериализировать и десериализировать её.
     
  8. Автор темы
    DigitalMisha

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

    Баллы:
    58
    Спасибо, сейчас попробую.
     
  9. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Код из MinigamesAPI:
    Код:
        private Map<String, Object> serializeLocation(Location loc){
            Map<String, Object> map = new HashMap<String, Object>();
           
            map.put("x", loc.getX());
            map.put("y", loc.getY());
            map.put("z", loc.getZ());
            map.put("w", loc.getWorld().getName());
            return map;
        }
       
        private static Location deserializeLocation(ConfigurationSection section){
            return new Location(
                    Bukkit.getWorld(section.getString("w")),
                    section.getDouble("x"),
                    section.getDouble("y"),
                    section.getDouble("z"));
        }
    Использование:
    Код:
    config.createSection("path.to.loc", serializeLocation(loc));
    loc = deserializeLocation(section.getConfigurationSection(config.getConfigurationSection("path.to.loc")));
     
  10. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Ты забыл pitch и yaw.
     
  11. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Мне они были не нужны, так что я их не сохраняю. А если ТС нужно, то дополнить легко.
     
  12. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Обычно тогда сериализуют/десериализуют вектор тогда, и имя мира хранится в отдельной секции. Вообще имя мира стоит хранить 1 раз для всей арены, один чёрт почти всегда все части арены в одном мире находятся.
     
  13. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Я решил сделать так, за имя секции у меня другое отвечает. (название арены, в данном случае)
     

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