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

  • Автор темы Автор темы 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
 
костыли какие-то, парсить строки и отделять материал и количество, а если тебе потом еще дату нужно будет вписать, название, зачары какие-то? Напиши 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]);
Очень не рекомендую так делать.
 
Как то так.

Код:
        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
        }
 
костыли какие-то, парсить строки и отделять материал и количество, а если тебе потом еще дату нужно будет вписать, название, зачары какие-то? Напиши 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]);
Очень не рекомендую так делать.
Спасибо. Я пока полный нуб. Поэтому костыли самое то.
 
Как то так.

Код:
        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
        }
Спасибо!
 
Как то так.

Код:
        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
        }
Дичь)
 
Обоснуй? В ess тоже идет подобное разделение, каким кодом не смотрел.
Костыли какие-то, зачем вообще ручками это десериализовать. Смешно, что ты приводишь в пример Essentials, это пример для подражания? Там это сделали лет 5 назад и не меняли наверное. Это неудобно, ни для юзера, ни для разраба.

В данном случае лучше юзать switch.

p,s Неплохая штука.
Бред)
 
Это неудобно, ни для юзера, ни для разраба.
Очень удобно в китах и в командах. Все довольны, кроме тебя. И пусть хоть 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
 
Последнее редактирование:
Очень удобно в китах и в командах. Все довольны, кроме тебя. И пусть хоть 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
Что мешает тебе все этот десериализовать с json, Hocon или с того же yml не ручками? В чем заключается удобство, когда все в одной строчке?
items = [
{
type = 401
data = 1
name = StarryNight
firework {
color = [yellow, orange]
fade = blue
type = star
effect = [trail, twinkle]
power = 1
}
},
...
]
С телефона писал, табуляции сам поймешь надеюсь.
И вид человеческий и не надо парсер на до фига строк ручками костылить.
При желании можно также все в одну строчку сделать, наследоваться от каких-то темплейтов и т д, тут уж дело вкуса.
 
Видимо тебе не понять. И кониг делается, чтоб его руками заполняли. Если нет, я бы просто выбрал к примеру nbt и все.
 
Последнее редактирование:
Видимо тебе не понять. И кониг и делается, чтоб его руками заполняли. Если нет, я бы просто выбрал к примеру nbt и все.
Конфиг то руками заполняется, но десериализовать можно не ручками, в таком формате как у тебя это около-нечитаемая дичь.
Нбт для чтения в ручную написанного конфига не оч годится.

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

Я представляю сколько у тебя там строк кода чтобы спарсить этот фейрверк ручками из конфига.
Да и конечные юзеры не все любят json. Рекомендую yamlbeans юзать. Там тоже ничего ручками не делается.
Код:
YamlReader reader = new YamlReader(new FileReader(this.file));
reader.read(MyClass.class);
 
Да и конечные юзеры не все любят json. Рекомендую yamlbeans юзать. Там тоже ничего ручками не делается.
Код:
YamlReader reader = new YamlReader(new FileReader(this.file));
reader.read(MyClass.class);
Ну Hocon поэтому надо юзать, он хавает и json, и кучу кавычек с запятыми можно опустить, и переменные можно делать и шаблоны, даже наследование в конфиге можно делать, оч удобно.
Можно даж в формате Yml писать ( : вместо = )

По поводу ямла, YamlReader-ом десерить можно ток самые простые POJO классы, а что-то посложнее - вряд ли. Тут лучше юзать Jackson, он и в hocon может, и в json, и в yaml.
 
Последнее редактирование:
По поводу ямла, YamlReader-ом десерить можно ток самые простые POJO классы, а что-то посложнее - вряд ли. Тут лучше юзать Jackson, он и в hocon может, и в json, и в yaml.
Да не суть. Прост юзерам yml проще редачить. Есть что то лучше, почему и нет.
 
Да не суть. Прост юзерам yml проще редачить. Есть что то лучше, почему и нет.
Yaml для обычных людей не подходит, слишком жёсткий синтаксис. То таб вместо пробела, то ещё что-то - вечно с ним проблемы
 
Назад
Верх