package de.nexuslobby; import de.nexuslobby.api.ModuleManager; import de.nexuslobby.commands.*; import de.nexuslobby.modules.ProtectionModule; import de.nexuslobby.modules.ScoreboardModule; import de.nexuslobby.modules.ItemsModule; import de.nexuslobby.modules.security.SecurityModule; import de.nexuslobby.modules.tablist.TablistModule; import de.nexuslobby.modules.bossbar.BossBarModule; import de.nexuslobby.modules.actionbar.ActionBarModule; import de.nexuslobby.modules.settings.LobbySettingsModule; import de.nexuslobby.modules.portal.PortalManager; import de.nexuslobby.modules.portal.PortalCommand; import de.nexuslobby.modules.servers.ServerSwitcherListener; import de.nexuslobby.modules.armorstandtools.*; import de.nexuslobby.modules.gadgets.GadgetModule; import de.nexuslobby.modules.hologram.HologramModule; import de.nexuslobby.utils.VoidProtection; import de.nexuslobby.utils.DoubleJump; import de.nexuslobby.utils.PlayerHider; import de.nexuslobby.utils.MaintenanceListener; import de.nexuslobby.utils.ConfigUpdater; import de.nexuslobby.utils.UpdateChecker; import me.clip.placeholderapi.expansion.PlaceholderExpansion; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.command.PluginCommand; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; import java.io.File; public class NexusLobby extends JavaPlugin implements Listener { private static NexusLobby instance; private ModuleManager moduleManager; private PortalManager portalManager; private TablistModule tablistModule; private LobbySettingsModule lobbySettingsModule; private ItemsModule itemsModule; private GadgetModule gadgetModule; private HologramModule hologramModule; private DynamicArmorStandModule dynamicArmorStandModule; // Neu hinzugefügt private File visualsFile; private FileConfiguration visualsConfig; private boolean updateAvailable = false; private String latestVersion = ""; public static NexusLobby getInstance() { return instance; } @Override public void onEnable() { instance = this; initCustomConfigs(); getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); moduleManager = new ModuleManager(this); ArmorStandGUI.init(); registerModules(); moduleManager.enableAll(); registerListeners(); if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { new NexusLobbyExpansion().register(); getLogger().info("NexusLobby PAPI Expansion registriert."); } registerCommands(); checkUpdates(); getLogger().info("NexusLobby wurde erfolgreich gestartet."); } private void checkUpdates() { new UpdateChecker(this).getVersion(version -> { if (!this.getDescription().getVersion().equalsIgnoreCase(version)) { this.updateAvailable = true; this.latestVersion = version; getLogger().warning("===================================================="); getLogger().warning("Update gefunden! v" + getDescription().getVersion() + " -> v" + version); getLogger().warning("Autor: M_Viper"); getLogger().warning("===================================================="); } else { getLogger().info("NexusLobby ist aktuell (v" + version + ")."); } }); } public void reloadPlugin() { getLogger().info("Plugin Reload wird gestartet..."); if (moduleManager != null) { moduleManager.disableAll(); } reloadConfig(); visualsConfig = null; reloadVisualsConfig(); Config.load(); if (portalManager != null) { portalManager.loadPortals(); } ArmorStandGUI.init(); if (moduleManager != null) { moduleManager.enableAll(); } getLogger().info("Plugin Reload abgeschlossen. Änderungen wurden übernommen."); } private void registerModules() { moduleManager.registerModule(new ProtectionModule()); moduleManager.registerModule(new ScoreboardModule()); this.itemsModule = new ItemsModule(); moduleManager.registerModule(this.itemsModule); this.gadgetModule = new GadgetModule(); moduleManager.registerModule(this.gadgetModule); this.hologramModule = new HologramModule(); moduleManager.registerModule(this.hologramModule); // Dynamic ArmorStand Module registrieren this.dynamicArmorStandModule = new DynamicArmorStandModule(); moduleManager.registerModule(this.dynamicArmorStandModule); moduleManager.registerModule(new SecurityModule()); moduleManager.registerModule(new BossBarModule()); moduleManager.registerModule(new ActionBarModule()); lobbySettingsModule = new LobbySettingsModule(); moduleManager.registerModule(lobbySettingsModule); tablistModule = new TablistModule(); moduleManager.registerModule(tablistModule); portalManager = new PortalManager(this); moduleManager.registerModule(portalManager); } private void registerListeners() { getServer().getPluginManager().registerEvents(this, this); getServer().getPluginManager().registerEvents(new ServerSwitcherListener(), this); getServer().getPluginManager().registerEvents(new VoidProtection(), this); getServer().getPluginManager().registerEvents(new DoubleJump(), this); getServer().getPluginManager().registerEvents(new PlayerHider(), this); getServer().getPluginManager().registerEvents(new MaintenanceListener(), this); getServer().getPluginManager().registerEvents(new ASTListener(), this); } @EventHandler(priority = EventPriority.LOWEST) public void onJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); event.setJoinMessage(null); player.getInventory().clear(); player.getInventory().setArmorContents(null); BuildCommand.removePlayerFromBuildMode(player); String defaultGmName = getConfig().getString("default-gamemode", "ADVENTURE"); try { player.setGameMode(GameMode.valueOf(defaultGmName.toUpperCase())); } catch (IllegalArgumentException e) { player.setGameMode(GameMode.ADVENTURE); } if (player.hasPermission("nexuslobby.admin") && updateAvailable) { player.sendMessage(" "); player.sendMessage("§8[§6Nexus§8] §aEin neues §6Update §afür §eNexusLobby §aist verfügbar!"); player.sendMessage("§8» §7Version: §c" + getDescription().getVersion() + " §8-> §a" + latestVersion); TextComponent link = new TextComponent("§8» §6Klicke §e§l[HIER] §6zum Herunterladen."); link.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://git.viper.ipv64.net/M_Viper/NexusLobby/releases")); link.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§7Öffnet die Gitea Release-Seite").create())); player.spigot().sendMessage(link); player.sendMessage(" "); } } private void initCustomConfigs() { if (!getDataFolder().exists()) { getDataFolder().mkdirs(); } File configFile = new File(getDataFolder(), "config.yml"); if (!configFile.exists()) { saveResource("config.yml", false); } reloadConfig(); File settingsFile = new File(getDataFolder(), "settings.yml"); if (!settingsFile.exists()) { saveResource("settings.yml", false); } visualsFile = new File(getDataFolder(), "visuals.yml"); if (!visualsFile.exists()) { saveResource("visuals.yml", false); } reloadVisualsConfig(); Config.load(); } public void reloadVisualsConfig() { if (visualsFile == null) { visualsFile = new File(getDataFolder(), "visuals.yml"); } visualsConfig = YamlConfiguration.loadConfiguration(visualsFile); getLogger().info("visuals.yml erfolgreich vom Speicher geladen."); } public FileConfiguration getVisualsConfig() { if (visualsConfig == null) { reloadVisualsConfig(); } return visualsConfig; } @Override public void onDisable() { getServer().getMessenger().unregisterOutgoingPluginChannel(this, "BungeeCord"); if (moduleManager != null) moduleManager.disableAll(); getLogger().info("NexusLobby disabled"); } private void registerCommands() { LobbyTabCompleter tabCompleter = new LobbyTabCompleter(portalManager, hologramModule); PluginCommand portalCmd = this.getCommand("portal"); if (portalCmd != null) { portalCmd.setExecutor(new PortalCommand(portalManager)); portalCmd.setTabCompleter(tabCompleter); } PluginCommand holoCmd = this.getCommand("holo"); if (holoCmd != null) { holoCmd.setExecutor(new HoloCommand(hologramModule)); holoCmd.setTabCompleter(tabCompleter); } PluginCommand maintenanceCmd = this.getCommand("maintenance"); if (maintenanceCmd != null) { maintenanceCmd.setExecutor(new MaintenanceCommand()); maintenanceCmd.setTabCompleter(tabCompleter); } if (getCommand("giveportalwand") != null) getCommand("giveportalwand").setExecutor(new GivePortalToolCommand(this)); if (getCommand("settings") != null) getCommand("settings").setExecutor(new LobbySettingsCommand(lobbySettingsModule)); if (getCommand("build") != null) getCommand("build").setExecutor(new BuildCommand()); if (getCommand("nexustools") != null) { getCommand("nexustools").setExecutor(new ArmorStandCommand()); getCommand("nexustools").setTabCompleter(tabCompleter); } if (getCommand("nexuscmd") != null) { getCommand("nexuscmd").setExecutor(new ArmorStandCmdExecutor()); getCommand("nexuscmd").setTabCompleter(tabCompleter); } PluginCommand nexusCmd = this.getCommand("nexuslobby"); if (nexusCmd != null) { nexusCmd.setExecutor(new NexusLobbyCommand()); nexusCmd.setTabCompleter(tabCompleter); } } public class NexusLobbyExpansion extends PlaceholderExpansion { @Override public @NotNull String getIdentifier() { return "nexuslobby"; } @Override public @NotNull String getAuthor() { return String.join(", ", NexusLobby.this.getDescription().getAuthors()); } @Override public @NotNull String getVersion() { return NexusLobby.this.getDescription().getVersion(); } @Override public boolean persist() { return true; } @Override public String onPlaceholderRequest(Player player, @NotNull String params) { if (player == null) return ""; if (params.equalsIgnoreCase("maintenance_status")) return MaintenanceListener.isMaintenance() ? "§cAktiv" : "§aDeaktiviert"; if (params.equalsIgnoreCase("version")) return NexusLobby.this.getDescription().getVersion(); if (params.equalsIgnoreCase("build_mode")) return BuildCommand.isInBuildMode(player) ? "§aAktiv" : "§cInaktiv"; return null; } } public ModuleManager getModuleManager() { return moduleManager; } public TablistModule getTablistModule() { return tablistModule; } public LobbySettingsModule getLobbySettingsModule() { return lobbySettingsModule; } public ItemsModule getItemsModule() { return itemsModule; } public GadgetModule getGadgetModule() { return gadgetModule; } public HologramModule getHologramModule() { return hologramModule; } public DynamicArmorStandModule getDynamicArmorStandModule() { return dynamicArmorStandModule; } // Getter hinzugefügt }