318 lines
13 KiB
Java
318 lines
13 KiB
Java
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
|
|
} |