• Мы теперь в Discord

    Мы рады объявить, что теперь у нас есть сервер Discord. В честь этого мы проводим розыгрыш!
    Теперь вы можете легко связаться с нами и другими участниками сообщества,
    обмениваться идеями и получать обновления о нашей деятельности.

  • EXCLUSIVE ⚡

    Гость, покупая подписку, ты увеличишь свои доходы в разы!
    Мы делаем самые актуальные сборки, переводим лучшие приватные плагины, а так-же обновляем их и фиксим любые ошибки.
    Дешевле, чем студии и другие разработчики!

  • Приветствуем тебя Гость!⁣

    Недавно на форуме? Не знаешь как можно скачивать ресурсы?
    Для этого нужно лишь зарегистрировать на форуме, и получать доступ к профессиональным плагинам, оптимизированным настройкам.
    Здесь только самое лучшее.

This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

помощь

  • Автор темы Автор темы K0lbasa
  • Дата начала Дата начала

K0lbasa

Пользователь
19 Фев 2021
255
0
16
Исправь код:


public void setPerms(String clan, String role, String perms) {
List<String> list = cfg.getStringList(clan+".Roles");

for(String s : list) {
if(s.contains(role)) {
if (perms.equals("")) {
list.set(list.indexOf(s), s);
} else {
list.set(list.indexOf(s), s+" "+perms);
}
}
} cfg.set(clan+".Roles", list);
SClans.getInstance().saveConfig();
}

public List<String> getPerms(String clan, String role) {
for(String s : cfg.getStringList(clan+".Roles")) {
if(!s.equals(role) && s.contains(role)) {
String[] p1 = s.split("\\s");
if (!p1[1].contains("-")) {
return new ArrayList<>(Collections.singletonList(p1[1]));
} else {
String[] p = p1[1].split("-");
return new ArrayList<>(Arrays.asList(p));
}
}
} return new ArrayList<>();
}
 
Необходимо добавить try-catch блоки и закрытие ресурсов для правильного использования конфигурационного файла. Ниже приведен исправленный код:

public void setPerms(String clan, String role, String perms) {
List<String> list = null;
try {
list = cfg.getStringList(clan + ".Roles");
} catch (Exception e) {
e.printStackTrace();
}

for (String s : list) {
if (s.contains(role)) {
if (perms.equals("")) {
list.set(list.indexOf(s), s);
} else {
list.set(list.indexOf(s), s + " " + perms);
}
}
}

try {
cfg.set(clan + ".Roles", list);
SClans.getInstance().saveConfig();
} catch (Exception e) {
e.printStackTrace();
}
}

public List<String> getPerms(String clan, String role) {
List<String> result = new ArrayList<String>();
try {
for (String s : cfg.getStringList(clan + ".Roles")) {
if (!s.equals(role) && s.contains(role)) {
String[] p1 = s.split("\\s");
if (!p1[1].contains("-")) {
result.add(p1[1]);
} else {
String[] p = p1[1].split("-");
result.addAll(Arrays.asList(p));
}
}
}
} catch (Exception e) {
e.printStackTrace();
}

return result;
}
 
Не в этом дело. Метод setPerms() устанавливает значения для других строк в списке. BukkitAPI.
 
Измените код метода setPerms следующим образом, чтобы он устанавливал права только для заданной роли внутри списка:

public void setPerms(String clan, String role, String perms) {
List<String> list = null;
try {
list = cfg.getStringList(clan + ".Roles");
} catch (Exception e) {
e.printStackTrace();
}

for (int i = 0; i < list.size(); i++) {
if (list.get(i).contains(role)) {
String s = list.get(i);
if (perms.isEmpty()) {
s = s.split(" ")[0];
} else {
String[] parts = s.split(" ");
s = parts[0] + " " + perms;
}
list.set(i, s);
}
}

try {
cfg.set(clan + ".Roles", list);
SClans.getInstance().saveConfig();
} catch (Exception e) {
e.printStackTrace();
}
}

Этот код будет проходить список строк и изменять только ту, которая содержит указанную роль. Если строки не содержат указанной роли, то никакие правки не будут внесены.
 

Спасибо большое, без тебя я бы искал проблему 1 год