- Баллы
- 96
Вообщем. Пишу плагин, почти все сделал, но есть одна проблема.
Когда игрок предположим пишет команду /remoteview off - слежка прекращается, но если выйти из игры, то инвентарь естественно не сохранится.
Когда игрок предположим пишет команду /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);
}
}
}