All source projects
MrUltimateLibrary Source
Standalone source project / 68 files
MrUltimateLibrary is the backbone of all my plugins; it offers features that facilitate plugin creation, maintenance, and updates.
java
MrUltimateLibrary/src/main/java/eu/mrneznamy/mrultimatelibrary/holograms/MrLibHologramFacade.java
JAVA · Read-only source
package eu.mrneznamy.mrultimatelibrary.holograms;
import eu.mrneznamy.mrultimatelibrary.holograms.providers.MrLibEntityHologramProvider;
import eu.mrneznamy.mrultimatelibrary.holograms.providers.MrLibTextDisplayHologramProvider;
import org.bukkit.inventory.ItemStack;
import eu.mrneznamy.mrultimatelibrary.utils.MrLibConsoleSayer;
import org.bukkit.Location;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Centralized hologram manager for MrUltimateLibrary
* Supports multiple hologram providers (DecentHolograms, CMI)
*/
public class MrLibHologramFacade {
private static MrLibHologramFacade instance;
private final Map<String, MrLibHologramProvider> providers = new HashMap<>();
private MrLibHologramProvider activeProvider;
private String preferredProvider = null;
private MrLibHologramFacade() {
setupProviders();
}
/**
* Get the singleton instance of MrLibHologramFacade
*/
public static MrLibHologramFacade getInstance() {
if (instance == null) {
instance = new MrLibHologramFacade();
}
return instance;
}
/**
* Set the preferred hologram provider. This will re-initialize the provider selection.
* @param providerName Name of the preferred provider (e.g., "MrUltimateLibrary-TextDisplay", "MrUltimateLibrary-Entity").
*/
public void setPreferredProvider(String providerName) {
this.preferredProvider = providerName;
setupProviders();
}
/**
* Setup available hologram providers
*/
private void setupProviders() {
Plugin MrUltimateLibraryPlugin = eu.mrneznamy.mrultimatelibrary.MrUltimateLibrary.getInstance();
providers.clear();
providers.put("MrUltimateLibrary-Entity", new MrLibEntityHologramProvider(MrUltimateLibraryPlugin));
providers.put("MrUltimateLibrary-TextDisplay", new MrLibTextDisplayHologramProvider(MrUltimateLibraryPlugin));
if (preferredProvider != null && !preferredProvider.isEmpty()) {
MrLibHologramProvider preferred = providers.get(preferredProvider);
if (preferred != null && preferred.isEnabled()) {
activeProvider = preferred;
MrLibConsoleSayer.MrSay_Success("Hologram support enabled: " + preferredProvider);
return;
} else {
MrLibConsoleSayer.MrSay_Warning("Preferred hologram provider '" + preferredProvider + "' not available, trying alternatives...");
}
}
MrLibHologramProvider textDisplayProvider = providers.get("MrUltimateLibrary-TextDisplay");
if (textDisplayProvider != null && textDisplayProvider.isEnabled()) {
activeProvider = textDisplayProvider;
MrLibConsoleSayer.MrSay_Success("Hologram support enabled: MrUltimateLibrary-TextDisplay (auto-detected)");
return;
}
MrLibHologramProvider entityProvider = providers.get("MrUltimateLibrary-Entity");
if (entityProvider != null && entityProvider.isEnabled()) {
activeProvider = entityProvider;
MrLibConsoleSayer.MrSay_Success("Hologram support enabled: MrUltimateLibrary-Entity (fallback)");
return;
}
activeProvider = null;
MrLibConsoleSayer.MrSay_Warning("Hologram support disabled: No providers available");
}
/**
* Set a specific provider as active
* @param providerName Name of the provider (MrUltimateLibrary-TextDisplay, MrUltimateLibrary-Entity)
* @return true if provider was set, false if not found or disabled
*/
public boolean setProvider(String providerName) {
MrLibHologramProvider provider = providers.get(providerName);
if (provider != null && provider.isEnabled()) {
activeProvider = provider;
MrLibConsoleSayer.MrSay_Success("Hologram provider set to: " + providerName);
return true;
} else {
MrLibConsoleSayer.MrSay_Warning("Failed to set hologram provider: " + providerName + " (not available)");
return false;
}
}
/**
* Check if holograms are enabled
* @return true if a hologram provider is available
*/
public boolean isEnabled() {
return activeProvider != null;
}
/**
* Create a new hologram
* @param name Unique name for the hologram
* @param location Location where to create the hologram
* @param lines List of lines to display
*/
public void createHologram(String name, Location location, List<String> lines) {
if (!isEnabled()) {
return;
}
List<String> filteredLines = filterHologramLines(lines);
try {
Plugin p = eu.mrneznamy.mrultimatelibrary.MrUltimateLibrary.getInstance();
boolean debug = p != null && p.getConfig().getBoolean("debug-holograms", false);
if (debug) {
String prov = activeProvider != null ? activeProvider.getProviderName() : "null";
String world = location != null && location.getWorld() != null ? location.getWorld().getName() : "null";
MrLibConsoleSayer.MrSay_Info("[Holograms-Facade] create name='" + name + "' provider=" + prov + " world=" + world + " loc=" + (location!=null?String.format("(%.2f, %.2f, %.2f)", location.getX(), location.getY(), location.getZ()):"null") + " lines=" + (filteredLines!=null?filteredLines.size():0));
}
} catch (Throwable ignored) {}
activeProvider.createHologram(name, location, filteredLines);
}
/**
* Update an existing hologram's lines
* @param name Name of the hologram
* @param lines New lines to display
*/
public void updateHologram(String name, List<String> lines) {
if (!isEnabled()) {
return;
}
List<String> filteredLines = filterHologramLines(lines);
try {
Plugin p = eu.mrneznamy.mrultimatelibrary.MrUltimateLibrary.getInstance();
boolean debug = p != null && p.getConfig().getBoolean("debug-holograms", false);
if (debug) {
String prov = activeProvider != null ? activeProvider.getProviderName() : "null";
MrLibConsoleSayer.MrSay_Info("[Holograms-Facade] update name='" + name + "' provider=" + prov + " lines=" + (filteredLines!=null?filteredLines.size():0));
}
} catch (Throwable ignored) {}
activeProvider.updateHologram(name, filteredLines);
}
/**
* Delete a hologram
* @param name Name of the hologram to delete
*/
public void deleteHologram(String name) {
if (!isEnabled()) {
return;
}
try {
Plugin p = eu.mrneznamy.mrultimatelibrary.MrUltimateLibrary.getInstance();
boolean debug = p != null && p.getConfig().getBoolean("debug-holograms", false);
if (debug) {
String prov = activeProvider != null ? activeProvider.getProviderName() : "null";
MrLibConsoleSayer.MrSay_Info("[Holograms-Facade] delete name='" + name + "' provider=" + prov);
}
} catch (Throwable ignored) {}
activeProvider.deleteHologram(name);
}
/**
* Cleanup all holograms (for server shutdown/restart)
*/
public void cleanupAllHolograms() {
try {
Plugin p = eu.mrneznamy.mrultimatelibrary.MrUltimateLibrary.getInstance();
boolean debug = p != null && p.getConfig().getBoolean("debug-holograms", false);
if (debug) {
MrLibConsoleSayer.MrSay_Info("[Holograms-Facade] cleanupAllHolograms invoked");
}
} catch (Throwable ignored) {}
if (activeProvider instanceof MrLibEntityHologramProvider) {
((MrLibEntityHologramProvider) activeProvider).cleanupAllHolograms();
} else if (activeProvider instanceof MrLibTextDisplayHologramProvider) {
((MrLibTextDisplayHologramProvider) activeProvider).cleanupAllHolograms();
}
}
/**
* Check if a hologram exists
* @param name Name of the hologram
* @return true if the hologram exists
*/
public boolean hologramExists(String name) {
if (!isEnabled()) {
return false;
}
return activeProvider.hologramExists(name);
}
/**
* Check if a hologram exists
* @param name Name of the hologram
* @return true if the hologram exists
*/
public boolean has(String name) {
if (!isEnabled()) {
return false;
}
return activeProvider.hologramExists(name);
}
/**
* Get the name of the current active provider
* @return Provider name, or null if none active
*/
public String getActiveProviderName() {
if (activeProvider == null) {
return null;
}
return activeProvider.getProviderName();
}
/**
* Get the active provider
* @return Active provider, or null if none active
*/
public MrLibHologramProvider getActiveProvider() {
return activeProvider;
}
/**
* Get performance statistics for Entity Hologram provider
* @return Performance stats string, or null if not using entity provider
*/
public String getEntityHologramPerformanceStats() {
if (activeProvider instanceof MrLibEntityHologramProvider) {
return ((MrLibEntityHologramProvider) activeProvider).getPerformanceStats();
}
return null;
}
/**
* Force update all entity holograms (for debugging)
*/
public void forceUpdateAllEntityHolograms() {
if (activeProvider instanceof MrLibEntityHologramProvider) {
((MrLibEntityHologramProvider) activeProvider).forceUpdateAll();
}
}
/**
* Check if currently using Entity Hologram provider
* @return true if using optimized entity provider
*/
public boolean isUsingEntityProvider() {
return activeProvider instanceof MrLibEntityHologramProvider;
}
/**
* Shutdown hologram manager (for plugin disable)
*/
public void shutdown() {
cleanupAllHolograms();
if (activeProvider instanceof MrLibEntityHologramProvider) {
((MrLibEntityHologramProvider) activeProvider).shutdown();
} else if (activeProvider instanceof MrLibTextDisplayHologramProvider) {
((MrLibTextDisplayHologramProvider) activeProvider).shutdown();
}
providers.clear();
activeProvider = null;
instance = null;
}
/**
* Filter hologram lines to remove message tags
* @param lines Original lines
* @return Filtered lines with message tags removed
*/
private List<String> filterHologramLines(List<String> lines) {
if (lines == null) {
return new ArrayList<>();
}
List<String> filteredLines = new ArrayList<>();
for (String line : lines) {
if (line != null) {
String filteredLine = line.replaceAll("\\(!.*?\\)", "");
filteredLines.add(filteredLine);
}
}
return filteredLines;
}
}
312 linesGNU GENERAL PUBLIC LICENSE · Version 3, 29 June 2007 · UTF-8 · Read only