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

[Welp] Палки в никах через каждый символ

Тема в разделе "Оффтопик", создана пользователем Endemy, 8 июн 2015.

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

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

    Баллы:
    61
    Имя в Minecraft:
    Endemy
    Здравствуйте, нужна помощь. Я сделал подобие фракций. Есть команда, через которую можно посмотреть список игроков какой-либо фракции. ДО перезапуска сервера никнеймы игроков отображались нормально, т.е. <ник>|<ник>|...
    Но если посмотреть список после перезагрузки сервера, то в никах появятся палки: p|l|a|y|e|r|p|l|a|y|e|r|2|... (<--- в текстовом документе)
    p,l,a,y,e,r,p,l,a,y,e,r,2,... (<--- в игре)
    В чем может быть проблема?

    FactionManager.class
    Код:
    package net.minecraft.src;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.logging.Logger;
    
    public class FactionManager {
        private static File factionFile;
        public static HashSet<Faction> factions = new HashSet<Faction>();
        public static Logger logger = Logger.getLogger("Minecraft");
    
        public static void loadFactions(File file) {
            factionFile = file;
            try {
                factions.clear();
                CSVReader reader = new CSVReader(new FileReader(factionFile));
                try {
                    String[] line;
                    if ((line = reader.readNext()) != null) {
                    while ((line = reader.readNext()) != null) {
                        String name = line[0];
                        String owner = line[1];
                        ArrayList<String> arr = parseList(line[2]);
                        Faction faction = new Faction(name, owner);
                        for (String temp : arr) {
                            faction.addMember(temp);
                        }
                        factions.add(faction);
                    }
                    }
                    logger.info("Loaded " + factions.size() + " factions");
                } finally {
                    try {
                        reader.close();
                    } catch (IOException e) {
                    }
                }
            } catch (Exception exception) {
                logger.warning((new StringBuilder())
                        .append("Failed to load factions list: ").append(exception)
                        .toString());
            }
        }
    
        private static ArrayList<String> parseList(String data) {
            if (data == null) {
                return null;
            }
            ArrayList<String> list = new ArrayList<String>();
            String[] parts = data.split("|");
            for (String part : parts) {
                if (part.trim().length() == 0) {
                    continue;
                }
                list.add(part);
            }
            return list;
        }
    
        public static void saveFactions() {
            try {
                CSVWriter writer = new CSVWriter(new FileWriter(factionFile));
                try {
                    writer.writeNext(new String[] { "" });
                    Iterator<Faction> i = factions.iterator();
                    while (i.hasNext()) {
                        Faction faction = i.next();
                        writer.writeNext(new String[] { faction.getName(),
                                faction.getOwner(),
                                writeList(faction.getMembers()) });
                    }
                } finally {
                    try {
                        writer.close();
                    } catch (IOException e) {
                    }
                }
            } catch (Exception exception) {
                logger.warning((new StringBuilder())
                        .append("Failed to save factions list: ").append(exception)
                        .toString());
            }
        }
    
        private static String writeList(ArrayList<String> list) {
            String str = "";
            for (String name : list) {
                str = str + name + "|";
            }
            return str.length() > 0 ? str.substring(0, str.length() - 1) : "";
        }
    }
    
    Faction.class
    Код:
    package net.minecraft.src;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Faction {
        private String name;
        private String owner;
        private ArrayList<String> members = new ArrayList<String>();
    
        public Faction(String name, String owner) {
            this.name = name;
            this.owner = owner;
        }
    
        public String getName() {
            return this.name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
      
        public String getOwner() {
            return this.owner;
        }
        public String getMembersAsString() {
            StringBuilder str = new StringBuilder();
            for (String name : members) {
                str.append(new StringBuilder().append(name).append(",").toString());
            }
            return str.length() > 0 ? str.toString().substring(0, str.length() - 1)
                    : "";
    
        }
    
        public boolean addMember(String name) {
            if (!this.members.contains(name)) {
                this.members.add(name);
                return true;
            } else {
                return false;
            }
        }
    
        public boolean checkMember(String name) {
            if (this.members != null) {
                if (this.members.contains(name)) {
                    return true;
                }
            }
            return false;
        }
    
        public boolean removeMember(String name) {
            return this.members.remove(name);
        }
    
        public ArrayList<String> getMembers() {
            return members;
        }
    }
    
     
  2. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    | — это специальный символ в регулярках, его нужно заэкранировать: .split("\\|"). Скорее всего твой сплит бъёт на отдельные символы.

    Ну и, если просишь помощи, в данном вопросе было бы разумно сразу приложить текстовый файл, чтобы поделить пополам твой код: вычитывать сохранение или восстановление.
     
  3. Автор темы
    Endemy

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

    Баллы:
    61
    Имя в Minecraft:
    Endemy
    Спасибо!
     

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