diff --git a/src/main/java/de/fanta/challengesjoinentities/ChallengesGlobalDataHelper.java b/src/main/java/de/fanta/challengesjoinentities/ChallengesGlobalDataHelper.java index 296530e..ddb4c44 100644 --- a/src/main/java/de/fanta/challengesjoinentities/ChallengesGlobalDataHelper.java +++ b/src/main/java/de/fanta/challengesjoinentities/ChallengesGlobalDataHelper.java @@ -113,7 +113,7 @@ Player p = Bukkit.getPlayer(uuid); if (p != null) { server.spawnPiglin(p); - GlobalApi.portOnlinePlayerToLocation(p.getName(), server.getGPLocation()); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> GlobalApi.portOnlinePlayerToLocation(p.getName(), server.getGPLocation()), 100L); } } break; @@ -127,7 +127,7 @@ if (p != null) { server.spawnPiglin(p); //server.spawnNPC(p); - GlobalApi.portOnlinePlayerToLocation(p.getName(), server.getGPLocation()); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> GlobalApi.portOnlinePlayerToLocation(p.getName(), server.getGPLocation()), 100L); } break; } diff --git a/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java b/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java index f17d4fe..41453e8 100644 --- a/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java +++ b/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java @@ -103,7 +103,7 @@ adventurerouter.addCommandMapping(new AdventureAddMapCommand(this), "addmap"); adventurerouter.addCommandMapping(new AdventureMapsCommand(this), "maps"); adventurerouter.addCommandMapping(new AdventureTestMapCommand(this), "testmap"); - adventurerouter.addCommandMapping(new ChallengesRemovePlayerServer(), "removeplayerfromserver"); + adventurerouter.addCommandMapping(new ChallengesRemovePlayerServer(this), "removeplayerfromserver"); } Bukkit.getPluginManager().registerEvents(new EntityListener(this), this); Bukkit.getPluginManager().registerEvents(new PlayerListener(this), this); diff --git a/src/main/java/de/fanta/challengesjoinentities/Config.java b/src/main/java/de/fanta/challengesjoinentities/Config.java index 3459847..47dfee4 100644 --- a/src/main/java/de/fanta/challengesjoinentities/Config.java +++ b/src/main/java/de/fanta/challengesjoinentities/Config.java @@ -112,11 +112,11 @@ } public Optional getOnlineChanllengeServer() { - return this.challengeServers.stream().filter(server -> !server.isOnline()).findFirst(); + return challengeServers.stream().filter(server -> !server.isOnline()).findFirst(); } public Optional getOnlineAdventureServer() { - return this.adventureServers.stream().filter(server -> !server.isOnline()).findFirst(); + return adventureServers.stream().filter(server -> !server.isOnline()).findFirst(); } } diff --git a/src/main/java/de/fanta/challengesjoinentities/Server.java b/src/main/java/de/fanta/challengesjoinentities/Server.java index d4588d5..b5385be 100644 --- a/src/main/java/de/fanta/challengesjoinentities/Server.java +++ b/src/main/java/de/fanta/challengesjoinentities/Server.java @@ -3,16 +3,14 @@ import org.apache.commons.io.FileUtils; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; -import java.io.BufferedReader; import java.io.File; import java.io.IOException; -import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import java.util.UUID; -import java.util.logging.Level; public class Server { public static HashMap serverPlayers = new HashMap<>(); @@ -85,9 +83,9 @@ } if (isAutosave) { - load(p, this.serverType.getDir(), uuid + "/autosave"); + load(p, this.serverType.getDir(), uuid + "/autosave", getMapVersion(new File(dir + "/Challenges/serverconfig.yml"))); //TODO LOAD VERSION FROM ADVENTURE CONFIG } else { - load(p, this.serverType.getDir(), uuid + "/1"); + load(p, this.serverType.getDir(), uuid + "/1", getMapVersion(new File(dir + "/Challenges/serverconfig.yml"))); //TODO LOAD VERSION FROM ADVENTURE CONFIG } } @@ -109,7 +107,7 @@ serverPlayers.remove(this); return; } - load(p, this.serverType.getDir(), mapname); + load(p, this.serverType.getDir(), mapname, getMapVersion(new File(dir + "/Challenges/serverconfig.yml"))); //TODO LOAD VERSION FROM ADVENTURE CONFIG } public void loadNewAdventure(Player player, String category, String map) { @@ -122,14 +120,17 @@ serverPlayers.remove(this); return; } - load(player, "Adventure-Maps", category + "/" + map); + load(player, "Adventure-Maps", category + "/" + map, getMapVersion(new File(dir + "/Challenges/serverconfig.yml"))); //TODO LOAD VERSION FROM ADVENTURE CONFIG } - public void load(Player p, String serverTypeDir, String targetDir) { + public void load(Player p, String serverTypeDir, String targetDir, String ServerVersion) { File configs = new File("/home/minecraft/" + this.dir + "/plugins/Challenges"); File end = new File("/home/minecraft/" + this.dir + "/world_the_end"); File nether = new File("/home/minecraft/" + this.dir + "/world_nether"); File world = new File("/home/minecraft/" + this.dir + "/world"); + File mlgworld = new File("/home/minecraft/" + this.dir + "/mlg_challenge"); + File serverJar = new File("/home/minecraft/" + this.dir + "/paper.jar"); + File saveServerJar = new File("/home/minecraft/ServerJars/" + ServerVersion + "/paper.jar"); File saveend = new File("/home/minecraft/" + serverTypeDir + "/" + targetDir + "/world_the_end"); File savenether = new File("/home/minecraft/" + serverTypeDir + "/" + targetDir + "/world_nether"); File saveworld = new File("/home/minecraft/" + serverTypeDir + "/" + targetDir + "/world"); @@ -141,6 +142,13 @@ FileUtils.deleteDirectory(end); FileUtils.deleteDirectory(nether); } + if (mlgworld.isDirectory()){ + FileUtils.deleteDirectory(mlgworld); + } + if (serverJar.exists()) { + FileUtils.delete(serverJar); + } + FileUtils.copyFile(saveServerJar, serverJar); FileUtils.copyDirectory(saveconfigs, configs); FileUtils.copyDirectory(saveworld, world); FileUtils.copyDirectory(savenether, nether); @@ -160,15 +168,9 @@ ProcessBuilder processBuilder = new ProcessBuilder(); processBuilder.command("screen", "-AmdS", player.getName(), "./start.sh").directory(new File("/home/minecraft/" + this.dir)); try { - Process process = processBuilder.start(); - Bukkit.getLogger().info(this.serverType.toString().toLowerCase() + " Server: " + this.serverType.toString().toLowerCase() + " wurde von " + player.getName() + " gestartet!"); - BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); - String line; - while ((line = reader.readLine()) != null) - plugin.getLogger().log(Level.SEVERE, line); - int exitCode = process.waitFor(); - plugin.getLogger().log(Level.SEVERE, "Exited with error code : " + exitCode); - } catch (IOException | InterruptedException e) { + processBuilder.start(); + Bukkit.getLogger().info(this.serverType.toString().toLowerCase() + " Server: " + getServerfromPlayer(player).gPLocation + " wurde von " + player.getName() + " gestartet!"); + } catch (IOException e) { e.printStackTrace(); } } @@ -188,4 +190,31 @@ public void despawnNPC() { this.plugin.despawnNPC(this.name); } + + public String getMapVersion(File config) { + String serverVersion; + YamlConfiguration serverConfiguration = new YamlConfiguration(); + if (!config.exists()) { + serverVersion = "latest"; + return serverVersion; + } + try { + serverConfiguration.load(config); + } catch (IOException | org.bukkit.configuration.InvalidConfigurationException e) { + e.printStackTrace(); + } + String configServerVersion = serverConfiguration.getString("serverversion"); + File serverversionfolder = new File("/home/minecraft/ServerJars/" + configServerVersion); + if (configServerVersion != null) { + if (serverversionfolder.isDirectory()) { + serverVersion = configServerVersion; + } else { + serverVersion = "latest"; + } + } else { + serverVersion = "latest"; + } + System.out.println(serverVersion); + return serverVersion; + } } \ No newline at end of file diff --git a/src/main/java/de/fanta/challengesjoinentities/adventure/AdventureMap.java b/src/main/java/de/fanta/challengesjoinentities/adventure/AdventureMap.java index d636b31..c73d063 100644 --- a/src/main/java/de/fanta/challengesjoinentities/adventure/AdventureMap.java +++ b/src/main/java/de/fanta/challengesjoinentities/adventure/AdventureMap.java @@ -31,7 +31,7 @@ this.plugin = plugin; this.item = new ItemStack((material != null) ? material : Material.STONE); ItemMeta meta = this.item.getItemMeta(); - meta.setDisplayName("" + ChatUtil.ORANGE + ChatColor.BOLD + getName()); + meta.setDisplayName("" + ChatUtil.ORANGE + ChatColor.BOLD + getName().replace("_", " ")); List lore = new ArrayList<>(); lore.add(""); lore.add(ChatUtil.GREEN + "Erbauer: " + ChatUtil.BLUE + creator); diff --git a/src/main/java/de/fanta/challengesjoinentities/adventure/Category.java b/src/main/java/de/fanta/challengesjoinentities/adventure/Category.java index a01449a..d935023 100644 --- a/src/main/java/de/fanta/challengesjoinentities/adventure/Category.java +++ b/src/main/java/de/fanta/challengesjoinentities/adventure/Category.java @@ -38,7 +38,7 @@ this.maps = maps; this.item = new ItemStack((material != null) ? material : Material.STONE); ItemMeta meta = this.item.getItemMeta(); - meta.setDisplayName("" + ChatUtil.ORANGE + ChatColor.BOLD + getName()); + meta.setDisplayName("" + ChatUtil.ORANGE + ChatColor.BOLD + getName().replace("_", " ")); List lore = new ArrayList<>(); lore.add(""); lore.add(ChatUtil.GREEN + "Maps: " + ChatUtil.BLUE + maps.size()); diff --git a/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/ChallengesRemovePlayerServer.java b/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/ChallengesRemovePlayerServer.java index b3382b2..5ee0664 100644 --- a/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/ChallengesRemovePlayerServer.java +++ b/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/ChallengesRemovePlayerServer.java @@ -1,6 +1,8 @@ package de.fanta.challengesjoinentities.commands.AdventureCommand; +import de.fanta.challengesjoinentities.ChallengesJoinEntities; import de.fanta.challengesjoinentities.ChatUtil; +import de.fanta.challengesjoinentities.Config; import de.fanta.challengesjoinentities.Server; import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.commands.ArgsParser; @@ -10,8 +12,9 @@ import org.bukkit.entity.Player; public class ChallengesRemovePlayerServer extends SubCommand { - - public ChallengesRemovePlayerServer() { + private final ChallengesJoinEntities plugin; + public ChallengesRemovePlayerServer(ChallengesJoinEntities plugin) { + this.plugin = plugin; } public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { @@ -27,13 +30,19 @@ String next = args.getNext(); if (next.equalsIgnoreCase("all")) { Server.serverPlayers.clear(); + plugin.getPluginConfig().getAdventureServers().removeIf(Server::isOnline); + plugin.getPluginConfig().getChallengeServers().removeIf(Server::isOnline); ChatUtil.sendNormalMessage(p, "Server liste geleert!"); } else { Player serverplayer = Bukkit.getPlayer(next); if (serverplayer != null) { if (Server.serverPlayers.containsValue(serverplayer.getUniqueId())) { Server.serverPlayers.remove(Server.getServerfromPlayer(serverplayer)); + plugin.getPluginConfig().getAdventureServers().removeIf(server -> server.getName().equals(next)); + plugin.getPluginConfig().getChallengeServers().removeIf(server -> server.getName().equals(next)); ChatUtil.sendNormalMessage(p, "Spieler " + next + " wurde aus der liste entfernt!"); + } else { + ChatUtil.sendNormalMessage(p, "Es ist kein Server von " + next + " Online!"); } } else { ChatUtil.sendErrorMessage(p, "Spieler " + next + " ist nicht Online"); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index a7a8ee8..470ed0d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,7 +2,7 @@ main: de.fanta.challengesjoinentities.ChallengesJoinEntities version: ${project.version} author: ${project.author} -api-version: 1.17 +api-version: 1.13 depend: [GlobalClient, CubesideUtils, GlobalPort, CubesideNMSUtils] softdepend: [Challenges, Citizens]