Newer
Older
ChallengeSystem / src / main / java / de / fanta / challenges / commands / reset / ResetConfirmCommand.java
@fanta fanta on 25 Dec 2022 4 KB better texurepack loading
package de.fanta.challenges.commands.reset;

import de.fanta.challenges.Challenges;
import de.fanta.challenges.SaveSlot;
import de.fanta.challenges.ServerType;
import de.fanta.challenges.events.ChallengeEventStatusChangedEvent;
import de.fanta.challenges.events.EventStatusChangedEvent;
import de.fanta.challenges.utils.ChatUtil;
import de.fanta.challenges.utils.Config;
import de.fanta.challenges.utils.SaveWorldUtils;
import de.iani.cubesideutils.bukkit.commands.SubCommand;
import de.iani.cubesideutils.commands.ArgsParser;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import javax.annotation.Nullable;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;

public class ResetConfirmCommand extends SubCommand {

    private final Challenges plugin;

    public ResetConfirmCommand(Challenges plugin) {
        this.plugin = plugin;
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) {
        if ((sender instanceof Player && plugin.isEditor((Player) sender)) || sender.hasPermission("Challenges.editor.override")) {
            if (args.hasNext()) {
                String seed = args.getNext();
                setSeedInServerProperties(seed);
            } else {
                setSeedInServerProperties(null);
            }

            plugin.setWaitingForShutdown(true);
            Config.setValue("editsettings", true, false);
            plugin.getTimer().stopTimer();
            plugin.getTimer().setTime(0);
            Bukkit.getPluginManager().callEvent(new EventStatusChangedEvent(false));
            Bukkit.getPluginManager().callEvent(new ChallengeEventStatusChangedEvent(false));
            for (Player p : Bukkit.getOnlinePlayers()) {
                if (plugin.getServerType() == ServerType.CHALLENGE || plugin.getServerType() == ServerType.CHALLENGE_LOAD || plugin.getServerType() == ServerType.CHALLENGE_EVENT) {
                    p.sendTitle(ChatUtil.BLUE + "Server wird zurückgesetzt!", ChatUtil.RED + "Bitte warte einen Moment" + ChatUtil.BLUE + "." + ChatUtil.GREEN + "." + ChatUtil.YELLOW + ".", 10, 220, 10);
                } else if (plugin.getServerType() == ServerType.ADVENTURE) {
                    p.sendTitle(ChatUtil.BLUE + "Server wird gestoppt!", ChatUtil.RED + "Bitte warte einen Moment" + ChatUtil.BLUE + "." + ChatUtil.GREEN + "." + ChatUtil.YELLOW + ".", 10, 220, 10);
                }
                plugin.portPlayerToLobby(p);
            }

            Config.setValue("World_Reset", true);
            for (String key : Config.getConfigurationSection("Saved_Locations").getKeys(false)) {
                Config.setValue("Saved_Locations." + key, null, false);
            }
            plugin.saveConfig();
            plugin.getBackpack().saveInventoryToConfig();
            if (Config.getBoolean("firsttimerstart")) {
                SaveWorldUtils.saveWorld(plugin.getFirstEditor().getUniqueId().toString(), SaveSlot.SLOT_AUTO);
            }

            Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, Bukkit::shutdown, 60);
        } else if (plugin.getCurrentEditor() != null) {
            ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! Nur" + plugin.getCurrentEditor().getName() + " kann die Map zurücksetzen!");
            return true;
        } else {
            ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!");
            ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!");
            return true;
        }
        return true;
    }

    public void setSeedInServerProperties(@Nullable String seed) {
        try {
            BufferedReader in = new BufferedReader(new FileReader("server.properties"));
            Properties props = new Properties();
            props.load(in);
            in.close();
            if (seed != null) {
                props.setProperty("level-seed", seed);
                Config.setValue("resetwithseed", true, false);
            } else {
                props.setProperty("level-seed", "");
            }
            FileOutputStream out = new FileOutputStream("server.properties");
            props.store(out, null);
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}