Помогите группы игроков

Кароч я разобрался.

У меня было много лажи, вот исправленно
Java:
private boolean setupEssentials() {
        if (getServer().getPluginManager().getPlugin("Essentials") == null) {
            return false;
            }
     
        ess = (Essentials) getServer().getPluginManager().getPlugin("Essentials");
        return true;
    }
public YamlConfiguration getUserConfig(Player user){
        File uf = new File(getDataFolder(), "userdata"+File.separator+user.getName()+".yml");
        File folder =new File(getDataFolder(), "userdata");
        if (!folder.exists()) folder.mkdirs();
        YamlConfiguration uconfig;
        if (!uf.exists()) {
            getLogger().log(Level.SEVERE, "User file is not exists. Creating one new");
            try {
                uf.createNewFile();
                uconfig = YamlConfiguration.loadConfiguration(uf);
                uconfig.set("killer", false);
                uconfig.set("time", 0);
                saveUserFile(uconfig, uf);
            } catch (IOException e) {
                getLogger().log(Level.SEVERE, "Error while creating new user file");
                e.printStackTrace();
            }
        }
        uconfig = YamlConfiguration.loadConfiguration(uf);
        return uconfig;
    }
    public void saveUserFile(YamlConfiguration uconfig, File uf){
        File folder =new File(getDataFolder(), "userdata");
        if (!folder.exists()) folder.mkdirs();
        try {
            uconfig.save(uf);
        } catch (IOException e) {
            getLogger().log(Level.SEVERE, "Error while saving user file \"" +uf.getName()+"\"");
            e.printStackTrace();
        }
    }
