diff --git a/src/main/java/de/nexuslobby/NexusLobby.java b/src/main/java/de/nexuslobby/NexusLobby.java new file mode 100644 index 0000000..fb16113 --- /dev/null +++ b/src/main/java/de/nexuslobby/NexusLobby.java @@ -0,0 +1,257 @@ +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.utils.VoidProtection; +import de.nexuslobby.utils.DoubleJump; +import de.nexuslobby.utils.PlayerHider; +import de.nexuslobby.utils.MaintenanceListener; +import de.nexuslobby.utils.ConfigUpdater; +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +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.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 File visualsFile; + private FileConfiguration visualsConfig; + + public static NexusLobby getInstance() { + return instance; + } + + @Override + public void onEnable() { + instance = this; + + initCustomConfigs(); + + getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); + + moduleManager = new ModuleManager(this); + + // Initialisierung der GUI-Werkzeuge + ArmorStandGUI.init(); + + registerModules(); + moduleManager.enableAll(); + registerListeners(); + + if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { + new NexusLobbyExpansion().register(); + getLogger().info("NexusLobby PAPI Expansion registriert."); + } + + registerCommands(); + getLogger().info("NexusLobby wurde erfolgreich gestartet."); + } + + public void reloadPlugin() { + getLogger().info("Plugin Reload wird gestartet..."); + + if (moduleManager != null) { + moduleManager.disableAll(); + } + + reloadConfig(); + initCustomConfigs(); + + if (portalManager != null) { + portalManager.loadPortals(); + } + + if (moduleManager != null) { + moduleManager.enableAll(); + } + + ArmorStandGUI.init(); + Config.load(); + + getLogger().info("Plugin Reload abgeschlossen."); + } + + private void registerModules() { + moduleManager.registerModule(new ProtectionModule()); + moduleManager.registerModule(new ScoreboardModule()); + moduleManager.registerModule(new ItemsModule()); + 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 + public void onJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + event.setJoinMessage(null); + + BuildCommand.removePlayerFromBuildMode(player); + + String defaultGmName = getConfig().getString("default-gamemode", "ADVENTURE"); + try { + GameMode gm = GameMode.valueOf(defaultGmName.toUpperCase()); + player.setGameMode(gm); + } catch (IllegalArgumentException e) { + player.setGameMode(GameMode.ADVENTURE); + } + } + + private void initCustomConfigs() { + saveDefaultConfig(); + ConfigUpdater.updateConfig("config.yml"); + reloadConfig(); + + File settingsFile = new File(getDataFolder(), "settings.yml"); + if (!settingsFile.exists()) { + saveResource("settings.yml", false); + } + ConfigUpdater.updateConfig("settings.yml"); + + visualsFile = new File(getDataFolder(), "visuals.yml"); + if (!visualsFile.exists()) { + saveResource("visuals.yml", false); + } + ConfigUpdater.updateConfig("visuals.yml"); + + reloadVisualsConfig(); + Config.load(); + } + + public void reloadVisualsConfig() { + if (visualsFile == null) { + visualsFile = new File(getDataFolder(), "visuals.yml"); + } + visualsConfig = YamlConfiguration.loadConfiguration(visualsFile); + } + + 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); + + PluginCommand portalCmd = this.getCommand("portal"); + if (portalCmd != null) { + portalCmd.setExecutor(new PortalCommand(portalManager)); + portalCmd.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()); + + // --- NEXUS TOOLS & CMD REGISTRIERUNG --- + if (getCommand("nexustools") != null) { + getCommand("nexustools").setExecutor(new ArmorStandCommand()); + getCommand("nexustools").setTabCompleter(tabCompleter); + } + + // Wir registrieren nexuscmd (ehemals ascmd) + 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; } +} \ No newline at end of file