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();
}
}
}