Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,36 @@
import de.oliver.fancyvisuals.analytics.AnalyticsManager;
import de.oliver.fancyvisuals.api.FancyVisualsAPI;
import de.oliver.fancyvisuals.api.nametags.NametagRepository;
import de.oliver.fancyvisuals.actionbar.ActionBarListeners;
import de.oliver.fancyvisuals.actionbar.ActionBarManager;
import de.oliver.fancyvisuals.actionbar.ActionBarRepository;
import de.oliver.fancyvisuals.actionbar.JsonActionBarRepository;
import de.oliver.fancyvisuals.bossbars.BossbarListeners;
import de.oliver.fancyvisuals.bossbars.BossbarManager;
import de.oliver.fancyvisuals.bossbars.BossbarRepository;
import de.oliver.fancyvisuals.bossbars.JsonBossbarRepository;
import de.oliver.fancyvisuals.chat.ChatFormatRepository;
import de.oliver.fancyvisuals.chat.ChatListeners;
import de.oliver.fancyvisuals.chat.JsonChatFormatRepository;
import de.oliver.fancyvisuals.commands.FancyVisualsCMD;
import de.oliver.fancyvisuals.config.FancyVisualsConfig;
import de.oliver.fancyvisuals.config.NametagConfig;
import de.oliver.fancyvisuals.nametags.NametagManager;
import de.oliver.fancyvisuals.nametags.listeners.NametagListeners;
import de.oliver.fancyvisuals.nametags.store.JsonNametagRepository;
import de.oliver.fancyvisuals.nametags.visibility.PlayerNametagScheduler;
import de.oliver.fancyvisuals.playerConfig.JsonPlayerConfigStore;
import de.oliver.fancyvisuals.tablist.JsonTablistRepository;
import de.oliver.fancyvisuals.tablist.TablistListeners;
import de.oliver.fancyvisuals.tablist.TablistManager;
import de.oliver.fancyvisuals.tablist.TablistRepository;
import de.oliver.fancyvisuals.titles.JsonTitleRepository;
import de.oliver.fancyvisuals.titles.TitleListeners;
import de.oliver.fancyvisuals.titles.TitleManager;
import de.oliver.fancyvisuals.titles.TitleRepository;
import de.oliver.fancyvisuals.utils.VaultHelper;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
Expand All @@ -36,6 +58,16 @@ public final class FancyVisuals extends JavaPlugin implements FancyVisualsAPI {

private NametagRepository nametagRepository;
private PlayerNametagScheduler nametagScheduler;
private NametagManager nametagManager;
private TablistRepository tablistRepository;
private TablistManager tablistManager;
private ActionBarRepository actionBarRepository;
private ActionBarManager actionBarManager;
private BossbarRepository bossbarRepository;
private BossbarManager bossbarManager;
private TitleRepository titleRepository;
private TitleManager titleManager;
private ChatFormatRepository chatFormatRepository;

public FancyVisuals() {
instance = this;
Expand All @@ -55,11 +87,12 @@ public static FancyVisuals get() {
@Override
public void onLoad() {
FancyLib fancyLib = new FancyLib(this);
IFancySitula.LOGGER.setCurrentLevel(LogLevel.DEBUG);
IFancySitula.LOGGER.setCurrentLevel(LogLevel.INFO);

// config
fancyVisualsConfig.load();
nametagConfig.load();
IFancySitula.LOGGER.setCurrentLevel(parseLogLevel(fancyVisualsConfig.getLogLevel()));

// worker executor
this.workerExecutor = Executors.newFixedThreadPool(
Expand All @@ -75,7 +108,31 @@ public void onLoad() {

// Nametags
nametagRepository = new JsonNametagRepository();
nametagScheduler = new PlayerNametagScheduler(workerExecutor, nametagConfig.getDistributionBucketSize());
nametagScheduler = new PlayerNametagScheduler(
workerExecutor,
nametagConfig.getDistributionBucketSize(),
nametagConfig.getUpdateIntervalMs()
);
nametagManager = new NametagManager(nametagRepository, nametagScheduler);

// Tablist
tablistRepository = new JsonTablistRepository();
tablistManager = new TablistManager(this, tablistRepository);

// Action bar
actionBarRepository = new JsonActionBarRepository();
actionBarManager = new ActionBarManager(this, actionBarRepository);

// Bossbars
bossbarRepository = new JsonBossbarRepository();
bossbarManager = new BossbarManager(this, bossbarRepository);

// Titles
titleRepository = new JsonTitleRepository();
titleManager = new TitleManager(this, titleRepository);

// Chat
chatFormatRepository = new JsonChatFormatRepository();

// analytics
analyticsManager.init();
Expand All @@ -88,14 +145,69 @@ public void onEnable() {
// Vault
VaultHelper.loadVault();

// Nametags
nametagScheduler.init();
registerCommands();

pluginManager.registerEvents(new NametagListeners(), this);
pluginManager.registerEvents(new TablistListeners(), this);
pluginManager.registerEvents(new ActionBarListeners(), this);
pluginManager.registerEvents(new BossbarListeners(), this);
pluginManager.registerEvents(new TitleListeners(), this);
pluginManager.registerEvents(new ChatListeners(), this);

// Nametags
if (nametagConfig.isEnabled()) {
nametagScheduler.init();
Bukkit.getOnlinePlayers().forEach(nametagManager::handlePlayerUpdate);
}

if (fancyVisualsConfig.isTablistEnabled()) {
tablistManager.init();
Bukkit.getOnlinePlayers().forEach(tablistManager::handleJoin);
}

if (fancyVisualsConfig.isActionBarEnabled()) {
actionBarManager.init();
Bukkit.getOnlinePlayers().forEach(actionBarManager::handleJoin);
}

if (fancyVisualsConfig.isBossbarsEnabled()) {
bossbarManager.init();
Bukkit.getOnlinePlayers().forEach(bossbarManager::handleJoin);
}

if (fancyVisualsConfig.isTitlesEnabled()) {
titleManager.init();
Bukkit.getOnlinePlayers().forEach(titleManager::handleJoin);
}
}

@Override
public void onDisable() {

if (nametagManager != null) {
nametagManager.shutdown();
}
if (nametagScheduler != null) {
nametagScheduler.shutdown();
}
if (tablistManager != null) {
tablistManager.clearAll();
tablistManager.shutdown();
}
if (actionBarManager != null) {
actionBarManager.clearAll();
actionBarManager.shutdown();
}
if (bossbarManager != null) {
bossbarManager.clearAll();
bossbarManager.shutdown();
}
if (titleManager != null) {
titleManager.clearAll();
titleManager.shutdown();
}
if (workerExecutor != null) {
workerExecutor.shutdownNow();
}
}

@Override
Expand All @@ -112,7 +224,146 @@ public NametagRepository getNametagRepository() {
return nametagRepository;
}

public NametagConfig getNametagConfig() {
return nametagConfig;
}

public FancyVisualsConfig getFancyVisualsConfig() {
return fancyVisualsConfig;
}

public PlayerNametagScheduler getNametagScheduler() {
return nametagScheduler;
}

public NametagManager getNametagManager() {
return nametagManager;
}

public TablistRepository getTablistRepository() {
return tablistRepository;
}

public TablistManager getTablistManager() {
return tablistManager;
}

public ActionBarRepository getActionBarRepository() {
return actionBarRepository;
}

public ActionBarManager getActionBarManager() {
return actionBarManager;
}

public BossbarRepository getBossbarRepository() {
return bossbarRepository;
}

public BossbarManager getBossbarManager() {
return bossbarManager;
}

public TitleRepository getTitleRepository() {
return titleRepository;
}

public TitleManager getTitleManager() {
return titleManager;
}

public ChatFormatRepository getChatFormatRepository() {
return chatFormatRepository;
}

public void reloadAll() {
fancyVisualsConfig.load();
nametagConfig.load();
IFancySitula.LOGGER.setCurrentLevel(parseLogLevel(fancyVisualsConfig.getLogLevel()));
VaultHelper.loadVault();

if (workerExecutor != null) {
workerExecutor.shutdownNow();
}
this.workerExecutor = Executors.newFixedThreadPool(
fancyVisualsConfig.getAmountWorkerThreads(),
new ThreadFactoryBuilder()
.setNameFormat("FancyVisualsWorker-%d")
.build()
);

if (nametagManager != null) {
nametagManager.shutdown();
}
if (nametagScheduler != null) {
nametagScheduler.shutdown();
}
if (nametagConfig.isEnabled()) {
nametagScheduler = new PlayerNametagScheduler(
workerExecutor,
nametagConfig.getDistributionBucketSize(),
nametagConfig.getUpdateIntervalMs()
);
nametagManager = new NametagManager(nametagRepository, nametagScheduler);
nametagScheduler.init();
Bukkit.getOnlinePlayers().forEach(nametagManager::handlePlayerUpdate);
}

if (tablistManager != null) {
tablistManager.clearAll();
tablistManager.shutdown();
}
if (fancyVisualsConfig.isTablistEnabled()) {
tablistManager = new TablistManager(this, tablistRepository);
tablistManager.init();
Bukkit.getOnlinePlayers().forEach(tablistManager::handleJoin);
}

if (actionBarManager != null) {
actionBarManager.clearAll();
actionBarManager.shutdown();
}
if (fancyVisualsConfig.isActionBarEnabled()) {
actionBarManager = new ActionBarManager(this, actionBarRepository);
actionBarManager.init();
Bukkit.getOnlinePlayers().forEach(actionBarManager::handleJoin);
}

if (bossbarManager != null) {
bossbarManager.clearAll();
bossbarManager.shutdown();
}
if (fancyVisualsConfig.isBossbarsEnabled()) {
bossbarManager = new BossbarManager(this, bossbarRepository);
bossbarManager.init();
Bukkit.getOnlinePlayers().forEach(bossbarManager::handleJoin);
}

if (titleManager != null) {
titleManager.clearAll();
titleManager.shutdown();
}
if (fancyVisualsConfig.isTitlesEnabled()) {
titleManager = new TitleManager(this, titleRepository);
titleManager.init();
Bukkit.getOnlinePlayers().forEach(titleManager::handleJoin);
}
}

private LogLevel parseLogLevel(String value) {
if (value == null) {
return LogLevel.INFO;
}

try {
return LogLevel.valueOf(value.toUpperCase());
} catch (IllegalArgumentException e) {
return LogLevel.INFO;
}
}

private void registerCommands() {
Command command = new FancyVisualsCMD(this);
getServer().getCommandMap().register("fancyvisuals", command);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package de.oliver.fancyvisuals.actionbar;

import com.google.gson.annotations.SerializedName;
import org.jetbrains.annotations.NotNull;

import java.util.List;

public record ActionBarConfig(
@SerializedName("messages")
@NotNull List<String> messages,
@SerializedName("interval_ms")
int intervalMs
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package de.oliver.fancyvisuals.actionbar;

import de.oliver.fancyvisuals.FancyVisuals;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;

public class ActionBarListeners implements Listener {

@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
if (!FancyVisuals.get().getFancyVisualsConfig().isActionBarEnabled()) {
return;
}

Player player = event.getPlayer();
FancyVisuals.get().getActionBarManager().handleJoin(player);
}

@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
if (!FancyVisuals.get().getFancyVisualsConfig().isActionBarEnabled()) {
return;
}

Player player = event.getPlayer();
FancyVisuals.get().getActionBarManager().handleQuit(player);
}

@EventHandler
public void onPlayerWorldChange(PlayerChangedWorldEvent event) {
if (!FancyVisuals.get().getFancyVisualsConfig().isActionBarEnabled()) {
return;
}

Player player = event.getPlayer();
FancyVisuals.get().getActionBarManager().handleContextChange(player);
}
}
Loading