Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем xDark, 16 сен 2016.

Статус темы:
Закрыта.
  1. Автор темы
    xDark

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

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

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    up[DOUBLEPOST=1474043229,1474041285][/DOUBLEPOST]up x2
    Заметил, что вообще все .dat файлы игроков сохраняются при выходе, так теперь другой вопрос, как сделать "форс" этого сохранения, если такое вообще возможно...

    Решено. Закрыто.
     
Статус темы:
Закрыта.

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