diff --git a/paper/src/main/java/net/momirealms/customnameplates/paper/CustomNameplatesPluginImpl.java b/paper/src/main/java/net/momirealms/customnameplates/paper/CustomNameplatesPluginImpl.java index 3e81972..939871d 100644 --- a/paper/src/main/java/net/momirealms/customnameplates/paper/CustomNameplatesPluginImpl.java +++ b/paper/src/main/java/net/momirealms/customnameplates/paper/CustomNameplatesPluginImpl.java @@ -11,6 +11,7 @@ import net.momirealms.customnameplates.paper.helper.LibraryLoader; import net.momirealms.customnameplates.paper.mechanic.actionbar.ActionBarManagerImpl; import net.momirealms.customnameplates.paper.mechanic.background.BackGroundManagerImpl; import net.momirealms.customnameplates.paper.mechanic.bossbar.BossBarManagerImpl; +import net.momirealms.customnameplates.paper.mechanic.font.WidthManagerImpl; import net.momirealms.customnameplates.paper.mechanic.image.ImageManagerImpl; import net.momirealms.customnameplates.paper.mechanic.misc.CoolDownManager; import net.momirealms.customnameplates.paper.mechanic.misc.PacketManager; @@ -55,6 +56,7 @@ public class CustomNameplatesPluginImpl extends CustomNameplatesPlugin { this.resourcePackManager = new ResourcePackManagerImpl(this); this.nameplateManager = new NameplateManagerImpl(this); this.teamManager = new TeamManagerImpl(this); + this.widthManager = new WidthManagerImpl(this); this.actionBarManager = new ActionBarManagerImpl(this); this.coolDownManager = new CoolDownManager(this); this.packetManager = new PacketManager(this); @@ -78,6 +80,7 @@ public class CustomNameplatesPluginImpl extends CustomNameplatesPlugin { ((PlaceholderManagerImpl) this.placeholderManager).unload(); ((RequirementManagerImpl) this.requirementManager).unload(); ((ResourcePackManagerImpl) this.resourcePackManager).unload(); + ((WidthManagerImpl) this.widthManager).unload(); ((StorageManagerImpl) this.storageManager).disable(); ((AdventureManagerImpl) this.adventureManager).close(); } @@ -87,6 +90,7 @@ public class CustomNameplatesPluginImpl extends CustomNameplatesPlugin { CNConfig.load(); CNLocale.load(); ((SchedulerImpl) this.scheduler).reload(); + ((WidthManagerImpl) this.widthManager).reload(); ((NameplateManagerImpl) this.nameplateManager).reload(); ((BackGroundManagerImpl) this.backGroundManager).reload(); ((TeamManagerImpl) this.teamManager).reload(); diff --git a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/font/WidthManagerImpl.java b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/font/WidthManagerImpl.java index df0d8ea..7fa262d 100644 --- a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/font/WidthManagerImpl.java +++ b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/font/WidthManagerImpl.java @@ -1,14 +1,24 @@ package net.momirealms.customnameplates.paper.mechanic.font; +import me.clip.placeholderapi.PlaceholderAPI; import net.momirealms.customnameplates.api.CustomNameplatesPlugin; +import net.momirealms.customnameplates.api.common.Key; import net.momirealms.customnameplates.api.manager.WidthManager; +import net.momirealms.customnameplates.api.mechanic.font.FontData; +import net.momirealms.customnameplates.api.util.LogUtils; +import net.momirealms.customnameplates.paper.adventure.AdventureManagerImpl; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.Nullable; +import java.io.File; import java.util.HashMap; +import java.util.Map; public class WidthManagerImpl implements WidthManager { private final CustomNameplatesPlugin plugin; - private final HashMap fontDataMap; + private final HashMap fontDataMap; private char TAG_START = '<'; private char TAG_END = '>'; @@ -21,17 +31,71 @@ public class WidthManagerImpl implements WidthManager { } public void reload() { - + unload(); + load(); } public void load() { - + YamlConfiguration config = plugin.getConfig("configs" + File.separator + "image-width.yml"); + for (Map.Entry entry : config.getValues(false).entrySet()) { + if (entry.getValue() instanceof ConfigurationSection innerSection) { + FontData fontData = new FontData(8); + for (Map.Entry innerEntry : innerSection.getValues(false).entrySet()) { + String key = innerEntry.getKey(); + if (key.contains("%") && !key.equals("%")) { + String stripped = AdventureManagerImpl.getInstance().stripTags(AdventureManagerImpl.getInstance().legacyToMiniMessage(PlaceholderAPI.setPlaceholders(null, key))); + if (stripped.length() != 1) { + LogUtils.warn(key + " is not a supported placeholder"); + continue; + } + fontData.registerCharWidth(stripped.charAt(0), (Integer) entry.getValue()); + } else if (key.length() == 1) { + fontData.registerCharWidth(key.charAt(0), (Integer) entry.getValue()); + } else { + LogUtils.warn("Illegal image format: " + key); + } + } + } + } } public void unload() { fontDataMap.clear(); } + @Override + public boolean registerFontData(Key key, FontData fontData) { + if (fontDataMap.containsKey(key)) { + return false; + } + fontDataMap.put(key, fontData); + return true; + } + + @Override + public boolean unregisterFontData(Key key) { + return fontDataMap.remove(key) != null; + } + + @Override + public void registerImageWidth(Key key, char c, int width) { + FontData fontData = fontDataMap.get(key); + if (fontData == null) { + FontData newData = new FontData(8); + fontDataMap.put(key, newData); + newData.registerCharWidth(c, width); + } else { + fontData.registerCharWidth(c, width); + } + } + + @Nullable + @Override + public FontData getFontData(Key key) { + return fontDataMap.get(key); + } + + @Override public int getTextWidth(String textWithTags) { return 0; }