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