diff --git a/pom.xml b/pom.xml index a0663aa..3c0bd07 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ com.destroystokyo.paper - paper-api + paper 1.16.2-R0.1-SNAPSHOT provided @@ -45,6 +45,11 @@ RELEASE compile + + commons-io + commons-io + 2.6 + @@ -57,6 +62,26 @@ + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + + + ${project.groupId}.Challenges + + + + + + + maven-compiler-plugin 3.8.1 diff --git a/src/main/java/de/fanta/challenges/Bingo.java b/src/main/java/de/fanta/challenges/Bingo.java index 983af17..5a03a34 100644 --- a/src/main/java/de/fanta/challenges/Bingo.java +++ b/src/main/java/de/fanta/challenges/Bingo.java @@ -1,5 +1,6 @@ package de.fanta.challenges; +import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; import de.fanta.challenges.utils.ChatUtil; import de.fanta.challenges.utils.guiutils.GUIUtils; import org.bukkit.Bukkit; @@ -65,11 +66,11 @@ player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); if(plugin.getScoreManager().getScore(player) == materials.size()){ - ChatUtil.sendNormalMessage(player, "Wuhuu du hast gewonnen :>"); plugin.getTimer().stopTimer(); GUIUtils.sendTitleToAll("Event", ChatUtil.BLUE + player.getName() + ChatUtil.GREEN + " hat alle Items gefunden!", ChatUtil.BLUE); + String[] lines = {"","",""," " + ChatUtil.BLUE + player.getName(),ChatUtil.GREEN + " hat alle Items gefunden!","","",""}; + ChatSkull.sendAll(player, lines); for (Player pp : Bukkit.getOnlinePlayers()) { - ChatUtil.sendNormalMessage(pp, ChatUtil.BLUE + player.getName() + ChatUtil.GREEN + " hat alle Items gefunden!"); pp.setGameMode(GameMode.SPECTATOR); } } diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index c27bcc0..a2e8416 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -60,9 +60,9 @@ private FileConfiguration BackpackConfig; - private File RndDropsConfigFile; + public File RndDropsConfigFile; - private FileConfiguration RndDropsConfig; + public FileConfiguration RndDropsConfig; private Timer timer; @@ -160,7 +160,7 @@ pM.callEvent(new ServerStatusChangedEvent(true)); pM.callEvent(new TimerChangedEvent(timer.isRunning())); pM.callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); - }, 200L); + }, 60L); } @Override diff --git a/src/main/java/de/fanta/challenges/challenges/RandomDrops.java b/src/main/java/de/fanta/challenges/challenges/RandomDrops.java index 0293e67..d1142de 100644 --- a/src/main/java/de/fanta/challenges/challenges/RandomDrops.java +++ b/src/main/java/de/fanta/challenges/challenges/RandomDrops.java @@ -1,5 +1,6 @@ package de.fanta.challenges.challenges; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -39,6 +40,11 @@ public void saveItems() { FileConfiguration config = Challenges.getPlugin().getRndDropsConfig(); config.set("drops", this.drops.entrySet().stream().map(entry -> (new StringBuilder()).append(entry.getKey()).append(":").append(entry.getValue()).toString()).collect(Collectors.toList())); + try { + Challenges.getPlugin().RndDropsConfig.save(Challenges.getPlugin().RndDropsConfigFile); + } catch (IOException e) { + e.printStackTrace(); + } } public void loadItems() { diff --git a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java index 96b9d1d..c7882d0 100644 --- a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java +++ b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java @@ -4,6 +4,7 @@ import de.fanta.challenges.commands.challenges.ChallengesCommand; import de.fanta.challenges.commands.challenges.ChallengesHelpCommand; import de.fanta.challenges.commands.challenges.ChallengesKickCommand; +import de.fanta.challenges.commands.challenges.ChallengesSaveCommand; import de.fanta.challenges.commands.coords.CoordsCommand; import de.fanta.challenges.commands.coords.CoordsDeleteCommand; import de.fanta.challenges.commands.coords.CoordsGetCommand; @@ -48,6 +49,7 @@ challengesRouter.addCommandMapping(new ChallengesCommand(plugin)); challengesRouter.addCommandMapping(new ChallengesHelpCommand(plugin), "help"); challengesRouter.addCommandMapping(new ChallengesKickCommand(plugin), "kick"); + challengesRouter.addCommandMapping(new ChallengesSaveCommand(plugin), "save"); CommandRouter resetRouter = new CommandRouter(plugin.getCommand("reset")); resetRouter.addCommandMapping(new ResetCommand(plugin)); diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSaveCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSaveCommand.java new file mode 100644 index 0000000..f4b97ca --- /dev/null +++ b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSaveCommand.java @@ -0,0 +1,55 @@ +package de.fanta.challenges.commands.challenges; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.utils.ChatUtil; +import de.fanta.challenges.utils.SaveWorldUtils; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class ChallengesSaveCommand extends SubCommand { + + private final Challenges plugin; + + public ChallengesSaveCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + //TODO Save World + UUID uuid = plugin.getCurrentEditor().getUniqueId(); + if (plugin.getConfig().getBoolean("firsttimerstart")) { + ChatUtil.sendNormalMessage(sender, "Challenge wird gespeichert!"); + try { + SaveWorldUtils.saveWorld(uuid); + } catch (Exception ex) { + ex.printStackTrace(); + ChatUtil.sendErrorMessage(sender, "Challenge konnte nicht gespeichert werden!"); + return false; + } + ChatUtil.sendNormalMessage(sender, "Challenge wurde erfolgreich gespeichert!"); + } else { + ChatUtil.sendErrorMessage(sender, "Die Challenge wurde noch nicht gestartet!"); + } + return true; + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!"); + 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; + } + } +} diff --git a/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java b/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java new file mode 100644 index 0000000..8425058 --- /dev/null +++ b/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java @@ -0,0 +1,69 @@ +package de.fanta.challenges.utils; + +import de.fanta.challenges.Challenges; +import net.minecraft.server.v1_16_R2.WorldServer; +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_16_R2.CraftWorld; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.util.UUID; +import java.util.logging.Level; + +public class SaveWorldUtils { + + public static void saveWorld(UUID uuid) { + Challenges.getPlugin().getConfig().set("timertime", Challenges.getPlugin().getTimer().getTime()); + Challenges.getPlugin().saveConfig(); + World world_world = Bukkit.getWorlds().get(0); + World world_nether = Bukkit.getWorlds().get(1); + World world_end = Bukkit.getWorlds().get(2); + world_world.save(); + world_nether.save(); + world_end.save(); + CraftWorld craftWorld = (CraftWorld) world_world; + WorldServer handle = craftWorld.getHandle(); + CraftWorld craftEnd = (CraftWorld) world_end; + WorldServer handleend = craftEnd.getHandle(); + CraftWorld craftNether = (CraftWorld) world_nether; + WorldServer handlenether = craftNether.getHandle(); + for (Player p : Bukkit.getOnlinePlayers()) { + p.saveData(); + } + try { + handle.save(null, true, false); + handleend.save(null, true, false); + handlenether.save(null, true, false); + } catch (Exception e) { + Bukkit.getLogger().log(Level.SEVERE, "Exception while saving world", e); + } + File dir = new File(uuid.toString()); + File configs = new File("plugins/Challenges"); + File end = new File("world_the_end"); + File nether = new File("world_nether"); + File world = new File("world"); + File saveend = new File(uuid.toString() + "/world_the_end"); + File savenether = new File(uuid.toString() + "/world_nether"); + File saveworld = new File(uuid.toString() + "/world"); + File saveconfigs = new File(uuid.toString() + "/Challenges"); + File loaddir = new File("/home/minecraft/saves/" + uuid); + try { + FileUtils.forceMkdir(dir); + FileUtils.copyDirectory(configs, saveconfigs); + FileUtils.copyDirectory(end, saveend); + FileUtils.copyDirectory(nether, savenether); + FileUtils.copyDirectory(world, saveworld); + if (dir.isDirectory()) { + FileUtils.deleteDirectory(loaddir); + } + FileUtils.moveDirectory(dir, loaddir); + } catch (IOException ex) { + ex.printStackTrace(); + } + + } + +}