Сохранение и сброс хэшмапов

BlackBaroness

Модератор
Разработчик
Сообщения
1,680
Решения
72
Веб-сайт
vk.com
Сап спигот, раз нет альтернатив, хочу написать плагин на выдачу наград за наигранные часы, заодно улучшив уже существующий. У меня есть вот такой код:

Java:
public class handler implements Listener {

    private static final Baroness pluginInstance = Baroness.getInstance();
    HashMap<Player, Integer> clock = new HashMap<>();

    @EventHandler
    public void join(PlayerJoinEvent e) throws InterruptedException {
        Player p = e.getPlayer();
        clock.put(p, -1);
        new BukkitRunnable() {
            @Override
            public void run() {
                int some = clock.get(p);
                some++;
                clock.put(p, some);
                if (clock.get(p) == 1) {
                    p.sendMessage(ChatColor.AQUA + "Вы играете " + ChatColor.GOLD + clock.get(p) + ChatColor.AQUA + " час.");
                }
                if (clock.get(p) == 2 || clock.get(p) == 3 || clock.get(p) == 4) {
                    p.sendMessage(ChatColor.AQUA + "Вы играете уже " + ChatColor.GOLD + clock.get(p) + ChatColor.AQUA + " часа.");
                }
                if (clock.get(p) >= 5 && clock.get(p) <= 10) {
                    p.sendMessage(ChatColor.AQUA + "Вы играете уже " + ChatColor.GOLD + clock.get(p) + ChatColor.AQUA + " часов.");
                }
                if (clock.get(p) != 0) {
                    p.sendMessage(ChatColor.DARK_GREEN + "Не забывайте отдыхать.");
                }
            }
        }.runTaskTimer(pluginInstance, 0, 36000000 * 20);

Надо сделать, чтобы эта прелесть сохранялась при релоге и при этом сбрасывалась в определённое время. Например, в 0:00.
 
Решение
Black_Baroness, типа есть класс

Java:
public class PlayTime {
    private long start = System.currentTimeMillis();

    public long getStart() {
        return start;
}
}

Потом при в главный класс:

Java:
public class Main extends JavaPlugin implements Listener {

    private Map<UUID, PlayTime> playerTime = new HashMap<>();

    @Override
    public void onEnable() {
        Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> {
            playerTime.forEach((player, playTime) -> {
                long now = System.currentTimeMillis();
                long differenceInHours = TimeUnit.MILLISECONDS.toHours(now - playTime.getStart()));
                switch(differenceInHours) {
                    case 1...
Многократный оффтоп.
[OFFTOPIC]Black_Baroness, нууу, тут не в крутости дело, на самом деле это просто. Просто у тебя нет опыта с хранением данных, вот и все. Вот как раз повод научиться этому[/OFFTOPIC]
 
Последнее редактирование модератором:
[OFFTOPIC]С натугой, но учусь. Недели 3 назад я от жавы вообще только название знал) срочно появилась потребность в самописах просто[/OFFTOPIC]
 
Последнее редактирование модератором:
[OFFTOPIC]Black_Baroness, главное головой думай, когда ищешь методы и учитывай какие моменты можно делать в асинке, какие можно только в главном потоке. И старайся все делать в одном таймере (как тут, как минимум, ты уже заменил уйму синхронных таймеров одним асинхронным и привел в рабочий вид).[/OFFTOPIC]
Вот и понадобился класс PlayTime, там можешь реализовать аля startTime и quitTime.
 
Последнее редактирование модератором:
Назад
Сверху Снизу