diff --git a/pom.xml b/pom.xml index 559c098..61899b4 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 de.fanta.challenges Challenges - 1.17-DEV + 1.17.1-DEV UTF-8 UTF-8 @@ -12,8 +12,8 @@ - destroystokyo-repo - https://repo.destroystokyo.com/repository/maven-public/ + papermc + https://papermc.io/repo/repository/maven-public/ brokkonaut @@ -27,8 +27,8 @@ io.papermc.paper - Paper-API - 1.17-R0.1-SNAPSHOT + paper-api + 1.17.1-R0.1-SNAPSHOT provided diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index e17f6db..455dc51 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -9,30 +9,14 @@ import de.fanta.challenges.events.ServerStatusChangedEvent; import de.fanta.challenges.events.TimerChangedEvent; import de.fanta.challenges.guis.BackpackGui; -import de.fanta.challenges.guis.ResetGui; -import de.fanta.challenges.guis.TimerGui; -import de.fanta.challenges.guis.eventgui.EventGui; -import de.fanta.challenges.guis.eventgui.EventItemsGui; -import de.fanta.challenges.guis.settingsgui.MainGui; -import de.fanta.challenges.guis.settingsgui.OtherSettingsGui; -import de.fanta.challenges.guis.settingsgui.ServerSettingsGui; -import de.fanta.challenges.guis.settingsgui.SettingsGui; -import de.fanta.challenges.listeners.BingoListener; -import de.fanta.challenges.listeners.BlockCreateListener; -import de.fanta.challenges.listeners.BlockDestroyListener; -import de.fanta.challenges.listeners.DamageListener; -import de.fanta.challenges.listeners.DeathListener; -import de.fanta.challenges.listeners.InteractListener; -import de.fanta.challenges.listeners.InventoryClickListener; -import de.fanta.challenges.listeners.PlayerListener; -import de.fanta.challenges.listeners.QuitJoinListener; -import de.fanta.challenges.listeners.VoidListener; +import de.fanta.challenges.listeners.EventRegistration; import de.fanta.challenges.scoreboard.ScoreBoardManager; import de.fanta.challenges.scoreboard.ScoreManager; import de.fanta.challenges.utils.ChatUtil; import de.fanta.challenges.utils.VanishUtils; import de.fanta.challenges.utils.guiutils.GUIUtils; import net.md_5.bungee.api.ChatColor; +import org.apache.commons.io.FileUtils; import org.bukkit.BanList; import org.bukkit.Bukkit; import org.bukkit.GameRule; @@ -46,7 +30,6 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import java.io.File; @@ -55,6 +38,7 @@ import java.util.Arrays; import java.util.List; import java.util.Random; +import java.util.UUID; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -90,6 +74,10 @@ public NMSUtils nmsUtils; + private UUID texturepackid = null; + + public String texturepacklink = null; + public static Challenges getPlugin() { return plugin; } @@ -102,6 +90,8 @@ private boolean waitingForShutdown; + public int resetTaskId = -1; + @Override public void onEnable() { LOGGER = getLogger(); @@ -119,26 +109,7 @@ this.backpack = new BackpackGui(getConfig().getInt("backpack_size") * 9); new CommandRegistration(this).registerCommands(); - - PluginManager pM = Bukkit.getPluginManager(); - pM.registerEvents(new InventoryClickListener(), this); - pM.registerEvents(new QuitJoinListener(), this); - pM.registerEvents(new BlockDestroyListener(), this); - pM.registerEvents(new BlockCreateListener(), this); - pM.registerEvents(new InteractListener(), this); - pM.registerEvents(new DamageListener(), this); - pM.registerEvents(new DeathListener(), this); - pM.registerEvents(new PlayerListener(), this); - pM.registerEvents(new VoidListener(), this); - pM.registerEvents(new TimerGui(), this); - pM.registerEvents(new ResetGui(), this); - pM.registerEvents(new MainGui(), this); - pM.registerEvents(new SettingsGui(), this); - pM.registerEvents(new ServerSettingsGui(), this); - pM.registerEvents(new OtherSettingsGui(), this); - pM.registerEvents(new EventGui(), this); - pM.registerEvents(new BingoListener(), this); - pM.registerEvents(new EventItemsGui(), this); + new EventRegistration(this).registerEvents(); saveDefaultConfig(); reloadConfig(); @@ -149,18 +120,21 @@ getLogger().info("Plugin loaded!"); this.sbManager = new ScoreBoardManager(this); - timer.setTime(getConfig().getInt("timertime")); - Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> { World world = Bukkit.getWorld("world"); world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false); checkMLGWorld(); - plugin.getSBManager().initScoreboard(); + if (Bukkit.getMotd().equalsIgnoreCase("Challenge")) { + plugin.getSBManager().initScoreboard(); + } }, 1L); CavesAndCliffs = getConfig().getBoolean("1-18-datapack"); if (getConfig().getBoolean("World_Reset")) { + if (!getConfig().getBoolean("firsttimerstart")) { + timer.setTime(0); + } File config = new File(plugin.getDataFolder(), "config.yml"); config.delete(); reloadConfig(); @@ -173,13 +147,48 @@ this.getBackpack().resize(getConfig().getInt("backpack_size") * 9); this.rndDrops.loadItems(); this.backpack.loadInventoryFromConfig(); + timer.setTime(getConfig().getInt("timertime")); + } + + + if (Bukkit.getMotd().equalsIgnoreCase("Adventure")) { //TODO Challenges Load Server + startResetTask(); + + File texturepack = new File("world/resources.zip"); + if (texturepack.exists()) { + texturepackid = UUID.randomUUID(); + File texturepackdownload = new File("/var/www/html/AdventureMap-TexturePacks/" + texturepackid + "/"); + File temp = new File(texturepackid.toString()); + try { + FileUtils.forceMkdir(temp); + FileUtils.moveFileToDirectory(texturepack, temp, false); + File renameTP = new File(texturepackid.toString() + "/" + "resources.zip"); + File renamedTP = new File(texturepackid.toString() + "/" + texturepackid + ".zip"); + renameTP.renameTo(renamedTP); + if (temp.isDirectory()) { + FileUtils.moveDirectory(temp, texturepackdownload); + } else { + System.out.println("Ordner nicht da!"); + } + + texturepacklink = "https://fantacs.de/AdventureMap-TexturePacks/" + texturepackid + "/" + texturepackid + ".zip"; + System.out.println(texturepacklink); + } catch (IOException e) { + e.printStackTrace(); + } + } + getConfig().set("showtimer", false); + + } else { + getConfig().set("showtimer", true); } Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> { - pM.callEvent(new ServerStatusChangedEvent(true)); - pM.callEvent(new TimerChangedEvent(timer.isRunning())); - pM.callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); + EventRegistration.pM.callEvent(new ServerStatusChangedEvent(true)); + EventRegistration.pM.callEvent(new TimerChangedEvent(timer.isRunning())); + EventRegistration.pM.callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); }, 60L); + } @Override @@ -201,6 +210,19 @@ GUIUtils.setConfig("event.enabled", false); getScoreManager().saveScores(); } + if (texturepackid != null) { + File temp = new File(texturepackid.toString()); + if (temp.isDirectory()) { + temp.delete(); + } + } + + File texturepackdownload = new File("/var/www/html/AdventureMap-TexturePacks/" + texturepackid); + if (texturepackdownload.isDirectory()) { + System.out.println("Delete File " + texturepackdownload.getAbsolutePath()); + texturepackdownload.delete(); + } + saveConfig(); getLogger().info("Plugin unloaded"); } @@ -322,6 +344,16 @@ return hasEditor() && currentEditor.getUniqueId().equals(player.getUniqueId()); } + public void startResetTask() { + resetTaskId = Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm"), 3 * 60 * 20); + System.out.println("Reset in 3 Minuten"); + } + + public void stopResetTask() { + Bukkit.getScheduler().cancelTask(resetTaskId); + resetTaskId = -1; + } + public Timer getTimer() { return timer; } diff --git a/src/main/java/de/fanta/challenges/Timer.java b/src/main/java/de/fanta/challenges/Timer.java index 1596a50..382e625 100644 --- a/src/main/java/de/fanta/challenges/Timer.java +++ b/src/main/java/de/fanta/challenges/Timer.java @@ -38,7 +38,7 @@ this.plugin = plugin; this.random = new Random(); this.maxMLGTime = plugin.getConfig().getInt("mlg.maxtime"); - this.mode = TimerMode.DOWN; + this.mode = TimerMode.UP; if (!isRunning()) { sendIdleActionBar(); @@ -140,7 +140,10 @@ private void sendTimerActionBar(ChatColor color) { for (Player p : Bukkit.getOnlinePlayers()) { if (!plugin.getVanish().isVanish(p)) { - p.sendActionBar(formatTime(color)); + if (plugin.getConfig().getBoolean("showtimer")) { + p.sendActionBar(formatTime(color)); + } + } } } diff --git a/src/main/java/de/fanta/challenges/challenges/RandomDrops.java b/src/main/java/de/fanta/challenges/challenges/RandomDrops.java index 8e2ef00..4a2ea8e 100644 --- a/src/main/java/de/fanta/challenges/challenges/RandomDrops.java +++ b/src/main/java/de/fanta/challenges/challenges/RandomDrops.java @@ -21,8 +21,8 @@ private final HashMap drops = new HashMap<>(); public RandomDrops() { - this.BLOCKS = (ArrayList) Arrays. stream(Material.values()).filter(Material::isBlock).collect(Collectors.toList()); - this.ITEM_DROPS = (ArrayList) Arrays. stream(Material.values()).filter(mat -> (mat.isItem() || mat == Material.BEDROCK)).collect(Collectors.toList()); + this.BLOCKS = (ArrayList) Arrays.stream(Material.values()).filter(mat -> (mat.isBlock() && mat != Material.AIR && mat != Material.CAVE_AIR && mat != Material.VOID_AIR)).collect(Collectors.toList()); + this.ITEM_DROPS = (ArrayList) Arrays.stream(Material.values()).filter(mat -> (mat.isItem() && mat != Material.FILLED_MAP)).collect(Collectors.toList()); } public void shuffleItems() { diff --git a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java index 60d745c..b3069a3 100644 --- a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java +++ b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java @@ -36,12 +36,7 @@ import de.fanta.challenges.commands.timer.TimerStartCommand; import de.iani.cubesideutils.bukkit.commands.CommandRouter; -public class CommandRegistration { - private final Challenges plugin; - - public CommandRegistration(Challenges plugin) { - this.plugin = plugin; - } +public record CommandRegistration(Challenges plugin) { public void registerCommands() { diff --git a/src/main/java/de/fanta/challenges/commands/LeaveCommand.java b/src/main/java/de/fanta/challenges/commands/LeaveCommand.java index 26fa2bd..ba4f078 100644 --- a/src/main/java/de/fanta/challenges/commands/LeaveCommand.java +++ b/src/main/java/de/fanta/challenges/commands/LeaveCommand.java @@ -4,6 +4,8 @@ import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.commands.ArgsParser; import de.speedy64.globalport.GlobalApi; +import net.md_5.bungee.api.ChatColor; +import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -15,11 +17,15 @@ @Override public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { + if (!(sender instanceof Player p)) { ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); return true; } else { - GlobalApi.portOnlinePlayerToLocation(sender.getName(), "challenge"); + if (Bukkit.getMotd().equalsIgnoreCase("Challenge")) { + GlobalApi.portOnlinePlayerToLocation(p.getName(), "challenge"); + } else if (Bukkit.getMotd().equalsIgnoreCase("Adventure")) { + GlobalApi.portOnlinePlayerToLocation(p.getName(), "adventure"); + } } return true; } diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSaveCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSaveCommand.java index cb24f56..62ade08 100644 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSaveCommand.java +++ b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSaveCommand.java @@ -28,29 +28,47 @@ return true; } - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { - UUID uuid = plugin.getCurrentEditor().getUniqueId(); - if (plugin.getConfig().getBoolean("firsttimerstart")) { - ChatUtil.sendNormalMessage(sender, "Challenge wird gespeichert!"); + if (!args.hasNext()) { + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + UUID uuid = plugin.getCurrentEditor().getUniqueId(); + if (plugin.getConfig().getBoolean("firsttimerstart")) { + ChatUtil.sendNormalMessage(sender, "Welt wird gespeichert!"); + try { + SaveWorldUtils.saveWorld(uuid.toString()); + } catch (Exception ex) { + Bukkit.getLogger().log(Level.SEVERE, "Could not save world ", ex); + ChatUtil.sendErrorMessage(sender, "Welt konnte nicht gespeichert werden!"); + return true; + } + ChatUtil.sendNormalMessage(sender, "Welt wurde erfolgreich gespeichert!"); + } else { + ChatUtil.sendErrorMessage(sender, "Die Map 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; + } + } else { + if (sender.hasPermission("challenges.save.admin")) { + String next = args.getNext(); + ChatUtil.sendNormalMessage(sender, "Welt wird gespeichert!"); try { - SaveWorldUtils.saveWorld(uuid); + SaveWorldUtils.saveWorld(next); } catch (Exception ex) { Bukkit.getLogger().log(Level.SEVERE, "Could not save world ", ex); - ChatUtil.sendErrorMessage(sender, "Challenge konnte nicht gespeichert werden!"); + ChatUtil.sendErrorMessage(sender, "Welt konnte nicht gespeichert werden!"); return true; } - ChatUtil.sendNormalMessage(sender, "Challenge wurde erfolgreich gespeichert!"); + ChatUtil.sendNormalMessage(sender, "Welt wurde erfolgreich gespeichert!"); } else { - ChatUtil.sendErrorMessage(sender, "Die Challenge wurde noch nicht gestartet!"); + ChatUtil.sendErrorMessage(sender, "Keine rechte!"); } - 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; } + return true; } } diff --git a/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java b/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java index 0c3de31..636f2a4 100644 --- a/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java +++ b/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java @@ -64,8 +64,13 @@ plugin.getTimer().stopTimer(); plugin.getTimer().setTime(0); for (Player p : Bukkit.getOnlinePlayers()) { - p.sendTitle(ChatColor.of("#0ddead") + "Server wird zurückgesetzt!", ChatColor.RED + "Bitte warte einen Moment" + ChatColor.of("#0ddead") + "." + ChatColor.AQUA + "." + ChatColor.YELLOW + ".", 10, 220, 10); - GlobalApi.portOnlinePlayerToLocation(p.getName(), "challenge"); + if (Bukkit.getMotd().equalsIgnoreCase("Challenge")) { + p.sendTitle(ChatColor.of("#0ddead") + "Server wird zurückgesetzt!", ChatColor.RED + "Bitte warte einen Moment" + ChatColor.of("#0ddead") + "." + ChatColor.AQUA + "." + ChatColor.YELLOW + ".", 10, 220, 10); + GlobalApi.portOnlinePlayerToLocation(p.getName(), "challenge"); + } else if (Bukkit.getMotd().equalsIgnoreCase("Adventure")) { + p.sendTitle(ChatColor.of("#0ddead") + "Server wird gestoppt!", ChatColor.RED + "Bitte warte einen Moment" + ChatColor.of("#0ddead") + "." + ChatColor.AQUA + "." + ChatColor.YELLOW + ".", 10, 220, 10); + GlobalApi.portOnlinePlayerToLocation(p.getName(), "adventure"); + } } plugin.getConfig().set("World_Name", Bukkit.getWorlds().get(0).getName()); plugin.getConfig().set("World_Reset", true); diff --git a/src/main/java/de/fanta/challenges/commands/timer/TimerStartCommand.java b/src/main/java/de/fanta/challenges/commands/timer/TimerStartCommand.java index 2ef3a65..080b494 100644 --- a/src/main/java/de/fanta/challenges/commands/timer/TimerStartCommand.java +++ b/src/main/java/de/fanta/challenges/commands/timer/TimerStartCommand.java @@ -31,7 +31,7 @@ World world = Bukkit.getWorld("world"); world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, true); plugin.getTimer().startTimer(); - ChatUtil.sendBrodcastMessage(ChatUtil.GREEN + " Der Timer wird fortgesetzt!"); + ChatUtil.sendBrodcastMessage(ChatUtil.GREEN + "Der Timer wird fortgesetzt!"); } else { ChatUtil.sendWarningMessage(sender, "Der Timer läuft bereits!"); } diff --git a/src/main/java/de/fanta/challenges/guis/ResetGui.java b/src/main/java/de/fanta/challenges/guis/ResetGui.java index 91f4e93..7f4e705 100644 --- a/src/main/java/de/fanta/challenges/guis/ResetGui.java +++ b/src/main/java/de/fanta/challenges/guis/ResetGui.java @@ -11,22 +11,37 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; public class ResetGui implements Listener { + private static final Challenges plugin = Challenges.getPlugin(); + + private static final int CAVES_AND_CLIFF_INDEX = 0; private static final int RESET_INDEX = 2; + private static final int SEED_INDEX = 4; + public static final int INVENTORY_SIZE = 5; public static final Inventory RESET_GUI = Bukkit.createInventory(null, InventoryType.HOPPER, Challenges.GUIPREFIX + " >> Reset"); + public static String seed = ""; + public static void createResetGUI(Player p) { - RESET_GUI.setItem(RESET_INDEX, GUIUtils.createGuiItem(Material.REPEATING_COMMAND_BLOCK, ChatColor.DARK_RED + "Server resetten", ChatColor.RED + "Wenn du denn Server resettest wird", ChatColor.RED + "der Server komplett zurückgesetzt", ChatColor.RED + "und du musst von vorne beginnen!")); + RESET_GUI.setItem(RESET_INDEX, GUIUtils.createGuiItem(Material.REPEATING_COMMAND_BLOCK, ChatColor.DARK_RED + "Server resetten", ChatColor.RED + "Wenn du denn Server resettest wird", ChatColor.RED + "der Server komplett zurückgesetzt", ChatColor.RED + "und du musst von vorne beginnen!")); + if (plugin.getConfig().getBoolean("1-18-datapack")) { + RESET_GUI.setItem(CAVES_AND_CLIFF_INDEX, GUIUtils.createGuiItem(Material.POINTED_DRIPSTONE, ChatColor.GREEN + "Caves and Cliff Welt (1.18)", true)); + } else { + RESET_GUI.setItem(CAVES_AND_CLIFF_INDEX, GUIUtils.createGuiItem(Material.POINTED_DRIPSTONE, ChatColor.RED + "Caves and Cliff Welt (1.18)", false)); + } + RESET_GUI.setItem(SEED_INDEX, GUIUtils.createGuiItem(Material.FILLED_MAP, ChatColor.GREEN + "Seed: " + seed)); for (int i = 0; i < INVENTORY_SIZE; i++) { - if (RESET_GUI.getItem(i) == null || RESET_GUI.getItem(i).getType() == Material.AIR) { + ItemStack item = RESET_GUI.getItem(i); + if (item == null || item.getType() == Material.AIR) { RESET_GUI.setItem(i, GUIUtils.EMPTY_ICON); } } - p.openInventory(RESET_GUI); + p.openInventory(RESET_GUI); } @EventHandler @@ -34,9 +49,16 @@ int slot = e.getRawSlot(); Player p = (Player) e.getWhoClicked(); if (RESET_GUI.equals(e.getClickedInventory())) { - if (slot == RESET_INDEX) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm"); - p.closeInventory(); + switch (slot) { + case RESET_INDEX -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm " + plugin.getConfig().getBoolean("1-18-datapack") + " " + seed); + case CAVES_AND_CLIFF_INDEX -> { + if (plugin.getConfig().getBoolean("1-18-datapack")) { + plugin.getConfig().set("1-18-datapack", false); + } else { + plugin.getConfig().set("1-18-datapack", true); + } + createResetGUI(p); + } } e.setCancelled(true); } diff --git a/src/main/java/de/fanta/challenges/guis/TimerGui.java b/src/main/java/de/fanta/challenges/guis/TimerGui.java index 054e4a9..324ec60 100644 --- a/src/main/java/de/fanta/challenges/guis/TimerGui.java +++ b/src/main/java/de/fanta/challenges/guis/TimerGui.java @@ -21,6 +21,8 @@ public static final int INVENTORY_SIZE = 27; public static final Inventory TIMER_GUI = Bukkit.createInventory(null, INVENTORY_SIZE, Challenges.GUIPREFIX + " >> Timer"); + private static final int SHOWTIMER_INDEX = 13; + public static void createTimerGUI(Player p) { if (plugin.getTimer().isReverse()) { @@ -28,6 +30,11 @@ } else { TIMER_GUI.setItem(11, GUIUtils.createGuiItem(Material.MAGENTA_GLAZED_TERRACOTTA, ChatColor.GREEN + "Timer Richtung - vorwärts")); } + if (plugin.getConfig().getBoolean("showtimer")) { + TIMER_GUI.setItem(SHOWTIMER_INDEX, GUIUtils.createGuiItem(Material.OBSERVER, ChatColor.GREEN + "Timer wird angezeigt!", true)); + } else { + TIMER_GUI.setItem(SHOWTIMER_INDEX, GUIUtils.createGuiItem(Material.OBSERVER, ChatColor.RED + "Timer wird nicht angezeigt!", false)); + } if (plugin.getTimer().isRunning()) { TIMER_GUI.setItem(15, GUIUtils.createGuiItem(Material.CLOCK, ChatColor.GREEN + "Timer gestartet", true)); } else { @@ -73,6 +80,15 @@ GUIUtils.sendTitleToAll("Timer", "Der Timer läuft jetzt rückwärts.", ChatColor.AQUA); } p.closeInventory(); + } else if (slot == SHOWTIMER_INDEX) { + if (plugin.getConfig().getBoolean("showtimer")) { + plugin.getConfig().set("showtimer", false); + GUIUtils.sendTitleToAll("Timer", "Der Timer wird jetzt nicht mehr angezeigt!", ChatColor.RED); + } else { + plugin.getConfig().set("showtimer", true); + GUIUtils.sendTitleToAll("Timer", "Der Timer wird jetzt wieder angezeigt!", ChatColor.GREEN); + } + createTimerGUI(p); } e.setCancelled(true); } diff --git a/src/main/java/de/fanta/challenges/guis/settingsgui/OtherSettingsGui.java b/src/main/java/de/fanta/challenges/guis/settingsgui/OtherSettingsGui.java index a58a636..bbf36b6 100644 --- a/src/main/java/de/fanta/challenges/guis/settingsgui/OtherSettingsGui.java +++ b/src/main/java/de/fanta/challenges/guis/settingsgui/OtherSettingsGui.java @@ -22,6 +22,8 @@ private static final int DMG_INCHAT_INDEX = 11; private static final int TNT_DEATH_INDEX = 12; private static final int TAB_HP_INDEX = 13; + private static final int DIREKT_SMLET_INDEX = 14; + private static final int FAST_FURNACE_INDEX = 15; private static final int BACKPACK_ADD_INDEX = 1; private static final int BACKPACK_REMOVE_INDEX = 19; @@ -60,6 +62,17 @@ } else { OTHER_SETTINGS_GUI.setItem(TAB_HP_INDEX, GUIUtils.createGuiItem(Material.HEART_OF_THE_SEA, ChatColor.RED + "Herzen in der Tablist anzeigen deaktiviert")); } + if (plugin.getConfig().getBoolean("silkore")) { + OTHER_SETTINGS_GUI.setItem(DIREKT_SMLET_INDEX, GUIUtils.createGuiItem(Material.IRON_INGOT, ChatColor.GREEN + "Abgebaute Erze droppen Barren aktiviert", true)); + } else { + OTHER_SETTINGS_GUI.setItem(DIREKT_SMLET_INDEX, GUIUtils.createGuiItem(Material.IRON_INGOT, ChatColor.RED + "Abgebaute Erze droppen Barren deaktiviert")); + } + if (plugin.getConfig().getBoolean("speedfurnace.enabled")) { + OTHER_SETTINGS_GUI.setItem(FAST_FURNACE_INDEX, GUIUtils.createGuiItem(Material.FURNACE, ChatColor.GREEN + "Schneller Ofen aktiviert", true)); + } else { + OTHER_SETTINGS_GUI.setItem(FAST_FURNACE_INDEX, GUIUtils.createGuiItem(Material.FURNACE, ChatColor.RED + "Schneller Ofen deaktiviert")); + } + OTHER_SETTINGS_GUI.setItem(BACK_INDEX, GUIUtils.createGuiItem(Material.ARROW, ChatColor.GREEN + "Zurück")); OTHER_SETTINGS_GUI.setItem(CLOSE_IDEX, GUIUtils.createGuiItem(Material.BARRIER, ChatColor.RED + "Menü verlassen!")); @@ -117,6 +130,24 @@ } plugin.getSBManager().updateTabHP(); break; + case DIREKT_SMLET_INDEX: + if (plugin.getConfig().getBoolean("silkore")) { + GUIUtils.sendTitleToAll("Einstellungen", "Abgebaute Erze droppen Barren deaktiviert", ChatColor.RED); + GUIUtils.setConfig("silkore", false); + } else { + GUIUtils.sendTitleToAll("Einstellungen", "Abgebaute Erze droppen Barren aktiviert", ChatColor.GREEN); + GUIUtils.setConfig("silkore", true); + } + break; + case FAST_FURNACE_INDEX: + if (plugin.getConfig().getBoolean("speedfurnace.enabled")) { + GUIUtils.sendTitleToAll("Einstellungen", "Schneller Ofen deaktiviert", ChatColor.RED); + GUIUtils.setConfig("speedfurnace.enabled", false); + } else { + GUIUtils.sendTitleToAll("Einstellungen", "Schneller Ofen aktiviert", ChatColor.GREEN); + GUIUtils.setConfig("speedfurnace.enabled", true); + } + break; } createOtherSettingsGUI(p); switch (slot) { diff --git a/src/main/java/de/fanta/challenges/listeners/BlockDestroyListener.java b/src/main/java/de/fanta/challenges/listeners/BlockDestroyListener.java index f1b60e1..2bc69b6 100644 --- a/src/main/java/de/fanta/challenges/listeners/BlockDestroyListener.java +++ b/src/main/java/de/fanta/challenges/listeners/BlockDestroyListener.java @@ -5,9 +5,11 @@ import de.iani.cubesideutils.bukkit.items.ItemGroups; import org.bukkit.GameMode; import org.bukkit.Material; +import org.bukkit.block.Block; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockDropItemEvent; import org.bukkit.event.block.BlockExplodeEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.inventory.ItemStack; @@ -24,21 +26,38 @@ } if ((!plugin.getTimer().isRunning()) && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { e.setCancelled(true); - } + } if (plugin.getConfig().getString("event.type").equals("build") && plugin.getTimer().isRunning()) { Material blockType = e.getBlock().getType(); - if (!ItemTypeListUtil.isInstaBreakBlock(blockType) && !ItemGroups.isDoubleBlockPlant(blockType) && !ItemGroups.isSingleBlockPlant(blockType)) { //TODO VOLLKORN :> + if (!ItemTypeListUtil.isInstaBreakBlock(blockType) && !ItemGroups.isDoubleBlockPlant(blockType) && !ItemGroups.isSingleBlockPlant(blockType)) { //TODO VOLLKORN :> plugin.getScoreManager().updateScore(e.getPlayer(), 1); } } } - + + @EventHandler + public void onBlockDrop(BlockDropItemEvent e) { + if (plugin.getConfig().getBoolean("silkore")) { + Block block = e.getBlock(); + Material dropType = switch (e.getBlockState().getType()) { + case IRON_ORE, DEEPSLATE_IRON_ORE -> Material.IRON_INGOT; + case GOLD_ORE, DEEPSLATE_GOLD_ORE -> Material.GOLD_INGOT; + case COPPER_ORE, DEEPSLATE_COPPER_ORE -> Material.COPPER_INGOT; + default -> null; + }; + if(dropType != null) { + e.getItems().forEach(item -> block.getLocation().getWorld().dropItem(block.getLocation(), new ItemStack(dropType, item.getItemStack().getAmount()))); + e.setCancelled(true); + } + } + } + @EventHandler public void onBlockExplode(BlockExplodeEvent e) { if (this.plugin.getConfig().getBoolean("rnddrops")) { e.blockList().forEach(block -> { - if(!block.getType().isAir()){ - block.getWorld().dropItem(block.getLocation().add(0.5D, 0.5D, 0.5D),new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(block))); + if (!block.getType().isAir()) { + block.getWorld().dropItem(block.getLocation().add(0.5D, 0.5D, 0.5D), new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(block))); block.setType(Material.AIR); } }); diff --git a/src/main/java/de/fanta/challenges/listeners/CommandBlockListener.java b/src/main/java/de/fanta/challenges/listeners/CommandBlockListener.java new file mode 100644 index 0000000..40458cc --- /dev/null +++ b/src/main/java/de/fanta/challenges/listeners/CommandBlockListener.java @@ -0,0 +1,29 @@ +package de.fanta.challenges.listeners; + +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.command.ProxiedCommandSender; +import org.bukkit.command.RemoteConsoleCommandSender; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.server.ServerCommandEvent; + +public class CommandBlockListener implements Listener { + + @EventHandler + public void onDispatchCommandBlockCommand(ServerCommandEvent e) { + + if (e.getSender() instanceof ConsoleCommandSender || e.getSender() instanceof ProxiedCommandSender || e.getSender() instanceof RemoteConsoleCommandSender) { + return; + } + if (e.getCommand().startsWith("/")) { + String command = e.getCommand().replaceFirst("/", ""); + if (!command.startsWith("minecraft:")) { + e.setCommand("minecraft:" + command); + } + } else { + if (!e.getCommand().startsWith("minecraft:")) { + e.setCommand("minecraft:" + e.getCommand()); + } + } + } +} diff --git a/src/main/java/de/fanta/challenges/listeners/DamageListener.java b/src/main/java/de/fanta/challenges/listeners/DamageListener.java index 7d3671d..602b53e 100644 --- a/src/main/java/de/fanta/challenges/listeners/DamageListener.java +++ b/src/main/java/de/fanta/challenges/listeners/DamageListener.java @@ -41,7 +41,7 @@ if (e.getFinalDamage() > 0) { if (e.getCause() == DamageCause.FALL) { if (plugin.getConfig().getBoolean("deathonfall")) { - if (plugin.getConfig().getBoolean("dmginchat")) { ; + if (plugin.getConfig().getBoolean("dmginchat")) { ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + p.getName() + ChatUtil.GREEN + " hat " + ChatUtil.ORANGE + dmg + ChatUtil.GREEN + " HP Schaden genommen durch " + ChatUtil.ORANGE + e.getCause()); } Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> p.setHealth(0), 1); diff --git a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java new file mode 100644 index 0000000..0a6a06e --- /dev/null +++ b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java @@ -0,0 +1,39 @@ +package de.fanta.challenges.listeners; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.guis.ResetGui; +import de.fanta.challenges.guis.TimerGui; +import de.fanta.challenges.guis.eventgui.EventGui; +import de.fanta.challenges.guis.eventgui.EventItemsGui; +import de.fanta.challenges.guis.settingsgui.MainGui; +import de.fanta.challenges.guis.settingsgui.OtherSettingsGui; +import de.fanta.challenges.guis.settingsgui.ServerSettingsGui; +import de.fanta.challenges.guis.settingsgui.SettingsGui; +import org.bukkit.Bukkit; +import org.bukkit.plugin.PluginManager; + +public record EventRegistration(Challenges plugin) { + public static final PluginManager pM = Bukkit.getPluginManager(); + public void registerEvents() { + pM.registerEvents(new InventoryClickListener(), plugin); + pM.registerEvents(new QuitJoinListener(), plugin); + pM.registerEvents(new BlockDestroyListener(), plugin); + pM.registerEvents(new BlockCreateListener(), plugin); + pM.registerEvents(new InteractListener(), plugin); + pM.registerEvents(new DamageListener(), plugin); + pM.registerEvents(new DeathListener(), plugin); + pM.registerEvents(new PlayerListener(), plugin); + pM.registerEvents(new VoidListener(), plugin); + pM.registerEvents(new TimerGui(), plugin); + pM.registerEvents(new ResetGui(), plugin); + pM.registerEvents(new MainGui(), plugin); + pM.registerEvents(new SettingsGui(), plugin); + pM.registerEvents(new ServerSettingsGui(), plugin); + pM.registerEvents(new OtherSettingsGui(), plugin); + pM.registerEvents(new EventGui(), plugin); + pM.registerEvents(new BingoListener(), plugin); + pM.registerEvents(new EventItemsGui(), plugin); + pM.registerEvents(new FurnaceListener(), plugin); + pM.registerEvents(new CommandBlockListener(), plugin); + } +} diff --git a/src/main/java/de/fanta/challenges/listeners/FurnaceListener.java b/src/main/java/de/fanta/challenges/listeners/FurnaceListener.java new file mode 100644 index 0000000..dcca253 --- /dev/null +++ b/src/main/java/de/fanta/challenges/listeners/FurnaceListener.java @@ -0,0 +1,58 @@ +package de.fanta.challenges.listeners; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.utils.ChatUtil; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.Furnace; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.metadata.MetadataValue; + +import java.util.Optional; +import java.util.UUID; + +public class FurnaceListener implements Listener { + + private static final String META_PLACED_BY_PLAYER = "PlacedByPlayer"; + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onFurnacePlace(BlockPlaceEvent e) { + BlockState state = e.getBlockPlaced().getState(); + if(state instanceof Furnace furnace) { + if (plugin.getConfig().getBoolean("speedfurnace.enabled")) { + furnace.setCookSpeedMultiplier(10.0); + } + furnace.setMetadata(META_PLACED_BY_PLAYER, new FixedMetadataValue(plugin, e.getPlayer().getUniqueId().toString())); + furnace.update(); + } + } + + @EventHandler + public void onInteract(PlayerInteractEvent e) { + if (plugin.getConfig().getBoolean("event.enabled")) { + Block block = e.getClickedBlock(); + if(block != null) { + BlockState state = block.getState(); + if(state instanceof Furnace furnace && furnace.hasMetadata(META_PLACED_BY_PLAYER)) { + Optional valueOptional = furnace.getMetadata(META_PLACED_BY_PLAYER).stream().filter(metadataValue -> metadataValue.getOwningPlugin().equals(plugin)).findFirst(); + if(valueOptional.isPresent()){ + UUID uuid = UUID.fromString(valueOptional.get().asString()); + if(!e.getPlayer().getUniqueId().equals(uuid)) { + e.setCancelled(true); + } + ChatUtil.sendNormalMessage(e.getPlayer(), "Dieser Ofen gehört: " + Bukkit.getOfflinePlayer(uuid).getName()); + } + } + } + } + + } +} diff --git a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java index 93d7fc8..a97573a 100644 --- a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java +++ b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java @@ -22,9 +22,12 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import org.kitteh.vanish.event.VanishStatusChangeEvent; +import org.spigotmc.event.player.PlayerSpawnLocationEvent; import java.util.Objects; +import static org.bukkit.Bukkit.getServer; + public class PlayerListener implements Listener { private final Challenges plugin = Challenges.getPlugin(); @@ -97,7 +100,7 @@ public void onPayerMove(PlayerMoveEvent e) { Player player = e.getPlayer(); Location playerloc = player.getLocation(); - if (!plugin.getConfig().getBoolean("firsttimerstart")) { + if (!plugin.getConfig().getBoolean("firsttimerstart") && (Bukkit.getMotd().equalsIgnoreCase("Challenge"))) { if (!plugin.getTimer().isRunning() && player.getGameMode() == GameMode.SURVIVAL) { Location spawn = e.getPlayer().getWorld().getSpawnLocation(); if (playerloc.distance(spawn) > 20) { @@ -148,6 +151,15 @@ } @EventHandler + public void onBucketChatchFish(PlayerBucketEntityEvent e) { + ItemStack itemStack = e.getEntityBucket(); + Bingo bingo = plugin.getBingo(); + if (bingo.isRunning()) { + bingo.addDiscoveredItem(e.getPlayer(), itemStack); + } + } + + @EventHandler public void onBucketEmpty(PlayerBucketEmptyEvent e) { ItemStack itemStack = e.getItemStack(); Player player = e.getPlayer(); @@ -169,6 +181,18 @@ Location spawn = Bukkit.getWorlds().get(1).getSpawnLocation(); e.setRespawnLocation(spawn); } + + if (!e.isBedSpawn() && !e.isAnchorSpawn()) { + e.setRespawnLocation(getServer().getWorlds().get(0).getSpawnLocation().add(0.5, 0.0, 0.5)); + } + } + + @EventHandler + public void onPlayerSpawn(PlayerSpawnLocationEvent e) { + if (!e.getPlayer().hasPlayedBefore()) { + e.setSpawnLocation(getServer().getWorlds().get(0).getSpawnLocation().add(0.5, 0.0, 0.5)); + } + } @EventHandler @@ -201,7 +225,9 @@ plugin.updateEditor(); } } else { - plugin.getSBManager().setScoreboard(p); + if (Bukkit.getMotd().equalsIgnoreCase("Challenge")) { + plugin.getSBManager().setScoreboard(p); + } if (plugin.getCurrentEditor() == null) { plugin.setCurrentEditor(p); } diff --git a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java index 6d04640..e73d31a 100644 --- a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java +++ b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java @@ -5,15 +5,10 @@ import de.fanta.challenges.events.PlayerCountChangedEvent; import de.fanta.challenges.events.ServerStatusChangedEvent; import de.fanta.challenges.utils.ChatUtil; -import de.speedy64.globalport.GlobalApi; import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; -import org.bukkit.GameRule; import org.bukkit.Location; -import org.bukkit.Server; -import org.bukkit.World; import org.bukkit.entity.Player; -import org.bukkit.entity.Spider; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; @@ -25,7 +20,6 @@ public class QuitJoinListener implements Listener { private final Challenges plugin = Challenges.getPlugin(); - private int resetTaskId = -1; @EventHandler public void onPlayerJoin(PlayerJoinEvent e) { @@ -38,46 +32,54 @@ if (plugin.CavesAndCliffs) { if (Via.getAPI().getPlayerVersion(p.getUniqueId()) < 755) { Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { - p.kickPlayer("Du musst mit Minecraft 1.17 Joinen"); + p.kickPlayer("Du musst mit Minecraft " + Bukkit.getServer().getMinecraftVersion() + " Joinen"); }, 3L); } } - if (resetTaskId > 0) { - Bukkit.getScheduler().cancelTask(resetTaskId); - resetTaskId = -1; + if (plugin.resetTaskId > 0) { + plugin.stopResetTask(); } + + if (plugin.texturepacklink != null) { + p.setResourcePack(plugin.texturepacklink); + } + if (plugin.getConfig().getBoolean("nether.enabled") && !p.hasPlayedBefore()) { Location netherspawn = Bukkit.getWorlds().get(1).getSpawnLocation(); p.teleport(netherspawn); } - if (plugin.getVanish().isVanish(p)) { - ChatUtil.sendNormalMessage(p, "Du bist im Vanish, niemand weiß, dass du in der Lobby bist."); - return; - } - ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + p.getName() + ChatUtil.GREEN + " hat die Lobby betreten! " + ChatColor.of("#E4E737") + "[" + (Bukkit.getServer().getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers()) + "/" + Bukkit.getServer().getMaxPlayers() + "]"); - e.setJoinMessage(null); - if (plugin.getConfig().getBoolean("sharedmg")) { - int rnd = new Random().nextInt(Bukkit.getOnlinePlayers().size()); - Player rp = (Player) Bukkit.getServer().getOnlinePlayers().toArray()[rnd]; - p.setHealth(rp.getHealth()); - } - plugin.getSBManager().setScoreboard(p); - - if (plugin.getCurrentEditor() == null) { - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { - if (p.hasPermission("Challenges.editor")) { - plugin.setCurrentEditor(p); - - } else { - ChatUtil.sendWarningMessage(p, "Es ist aktuell kein Editor in dieser Lobby"); - ChatUtil.sendWarningMessage(p, "Um selbst Editor zu werden musst du VIP sein!"); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { + if (!plugin.getVanish().isVanish(p)) { + ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + p.getName() + ChatUtil.GREEN + " hat die Lobby betreten! " + ChatColor.of("#E4E737") + "[" + (Bukkit.getServer().getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers()) + "/" + Bukkit.getServer().getMaxPlayers() + "]"); + e.setJoinMessage(null); + if (plugin.getConfig().getBoolean("sharedmg")) { + int rnd = new Random().nextInt(Bukkit.getOnlinePlayers().size()); + Player rp = (Player) Bukkit.getServer().getOnlinePlayers().toArray()[rnd]; + p.setHealth(rp.getHealth()); } - }, 1L); - } else { - ChatUtil.sendNormalMessage(p, plugin.getCurrentEditor().getName() + " ist der Editor dieser Lobby!"); - } + if (Bukkit.getMotd().equalsIgnoreCase("Challenge")) { + plugin.getSBManager().setScoreboard(p); + } + if (plugin.getCurrentEditor() == null) { + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { + if (p.hasPermission("Challenges.editor")) { + plugin.setCurrentEditor(p); + + } else { + ChatUtil.sendWarningMessage(p, "Es ist aktuell kein Editor in dieser Lobby"); + ChatUtil.sendWarningMessage(p, "Um selbst Editor zu werden musst du VIP sein!"); + } + }, 1L); + } else { + ChatUtil.sendNormalMessage(p, plugin.getCurrentEditor().getName() + " ist der Editor dieser Lobby!"); + } + } else { + ChatUtil.sendNormalMessage(p, "Du bist im Vanish, niemand weiß, dass du in der Lobby bist."); + } + }, 1L); + Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); } @@ -98,37 +100,26 @@ plugin.getTimer().stopTimer(); } + if (Bukkit.getServer().getOnlinePlayers().size() - 1 == 0) { + plugin.startResetTask(); + } + if (!plugin.getVanish().isVanish(player)) { e.setQuitMessage(null); ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + player.getName() + ChatColor.of("#C45B3D") + " hat die Lobby verlassen! " + ChatColor.of("#E4E737") + "[" + (Bukkit.getServer().getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers() - 1) + "/" + Bukkit.getServer().getMaxPlayers() + "]"); this.plugin.getSBManager().removeScoreboard(player); - if (Bukkit.getServer().getOnlinePlayers().size() - 1 == 0) { - System.out.println("Reset ohne Vanish"); - resetTaskId = Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm"); - }, 10 * 60 * 20); - if (plugin.getCurrentEditor() != null && player.getUniqueId().equals(plugin.getCurrentEditor().getUniqueId())) { - plugin.updateEditor(); - } else { - plugin.setCurrentEditor(null); - } - } - Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers() - 1)); + if (player == plugin.getCurrentEditor()) { + plugin.updateEditor(); + } + if (plugin.isWaitingForShutdown() && Bukkit.getOnlinePlayers().size() == 1) { Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { Bukkit.getPluginManager().callEvent(new ServerStatusChangedEvent(false)); }, 1L); } - } else { - if (Bukkit.getServer().getOnlinePlayers().size() - 1 == 0) { - System.out.println("Reset mit Vanish"); - resetTaskId = Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm"); - }, 10 * 60 * 20); - } } } } diff --git a/src/main/java/de/fanta/challenges/listeners/VoidListener.java b/src/main/java/de/fanta/challenges/listeners/VoidListener.java index 76fb3d5..7efb540 100644 --- a/src/main/java/de/fanta/challenges/listeners/VoidListener.java +++ b/src/main/java/de/fanta/challenges/listeners/VoidListener.java @@ -13,6 +13,7 @@ import java.util.Arrays; import java.util.List; import java.util.Random; +import java.util.stream.Collectors; public class VoidListener implements Listener { @@ -30,7 +31,7 @@ public void startTask() { Random random = new Random(); Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, () -> { - List materials = Arrays.asList(Material.values()); + List materials = Arrays.stream(Material.values()).filter(mat -> (mat.isBlock() && mat != Material.AIR && mat != Material.CAVE_AIR && mat != Material.VOID_AIR)).collect(Collectors.toList()); ItemStack randomItem = new ItemStack(materials.get(random.nextInt(materials.size()))); World world = Bukkit.getWorld("VOID"); Location loc = new Location(world, 0.5, 61, 0.5); diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java index e96f125..77cfe06 100644 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java @@ -35,7 +35,9 @@ public void setScoreboard(Player p) { if (this.scoreboard == null) { - initScoreboard(); + if (Bukkit.getMotd().equalsIgnoreCase("Challenge")) { + initScoreboard(); + } } team.addEntry(p.getName()); @@ -45,14 +47,18 @@ public void removeScoreboard(Player p) { if (team != null) { - team.removeEntry(p.getName()); - p.setScoreboard(scoreboard); + if (Bukkit.getMotd().equalsIgnoreCase("Challenge")) { + team.removeEntry(p.getName()); + p.setScoreboard(scoreboard); + } } } public void addScoreboard(Player p) { - team.addEntry(p.getName()); - p.setScoreboard(scoreboard); + if (Bukkit.getMotd().equalsIgnoreCase("Challenge")) { + team.addEntry(p.getName()); + p.setScoreboard(scoreboard); + } } public void updateTabHP() { diff --git a/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java b/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java index 45f3c22..ca34301 100644 --- a/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java +++ b/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java @@ -9,14 +9,13 @@ import java.io.File; import java.io.IOException; -import java.util.UUID; import java.util.logging.Level; public class SaveWorldUtils { private static final Challenges plugin = Challenges.getPlugin(); - public static void saveWorld(UUID uuid) { + public static void saveWorld(String uuid) { Challenges.getPlugin().getConfig().set("timertime", Challenges.getPlugin().getTimer().getTime()); Challenges.getPlugin().saveConfig(); Challenges.getPlugin().getConfig().set("backpack_size", Challenges.getPlugin().getBackpack().getSize() / 9); @@ -37,32 +36,38 @@ nms.getWorldUtils().saveWorldNow(world_end); nms.getWorldUtils().saveWorldNow(world_nether); } - File dir = new File(uuid.toString()); + File dir = new File(uuid); 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 saveend = new File(uuid + "/world_the_end"); + File savenether = new File(uuid + "/world_nether"); + File saveworld = new File(uuid + "/world"); + File saveconfigs = new File(uuid + "/Challenges"); if (Bukkit.getMotd().equals("Challenge")) { 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 (loaddir.isDirectory()) { - FileUtils.deleteDirectory(loaddir); - } - FileUtils.moveDirectory(dir, loaddir); - } catch (IOException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Could not save world ", ex); + if (!loaddir.isDirectory()) { + loaddir.delete(); } + try { + FileUtils.forceMkdir(dir); + FileUtils.copyDirectory(configs, saveconfigs); + FileUtils.copyDirectory(end, saveend); + FileUtils.copyDirectory(nether, savenether); + FileUtils.copyDirectory(world, saveworld); + if (loaddir.isDirectory()) { + FileUtils.deleteDirectory(loaddir); + } + FileUtils.moveDirectory(dir, loaddir); + } catch (IOException ex) { + Bukkit.getLogger().log(Level.SEVERE, "Could not save world ", ex); + } } else if (Bukkit.getMotd().equals("Adventure")) { File loaddir = new File("/home/minecraft/Adventure-saves/" + uuid); + if (!loaddir.isDirectory()) { + loaddir.delete(); + } try { FileUtils.forceMkdir(dir); FileUtils.copyDirectory(configs, saveconfigs); @@ -75,6 +80,7 @@ FileUtils.moveDirectory(dir, loaddir); } catch (IOException ex) { Bukkit.getLogger().log(Level.SEVERE, "Could not save world ", ex); + ChatUtil.sendErrorMessage(Bukkit.getPlayer(uuid), "Map konnte nicht richtig gespeichert werden, bitte versuche es noch einmal"); } } else { throw new RuntimeException("Motd stimmt nicht überein!"); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index ecffdd6..f2ef5b5 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -26,10 +26,15 @@ maxtime: 600 timertime: 0 firsttimerstart: false +showtimer: true Saved_Locations: {} World_Name: world World_Reset: false 1-18-datapack: false +silkore: false +speedfurnace: + enabled: false + multiplier: 10.0 event: enabled: false type: nix