Java:
@EventHandler
    public void onDeath(final PlayerDeathEvent e) {
        Player killed = e.getEntity();
        Player killer = killed.getKiller();
        if (killer==null) return;
        YamlConfiguration killerconf = plugin.getUserConfig(killer);
        YamlConfiguration killedconf = plugin.getUserConfig(killed);
        if (killedconf.getBoolean("killer")){
            jailKilled(killed, killedconf.getInt("time"));
            killedconf.set("killer", false);
            killedconf.set("time", 0);
            plugin.saveUserFile(killedconf, new File(plugin.getDataFolder(), "userdata"+File.separator+killed.getName()+".yml"));
            plugin.econ.depositPlayer(killer, 100);
            killer.sendMessage("Вы убили киллера поэтому его отправили в тюрьму");
            updateKiller(killer);
        }else{
            if (!killerconf.getBoolean("killer")){ killer.sendMessage("Вы стали убийцей! Кровожадное животное!");}
            else {killer.sendMessage("Сколько можно лить крови? Бессердечная скотина! Тебе это припомнят, учти!");}
            killerconf.set("killer", true);
            killerconf.set("time", killerconf.getInt("time")+10);
            plugin.saveUserFile(killerconf, new File(plugin.getDataFolder(), "userdata"+File.separator+killer.getName()+".yml"));
        } 
    } 

    private void updateKiller(Player killer) {
        plugin.econ.depositPlayer(killer, 100);
        killer.sendMessage("Вы убили киллера и получили 100$");
        YamlConfiguration killerconf = plugin.getUserConfig(killer);
        if (killerconf.getBoolean("killer")){
            killerconf.set("time", (int)killerconf.getInt("time")*0.8);
            killer.sendMessage("Т.к. вы тоже убийца то ваш срок был уменьшен на 20%");
            plugin.saveUserFile(killerconf, new File(plugin.getDataFolder(), "userdata"+File.separator+killer.getName()+".yml"));
        }
    }


    private void jailKilled(Player killed, int time) {
        Collection<String> jails = new ArrayList<>();
        try {
            jails = plugin.ess.getJails().getList();
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (jails==null) return;
        for (String s:jails){
            try {
                Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "jail "+killed.getName()+" "+s+" "+Integer.toString(time)+"m");
                killed.sendMessage("Вас поймали и посадили в тюрьму на срок "+ Integer.toString(time)+" минут");
                killed.sendMessage("Когда вас выпустят, с вас будут сняты все обвинения. Удачного времяпрепровождения ;)");
                break;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
Пора убивать видимо людей, ЗАЧЕМ вы постоянно конфиги грузите?! Не дано это 1 раз сделать
 
Пора убивать видимо людей, ЗАЧЕМ вы постоянно конфиги грузите?! Не дано это 1 раз сделать
ты предлагаешь создать массив на 100к файлов?

Производительность по п*зде? вот сам и грузи

или может быть ты хочешь при отключении сохранять такую тучу данных?
 
ты предлагаешь создать массив на 100к файлов?

Производительность по п*зде? вот сам и грузи

или может быть ты хочешь при отключении сохранять такую тучу данных?
Ты посмотри лучше как Essentials устроен - поймешь. Он только ОДИН раз подгружает файл с конфигами.
 
Ты посмотри лучше как Essentials устроен - поймешь. Он только ОДИН раз подгружает файл с конфигами.
у них своя система, это написано в главном классе. и эта система на мой взгляд оч гамняная.

кстати открой свой юзерфайл и выйди. ты будешь удивлен, но он будет перезаписан. а потом зайди. и файл снова будет перезаписан (причем он будет точно таким, каким он был когда ты вышел. т.е. он не выгружается) . у них подгрузка конфига каждый заход игрока с неподгруженным конфигом. А выгрузка происходит только при перезагрузке\отключении плагина. в конечном итоге при большой текучке, и круглосуточном аптайме память засирается на эти сраные конфиги
 
у них своя система, это написано в главном классе. и эта система на мой взгляд оч гамняная.

кстати открой свой юзерфайл и выйди. ты будешь удивлен, но он будет перезаписан. а потом зайди. и файл снова будет перезаписан (причем он будет точно таким, каким он был когда ты вышел. т.е. он не выгружается) . у них подгрузка конфига каждый заход игрока с неподгруженным конфигом. А выгрузка происходит только при перезагрузке\отключении плагина. в конечном итоге при большой текучке, и круглосуточном аптайме память засирается на эти сраные конфиги
Чтение и запись файла никак не скажется на памяти. Если только кто то не написал файл клосе.
 
АЛО, ОН НИКОГДА НЕ ВОЗВРАЩАЕТ НУЛЛ, УБЙИЦА МОЖЕТ БЫТЬ ТОЛЬКО ИГРОК, ОН НЕ МОЖЕТ БЫЛ НУЛЛ, ВАМ ВИДОС ЧТОЛЬ КИНУТЬ?!
Я ПРО СВОЙ ПЕРВЫЙ КОД, РЕЧЬ ШЛА О МОЁМ КОДЕ И Я ЗАПИСАЛ БЫ ВИДОС, КАК В КОНСОЛЬ НЕ ВЫВОДИТ NULL!
Спасибо, поорал.

180px-Hate.jpg
Уже как несколько лет не актуально :с
 
тогда какая нафиг разница как это реализованно
В ess то все правильно реализовано и там нет массивов по 100к файлов. Если игрок онлайн, читается из хеша, если офлайн, берется из файла. Но офлайн операций там немного, да и те админские, тп на чей то хом, инфа об игроке и т.п.
 
В ess то все правильно реализовано и там нет массивов по 100к файлов. Если игрок онлайн, читается из хеша, если офлайн, берется из файла. Но офлайн операций там немного, да и те админские, тп на чей то хом, инфа об игроке и т.п.
если вы сами говорите что чтение\запись не засирают памать, то какая разница-то.
кстати слабо верится, что берется из файла. зайди на серв, потом выйди, измени в фалйе допустим аланс, и вернись на сервер. баланс вернется на тот что был до выхода. так что в чтение из файла при оффлайне слабо верится
 
если вы сами говорите что чтение\запись не засирают памать, то какая разница-то.
кстати слабо верится, что берется из файла. зайди на серв, потом выйди, измени в фалйе допустим аланс, и вернись на сервер. баланс вернется на тот что был до выхода. так что в чтение из файла при оффлайне слабо верится
Ну значит не очищает кеш при выходе игрока.
 
Назад
Верх