Files
BlockParty/src/main/java/us/tss3/blockparty/BlockPartyPlugin.java
T
2026-08-07 06:09:24 -04:00

148 lines
4.8 KiB
Java

package us.tss3.blockparty;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.world.WorldUnloadEvent;
import org.bukkit.plugin.java.JavaPlugin;
import us.tss3.blockparty.arena.Arena;
import us.tss3.blockparty.arena.ArenaManager;
import us.tss3.blockparty.command.BlockPartyCommand;
import us.tss3.blockparty.config.ConfigManager;
import us.tss3.blockparty.config.MessagesManager;
import us.tss3.blockparty.listener.GameplayRestrictionListener;
import us.tss3.blockparty.listener.PlayerConnectionListener;
import us.tss3.blockparty.persistence.StatsManager;
import us.tss3.blockparty.placeholder.BlockPartyExpansion;
import us.tss3.blockparty.reward.RewardManager;
import us.tss3.blockparty.scoreboard.ScoreboardManager;
import us.tss3.blockparty.session.SessionManager;
import us.tss3.blockparty.util.SoundUtil;
public class BlockPartyPlugin extends JavaPlugin implements Listener {
private ConfigManager configManager;
private MessagesManager messagesManager;
private ArenaManager arenaManager;
private SessionManager sessionManager;
private ScoreboardManager scoreboardManager;
private RewardManager rewardManager;
private StatsManager statsManager;
private SoundUtil soundUtil;
@Override
public void onEnable() {
saveDefaultConfig();
this.configManager = new ConfigManager(this);
configManager.load();
this.messagesManager = new MessagesManager(this);
messagesManager.load();
this.sessionManager = new SessionManager();
this.soundUtil = new SoundUtil(this);
this.rewardManager = new RewardManager(this);
this.statsManager = new StatsManager(this, configManager.getStorageSettings());
statsManager.init();
this.arenaManager = new ArenaManager(this);
arenaManager.loadAll();
this.scoreboardManager = new ScoreboardManager(this);
scoreboardManager.start();
getServer().getPluginManager().registerEvents(new PlayerConnectionListener(this), this);
getServer().getPluginManager().registerEvents(new GameplayRestrictionListener(this), this);
getServer().getPluginManager().registerEvents(this, this);
BlockPartyCommand commandHandler = new BlockPartyCommand(this);
var command = getCommand("blockparty");
if (command != null) {
command.setExecutor(commandHandler);
command.setTabCompleter(commandHandler);
}
registerPlaceholderApi();
getLogger().info("BlockParty enabled.");
}
@Override
public void onDisable() {
if (arenaManager != null) {
arenaManager.shutdownAll();
}
if (scoreboardManager != null) {
scoreboardManager.stop();
}
if (statsManager != null) {
statsManager.shutdown();
}
getLogger().info("BlockParty disabled.");
}
/** Reloads config.yml, messages.yml and arena definitions. Arenas mid-match are skipped (see ArenaManager#reloadSafely). */
public void reloadEverything() {
configManager.load();
messagesManager.load();
arenaManager.reloadSafely();
}
private void registerPlaceholderApi() {
if (!configManager.isPlaceholderApiEnabled()) {
return;
}
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") == null) {
return;
}
try {
new BlockPartyExpansion(this).register();
getLogger().info("Hooked into PlaceholderAPI.");
} catch (Throwable t) {
getLogger().warning("Failed to register PlaceholderAPI expansion: " + t.getMessage());
}
}
@EventHandler
public void onWorldUnload(WorldUnloadEvent event) {
for (Arena arena : arenaManager.all()) {
if (arena.getConfig().getWorldName() != null && arena.getConfig().getWorldName().equals(event.getWorld().getName())) {
getLogger().warning("World '" + event.getWorld().getName() + "' unloaded - disabling arena '" + arena.getConfig().getName() + "'.");
arena.disable();
}
}
}
public ConfigManager getConfigManager() {
return configManager;
}
public MessagesManager getMessages() {
return messagesManager;
}
public ArenaManager getArenaManager() {
return arenaManager;
}
public SessionManager getSessionManager() {
return sessionManager;
}
public ScoreboardManager getScoreboardManager() {
return scoreboardManager;
}
public RewardManager getRewardManager() {
return rewardManager;
}
public StatsManager getStatsManager() {
return statsManager;
}
public SoundUtil getSoundUtil() {
return soundUtil;
}
}