1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Выдача предметов из конфига

Тема в разделе "Разработка плагинов для новичков", создана пользователем Chupaaa, 18 фев 2019.

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

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

    Баллы:
    21
    Имя в Minecraft:
    xChupa
    У меня такая проблема. В конфиге у меня прописаны предметы, которые нужно выдать, но как указать количество этих предметов? Как-то не правильно 15 раз прописывать один и тот же предмет.
    Вот код:
    List<String> items = plugin.getConfig().getStringList("gui.chest1.items");
    for (String i : items){
    ItemStack chest1 = new ItemStack(Material.valueOf(i.toUpperCase()));
    Inventory inv = e.getWhoClicked().getInventory();
    inv.addItem(chest1);
    e.getWhoClicked().sendMessage(String.valueOf(plugin.getConfig().getStringList("gui.chest1.items")));
    }
    А вот сам конфиг:
    gui:
    chest1:
    items:
    - IRON_SWORD
    - SLIME_BALL
    Как сделать так, чтобы мне, допустим, выдавалось 5 слизей?
    И чтобы в конфиге было примерно так:
    - SLIME_BALL:5
     
  2. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    костыли какие-то, парсить строки и отделять материал и количество, а если тебе потом еще дату нужно будет вписать, название, зачары какие-то? Напиши DTO класс для предмета и используй для десериализации с конфига в удобном для пользователя формате. Из библиотек для databind советую Jackson, очень гибкий, но в данном случае вполне сойдет и GSON (уже есть в spigot).
    Конфиг рекомендую юзать hocon, вместе yaml. Удобней как для пользователя, так и для разработчика:
    https://github.com/lightbend/config

    Если все же хочешь костылить, то нужно разбить строку на массив и брать отдельно материал и количество
    Код:
    String[] split = s.split(":")
    Material type = Material.matchMaterial(split[0]);
    int amount = Integer.parseInt(split[1]);
    Очень не рекомендую так делать.
     
  3. alexandrage

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

    Баллы:
    173
    Как то так.

    Код:
            String s = "SLIME_BALL amount:1 name:slime lore:slime";
            String material = s.split(" ")[0];
            //TODO
            if(s.split("amount:").length==2) {
                String amount = s.split("amount:")[1].split(" ")[0];
                //TODO
            }
            if(s.split("name:").length==2) {
                String name = s.split("name:")[1].split(" ")[0];
                //TODO
            }
            if(s.split("lore:").length==2) {
                String lore = s.split("lore:")[1].split(" ")[0];
                //TODO
            }
     
  4. Автор темы
    Chupaaa

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

    Баллы:
    21
    Имя в Minecraft:
    xChupa
    Спасибо. Я пока полный нуб. Поэтому костыли самое то.
     
  5. Автор темы
    Chupaaa

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

    Баллы:
    21
    Имя в Minecraft:
    xChupa
    Спасибо!
     
  6. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Дичь)
     
  7. Nikolai_Faint

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

    Баллы:
    96
    В данном случае лучше юзать switch.
    p,s Неплохая штука.
     
    Последнее редактирование: 18 фев 2019
  8. alexandrage

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

    Баллы:
    173
    Обоснуй? В ess тоже идет подобное разделение, каким кодом не смотрел.
     
  9. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Костыли какие-то, зачем вообще ручками это десериализовать. Смешно, что ты приводишь в пример Essentials, это пример для подражания? Там это сделали лет 5 назад и не меняли наверное. Это неудобно, ни для юзера, ни для разраба.

    Бред)
     
  10. alexandrage

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

    Баллы:
    173
    Очень удобно в китах и в командах. Все довольны, кроме тебя. И пусть хоть 100 лет назад, оно не перестало быть удобным.
    Хотел бы я посмотреть как убого станет выглядеть конфиг в твоем представлении из этого.
    Код:
        items:
          - 401 1 name:Angry_Creeper color:red fade:green type:creeper power:1
          - 401 1 name:StarryNight color:yellow,orange fade:blue type:star effect:trail,twinkle power:1
          - 401 2 name:SolarWind color:yellow,orange fade:red shape:large effect:twinkle color:yellow,orange fade:red shape:ball effect:trail color:red,purple fade:pink shape:star effect:trail power:1
    
     
    Последнее редактирование: 18 фев 2019
  11. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Что мешает тебе все этот десериализовать с json, Hocon или с того же yml не ручками? В чем заключается удобство, когда все в одной строчке?
    items = [
    {
    type = 401
    data = 1
    name = StarryNight
    firework {
    color = [yellow, orange]
    fade = blue
    type = star
    effect = [trail, twinkle]
    power = 1
    }
    },
    ...
    ]
    С телефона писал, табуляции сам поймешь надеюсь.
    И вид человеческий и не надо парсер на до фига строк ручками костылить.
    При желании можно также все в одну строчку сделать, наследоваться от каких-то темплейтов и т д, тут уж дело вкуса.
     
  12. alexandrage

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

    Баллы:
    173
    Видимо тебе не понять. И кониг делается, чтоб его руками заполняли. Если нет, я бы просто выбрал к примеру nbt и все.
     
    Последнее редактирование: 18 фев 2019
  13. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Конфиг то руками заполняется, но десериализовать можно не ручками, в таком формате как у тебя это около-нечитаемая дичь.
    Нбт для чтения в ручную написанного конфига не оч годится.

    Я представляю сколько у тебя там строк кода чтобы спарсить этот фейрверк ручками из конфига.
     
  14. alexandrage

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

    Баллы:
    173
    Да и конечные юзеры не все любят json. Рекомендую yamlbeans юзать. Там тоже ничего ручками не делается.
    Код:
    YamlReader reader = new YamlReader(new FileReader(this.file));
    reader.read(MyClass.class);
     
  15. Nikolai_Faint

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

    Баллы:
    96
    И правда, ошибся.
     
    Последнее редактирование: 19 фев 2019
  16. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ну Hocon поэтому надо юзать, он хавает и json, и кучу кавычек с запятыми можно опустить, и переменные можно делать и шаблоны, даже наследование в конфиге можно делать, оч удобно.
    Можно даж в формате Yml писать ( : вместо = )

    По поводу ямла, YamlReader-ом десерить можно ток самые простые POJO классы, а что-то посложнее - вряд ли. Тут лучше юзать Jackson, он и в hocon может, и в json, и в yaml.
     
    Последнее редактирование: 19 фев 2019
  17. alexandrage

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

    Баллы:
    173
    Да не суть. Прост юзерам yml проще редачить. Есть что то лучше, почему и нет.
     
  18. Nikolai_Faint

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

    Баллы:
    96
    Юзерам проще изменять нужные строки.
     
  19. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Yaml для обычных людей не подходит, слишком жёсткий синтаксис. То таб вместо пробела, то ещё что-то - вечно с ним проблемы
     
  20. alexandrage

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

    Баллы:
    173
    Есть такое. В питоне такая же хрень, как там ваще кодят.
     

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