Откатить инвентарь при дисконнекте

  • Автор темы Автор темы xDark
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

xDark

Активный участник
Пользователь
Баллы
96
Вообщем. Пишу плагин, почти все сделал, но есть одна проблема.
Когда игрок предположим пишет команду /remoteview off - слежка прекращается, но если выйти из игры, то инвентарь естественно не сохранится.
Java:
package me.xDark.RemoteView.events;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;

import com.google.common.io.Files;

import me.xDark.RemoteView.RemoteView;
import me.xDark.RemoteView.hashmap.SpectateHashmap;

public class DisconnectListener
implements Listener {
    private File temp = new File(RemoteView.instance.getDataFolder().getAbsolutePath().concat("/temp/"));
    @EventHandler
    public void onDisconnect(PlayerQuitEvent e) {
        Player p = e.getPlayer();
        if (!SpectateHashmap.getPlayerHash().containsKey(p)) return;
        File server = new File("server.properties");
        if (server.isFile()) {
            RemoteView.instance.getLogger().info("Recoverying inventory of player " + p.getName());
            Bukkit.getScheduler().scheduleSyncDelayedTask(RemoteView.instance, new Runnable() {
                public void run() {
                    try {
                        for (String key : FileUtils.readLines(server, "utf8")) {
                            if (key.contains("level-name=")) {
                                File uuid = new File(key.replace("level-name=", "").concat("/playerdata/").concat(p.getUniqueId().toString()).concat(".dat"));
                                File up = new File(temp.getAbsolutePath().concat("/" + p.getUniqueId().toString()).concat(".dat"));
                                Files.copy(up, uuid);
                                RemoteView.instance.getLogger().info("Copied file " + up.getAbsolutePath() + " to " + uuid.getAbsolutePath());
                                up.delete();
                            }
                        }
                    } catch (IOException e) {
                        RemoteView.instance.getLogger().info("Failed to recovery inventory of player " + p.getName() + ": " + e.getLocalizedMessage());
                    }
                }
            },80L);
        }
    }
}
 
up
up x2
Заметил, что вообще все .dat файлы игроков сохраняются при выходе, так теперь другой вопрос, как сделать "форс" этого сохранения, если такое вообще возможно...

Решено. Закрыто.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх