diff --git a/build.gradle b/build.gradle index e56b403..abfa91b 100644 --- a/build.gradle +++ b/build.gradle @@ -45,7 +45,6 @@ dependencies { implementation('net.kyori:adventure-platform-bukkit:4.1.1') implementation('net.kyori:adventure-text-minimessage:4.11.0') implementation("net.kyori:adventure-text-serializer-gson:4.11.0") - } def targetJavaVersion = 16 diff --git a/src/main/java/net/momirealms/customnameplates/ConfigManager.java b/src/main/java/net/momirealms/customnameplates/ConfigManager.java index 0deb1a4..aaa8289 100644 --- a/src/main/java/net/momirealms/customnameplates/ConfigManager.java +++ b/src/main/java/net/momirealms/customnameplates/ConfigManager.java @@ -20,10 +20,13 @@ package net.momirealms.customnameplates; import net.kyori.adventure.bossbar.BossBar; import net.kyori.adventure.key.Key; import net.momirealms.customnameplates.background.BackGround; -import net.momirealms.customnameplates.bossbar.BossbarConfig; +import net.momirealms.customnameplates.bossbar.adventure.BossBarConfigA; +import net.momirealms.customnameplates.bossbar.protocollib.BossBarConfigP; +import net.momirealms.customnameplates.bossbar.protocollib.Overlay; import net.momirealms.customnameplates.utils.BGInfo; import net.momirealms.customnameplates.utils.NPInfo; import org.bukkit.Bukkit; +import org.bukkit.boss.BarColor; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -34,7 +37,8 @@ import java.util.TreeMap; public class ConfigManager { public static TreeMap backgrounds = new TreeMap<>(); - public static TreeMap bossbars = new TreeMap<>(); + public static TreeMap bossbarsA = new TreeMap<>(); + public static TreeMap bossbarsP = new TreeMap<>(); public static HashMap papiBG = new HashMap<>(); public static HashMap papiNP = new HashMap<>(); @@ -50,12 +54,15 @@ public class ConfigManager { public static boolean background; public static boolean bossbar; public static boolean actionbar; + public static boolean useAdventure; public static void loadModule(){ YamlConfiguration module = getConfig("module.yml"); nameplate = module.getBoolean("nameplate"); background = module.getBoolean("background"); bossbar = module.getBoolean("bossbar"); actionbar = module.getBoolean("actionbar"); + YamlConfiguration bossbarmode = getConfig("bossbar.yml"); + useAdventure = bossbarmode.getString("mode").equalsIgnoreCase("Adventure"); } public static class MainConfig{ @@ -78,6 +85,9 @@ public class ConfigManager { public static boolean thin_font; public static boolean hidePrefix; public static boolean hideSuffix; + public static boolean anotherFont; + public static boolean tab; + public static int fontOffset; public static void ReloadConfig(){ CustomNameplates.instance.saveDefaultConfig(); CustomNameplates.instance.reloadConfig(); @@ -93,14 +103,17 @@ public class ConfigManager { default_nameplate = config.getString("config.default-nameplate"); player_prefix = config.getString("config.prefix"); player_suffix = config.getString("config.suffix"); - itemsAdder =config.getBoolean("config.integrations.ItemsAdder"); + anotherFont = config.getBoolean("config.another-ascii-font.enable",true); + + itemsAdder = config.getBoolean("config.integrations.ItemsAdder",false); + fontOffset = config.getInt("config.another-ascii-font.y-offset",3); if (itemsAdder){ if(CustomNameplates.instance.getServer().getPluginManager().getPlugin("ItemsAdder") == null){ CustomNameplates.instance.getLogger().warning("Failed to initialize ItemsAdder!"); itemsAdder = false; } } - placeholderAPI = config.getBoolean("config.integrations.PlaceholderAPI"); + placeholderAPI = config.getBoolean("config.integrations.PlaceholderAPI",false); if (placeholderAPI){ if(CustomNameplates.instance.getServer().getPluginManager().getPlugin("PlaceholderAPI") != null){ loadPapi(); @@ -109,6 +122,16 @@ public class ConfigManager { placeholderAPI = false; } } + tab = config.getBoolean("config.integrations.TAB",false); + if (tab){ + if(CustomNameplates.instance.getServer().getPluginManager().getPlugin("TAB") == null){ + tab = false; + CustomNameplates.instance.getLogger().warning("Failed to initialize TAB!"); + }else { + AdventureManager.consoleMessage("[CustomNameplates] TAB Hooked!"); + } + } + show_after = config.getBoolean("config.show-after-load-resourcepack"); key = Key.key(fontName); preview = config.getLong("config.preview-duration"); @@ -160,7 +183,7 @@ public class ConfigManager { backgrounds.clear(); YamlConfiguration bgConfig = getConfig("background.yml"); bgConfig.getConfigurationSection("background").getKeys(false).forEach(key -> { - backgrounds.put(key, new BackGround(bgConfig.getString("background." + key + ".start"),bgConfig.getString("background." + key + ".offset_1"), + backgrounds.put(key, new BackGround(key, bgConfig.getString("background." + key + ".start"),bgConfig.getString("background." + key + ".offset_1"), bgConfig.getString("background." + key + ".offset_2"),bgConfig.getString("background." + key + ".offset_4"),bgConfig.getString("background." + key + ".offset_8"), bgConfig.getString("background." + key + ".offset_16"),bgConfig.getString("background." + key + ".offset_32"),bgConfig.getString("background." + key + ".offset_64"), bgConfig.getString("background." + key + ".offset_128"),bgConfig.getString("background." + key + ".end"),bgConfig.getInt("background." + key + ".y-offset"),bgConfig.getInt("background." + key + ".x-offset") @@ -169,23 +192,42 @@ public class ConfigManager { } public static void loadBossBar(){ - YamlConfiguration bossbarConfig = getConfig("bossbar.yml"); - bossbarConfig.getConfigurationSection("bossbar").getKeys(false).forEach(key -> { - BossbarConfig bossbarConfig1 = ConfigManager.bossbars.get(key); - if (bossbarConfig1 != null){ - bossbarConfig1.setColor(BossBar.Color.valueOf(bossbarConfig.getString("bossbar." + key + ".color").toUpperCase())); - bossbarConfig1.setOverlay(BossBar.Overlay.valueOf(bossbarConfig.getString("bossbar." + key + ".overlay").toUpperCase())); - bossbarConfig1.setRate(bossbarConfig.getInt("bossbar." + key + ".refresh-rate") - 1); - bossbarConfig1.setText(bossbarConfig.getString("bossbar." + key + ".text")); - }else { - bossbars.put(key, new BossbarConfig( - bossbarConfig.getString("bossbar." + key + ".text"), - BossBar.Overlay.valueOf(bossbarConfig.getString("bossbar." + key + ".overlay").toUpperCase()), - BossBar.Color.valueOf(bossbarConfig.getString("bossbar." + key + ".color").toUpperCase()), - bossbarConfig.getInt("bossbar." + key + ".refresh-rate") - 1 - )); - } - }); + YamlConfiguration config = getConfig("bossbar.yml"); + if (useAdventure){ + config.getConfigurationSection("bossbar").getKeys(false).forEach(key -> { + BossBarConfigA bossbarConfig = ConfigManager.bossbarsA.get(key); + if (bossbarConfig != null){ + bossbarConfig.setColor(BossBar.Color.valueOf(config.getString("bossbar." + key + ".color").toUpperCase())); + bossbarConfig.setOverlay(BossBar.Overlay.valueOf(config.getString("bossbar." + key + ".overlay").toUpperCase())); + bossbarConfig.setRate(config.getInt("bossbar." + key + ".refresh-rate") - 1); + bossbarConfig.setText(config.getString("bossbar." + key + ".text")); + }else { + bossbarsA.put(key, new BossBarConfigA( + config.getString("bossbar." + key + ".text"), + BossBar.Overlay.valueOf(config.getString("bossbar." + key + ".overlay").toUpperCase()), + BossBar.Color.valueOf(config.getString("bossbar." + key + ".color").toUpperCase()), + config.getInt("bossbar." + key + ".refresh-rate") - 1 + )); + } + }); + }else { + config.getConfigurationSection("bossbar").getKeys(false).forEach(key -> { + BossBarConfigP bossbarConfig = ConfigManager.bossbarsP.get(key); + if (bossbarConfig != null){ + bossbarConfig.setColor(BarColor.valueOf(config.getString("bossbar."+key+".color").toUpperCase())); + bossbarConfig.setRate(config.getInt("bossbar." + key + ".refresh-rate") - 1); + bossbarConfig.setText(config.getString("bossbar." + key + ".text")); + bossbarConfig.setOverlay(Overlay.valueOf(config.getString("bossbar."+key+".overlay").toUpperCase())); + }else { + bossbarsP.put(key, new BossBarConfigP( + config.getString("bossbar." + key + ".text"), + Overlay.valueOf(config.getString("bossbar."+key+".overlay").toUpperCase()), + BarColor.valueOf(config.getString("bossbar."+key+".color").toUpperCase()), + config.getInt("bossbar." + key + ".refresh-rate") - 1 + )); + } + }); + } } public static void loadPapi(){ diff --git a/src/main/java/net/momirealms/customnameplates/CustomNameplates.java b/src/main/java/net/momirealms/customnameplates/CustomNameplates.java index 146de23..2f4e109 100644 --- a/src/main/java/net/momirealms/customnameplates/CustomNameplates.java +++ b/src/main/java/net/momirealms/customnameplates/CustomNameplates.java @@ -18,9 +18,11 @@ package net.momirealms.customnameplates; import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolManager; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.momirealms.customnameplates.actionbar.Timer; -import net.momirealms.customnameplates.bossbar.QuitAndJoin; +import net.momirealms.customnameplates.bossbar.adventure.QuitAndJoinA; +import net.momirealms.customnameplates.bossbar.protocollib.QuitAndJoinP; import net.momirealms.customnameplates.commands.Execute; import net.momirealms.customnameplates.commands.TabComplete; import net.momirealms.customnameplates.data.DataManager; @@ -41,6 +43,7 @@ public final class CustomNameplates extends JavaPlugin { public static JavaPlugin instance; public static BukkitAudiences adventure; + public static ProtocolManager protocolManager; private ResourceManager resourceManager; private DataManager dataManager; @@ -63,13 +66,18 @@ public final class CustomNameplates extends JavaPlugin { @Override public void onEnable() { adventure = BukkitAudiences.create(this); + protocolManager = ProtocolLibrary.getProtocolManager(); AdventureManager.consoleMessage("[CustomNameplates] Running on " + Bukkit.getVersion()); ConfigManager.loadModule(); ConfigManager.MainConfig.ReloadConfig(); ConfigManager.Message.ReloadConfig(); if (ConfigManager.bossbar){ ConfigManager.loadBossBar(); - Bukkit.getPluginManager().registerEvents(new QuitAndJoin(),this); + if (ConfigManager.useAdventure){ + Bukkit.getPluginManager().registerEvents(new QuitAndJoinA(),this); + }else { + Bukkit.getPluginManager().registerEvents(new QuitAndJoinP(),this); + } } if (ConfigManager.actionbar){ ConfigManager.ActionbarConfig.LoadConfig(); diff --git a/src/main/java/net/momirealms/customnameplates/background/BackGround.java b/src/main/java/net/momirealms/customnameplates/background/BackGround.java index 855f156..83c28ff 100644 --- a/src/main/java/net/momirealms/customnameplates/background/BackGround.java +++ b/src/main/java/net/momirealms/customnameplates/background/BackGround.java @@ -20,8 +20,11 @@ package net.momirealms.customnameplates.background; import net.momirealms.customnameplates.font.FontNegative; import net.momirealms.customnameplates.resource.ResourceManager; +import java.util.HashMap; + public class BackGround { + private final String key; private final String start; private final String offset_1; private final String offset_2; @@ -35,9 +38,10 @@ public class BackGround { private final int offset_y; private final int offset_x; - public BackGround(String start, String offset_1, String offset_2, + public BackGround(String key, String start, String offset_1, String offset_2, String offset_4, String offset_8, String offset_16, String offset_32, String offset_64, String offset_128, String end, int offset_y, int offset_x){ + this.key = key; this.start = start; this.offset_1 = offset_1; this.offset_2 = offset_2; this.end = end; this.offset_4 = offset_4; this.offset_8 = offset_8; this.offset_16 = offset_16; this.offset_32 = offset_32; this.offset_64 = offset_64; @@ -50,48 +54,49 @@ public class BackGround { n += offset_x; String offset = FontNegative.getShortestNegChars(n); StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(ResourceManager.bgCaches.get(start)); + HashMap chars = ResourceManager.bgCaches.get(key); + stringBuilder.append(chars.get(start)); if (n > 128) { stringBuilder.append(FontNegative.NEG_1.getCharacter()); - stringBuilder.append(ResourceManager.bgCaches.get(offset_128)); + stringBuilder.append(chars.get(offset_128)); n -= 128; } if (n - 64 > 0) { stringBuilder.append(FontNegative.NEG_1.getCharacter()); - stringBuilder.append(ResourceManager.bgCaches.get(offset_64)); + stringBuilder.append(chars.get(offset_64)); n -= 64; } if (n - 32 > 0) { stringBuilder.append(FontNegative.NEG_1.getCharacter()); - stringBuilder.append(ResourceManager.bgCaches.get(offset_32)); + stringBuilder.append(chars.get(offset_32)); n -= 32; } if (n - 16 > 0) { stringBuilder.append(FontNegative.NEG_1.getCharacter()); - stringBuilder.append(ResourceManager.bgCaches.get(offset_16)); + stringBuilder.append(chars.get(offset_16)); n -= 16; } if (n - 8 > 0) { stringBuilder.append(FontNegative.NEG_1.getCharacter()); - stringBuilder.append(ResourceManager.bgCaches.get(offset_8)); + stringBuilder.append(chars.get(offset_8)); n -= 8; } if (n - 4 > 0) { stringBuilder.append(FontNegative.NEG_1.getCharacter()); - stringBuilder.append(ResourceManager.bgCaches.get(offset_4)); + stringBuilder.append(chars.get(offset_4)); n -= 4; } if (n - 2 > 0) { stringBuilder.append(FontNegative.NEG_1.getCharacter()); - stringBuilder.append(ResourceManager.bgCaches.get(offset_2)); + stringBuilder.append(chars.get(offset_2)); n -= 2; } if (n - 1 > 0) { stringBuilder.append(FontNegative.NEG_1.getCharacter()); - stringBuilder.append(ResourceManager.bgCaches.get(offset_1)); + stringBuilder.append(chars.get(offset_1)); } stringBuilder.append(FontNegative.NEG_1.getCharacter()); - stringBuilder.append(ResourceManager.bgCaches.get(end)).append(offset); + stringBuilder.append(chars.get(end)).append(offset); return stringBuilder.toString(); } @@ -138,4 +143,8 @@ public class BackGround { public String getOffset_128() { return offset_128; } + + public String getKey() { + return key; + } } diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/BossbarConfig.java b/src/main/java/net/momirealms/customnameplates/bossbar/adventure/BossBarConfigA.java similarity index 87% rename from src/main/java/net/momirealms/customnameplates/bossbar/BossbarConfig.java rename to src/main/java/net/momirealms/customnameplates/bossbar/adventure/BossBarConfigA.java index 6acd9aa..4caf913 100644 --- a/src/main/java/net/momirealms/customnameplates/bossbar/BossbarConfig.java +++ b/src/main/java/net/momirealms/customnameplates/bossbar/adventure/BossBarConfigA.java @@ -15,19 +15,19 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.bossbar; +package net.momirealms.customnameplates.bossbar.adventure; import net.kyori.adventure.bossbar.BossBar; -public class BossbarConfig { +public class BossBarConfigA { private String text; private BossBar.Overlay overlay; private BossBar.Color color; private int rate; - public BossbarConfig(String text, BossBar.Overlay overlay, - BossBar.Color color, int rate){ + public BossBarConfigA(String text, BossBar.Overlay overlay, + BossBar.Color color, int rate){ this.text = text; this.rate = rate; this.overlay = overlay; diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/BossbarSender.java b/src/main/java/net/momirealms/customnameplates/bossbar/adventure/BossBarSenderA.java similarity index 90% rename from src/main/java/net/momirealms/customnameplates/bossbar/BossbarSender.java rename to src/main/java/net/momirealms/customnameplates/bossbar/adventure/BossBarSenderA.java index 2d47a43..a7c9bbf 100644 --- a/src/main/java/net/momirealms/customnameplates/bossbar/BossbarSender.java +++ b/src/main/java/net/momirealms/customnameplates/bossbar/adventure/BossBarSenderA.java @@ -15,27 +15,28 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.bossbar; +package net.momirealms.customnameplates.bossbar.adventure; import me.clip.placeholderapi.PlaceholderAPI; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.bossbar.BossBar; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.ComponentLike; import net.kyori.adventure.text.minimessage.MiniMessage; import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -public class BossbarSender extends BukkitRunnable { +public class BossBarSenderA extends BukkitRunnable { private final Player player; private final Audience audience; private BossBar bossBar; private int timer; - private final BossbarConfig bossbarConfig; + private final BossBarConfigA bossbarConfig; - public BossbarSender(Player player, BossbarConfig bossbarConfig){ + public BossBarSenderA(Player player, BossBarConfigA bossbarConfig){ this.player = player; this.bossbarConfig = bossbarConfig; audience = CustomNameplates.adventure.player(player); diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/QuitAndJoin.java b/src/main/java/net/momirealms/customnameplates/bossbar/adventure/QuitAndJoinA.java similarity index 82% rename from src/main/java/net/momirealms/customnameplates/bossbar/QuitAndJoin.java rename to src/main/java/net/momirealms/customnameplates/bossbar/adventure/QuitAndJoinA.java index a9c1180..7cbd379 100644 --- a/src/main/java/net/momirealms/customnameplates/bossbar/QuitAndJoin.java +++ b/src/main/java/net/momirealms/customnameplates/bossbar/adventure/QuitAndJoinA.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.bossbar; +package net.momirealms.customnameplates.bossbar.adventure; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -25,21 +25,21 @@ import org.bukkit.event.player.PlayerQuitEvent; import java.util.HashMap; -public class QuitAndJoin implements Listener { +public class QuitAndJoinA implements Listener { - public static HashMap cache = new HashMap<>(); + public static HashMap cache = new HashMap<>(); @EventHandler public void onJoin(PlayerJoinEvent event){ Player player = event.getPlayer(); - TimerTask timerTask = new TimerTask(player); + TimerTaskA timerTask = new TimerTaskA(player); cache.put(player, timerTask); } @EventHandler public void onQuit(PlayerQuitEvent event){ Player player = event.getPlayer(); - TimerTask timerTask = cache.get(player); + TimerTaskA timerTask = cache.get(player); if (timerTask != null){ timerTask.stopTimer(); } diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/TimerTask.java b/src/main/java/net/momirealms/customnameplates/bossbar/adventure/TimerTaskA.java similarity index 78% rename from src/main/java/net/momirealms/customnameplates/bossbar/TimerTask.java rename to src/main/java/net/momirealms/customnameplates/bossbar/adventure/TimerTaskA.java index a269022..c36756d 100644 --- a/src/main/java/net/momirealms/customnameplates/bossbar/TimerTask.java +++ b/src/main/java/net/momirealms/customnameplates/bossbar/adventure/TimerTaskA.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.bossbar; +package net.momirealms.customnameplates.bossbar.adventure; import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; @@ -25,13 +25,13 @@ import org.bukkit.scheduler.BukkitTask; import java.util.HashMap; -public class TimerTask { +public class TimerTaskA { - private final HashMap bossbarCache = new HashMap<>(); + private final HashMap bossbarCache = new HashMap<>(); - public TimerTask(Player player){ - ConfigManager.bossbars.forEach((key, bossbarConfig) -> { - BossbarSender bossbar = new BossbarSender(player, bossbarConfig); + public TimerTaskA(Player player){ + ConfigManager.bossbarsA.forEach((key, bossbarConfig) -> { + BossBarSenderA bossbar = new BossBarSenderA(player, bossbarConfig); bossbar.showBossbar(); BukkitTask task = bossbar.runTaskTimerAsynchronously(CustomNameplates.instance, 1,1); bossbarCache.put(task.getTaskId(), bossbar); diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/BossBarConfigP.java b/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/BossBarConfigP.java new file mode 100644 index 0000000..f3da30c --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/BossBarConfigP.java @@ -0,0 +1,50 @@ +package net.momirealms.customnameplates.bossbar.protocollib; + +import org.bukkit.boss.BarColor; + +public class BossBarConfigP { + + private String text; + private Overlay overlay; + private BarColor color; + private int rate; + + public BossBarConfigP(String text, Overlay overlay, BarColor color, int rate){ + this.text = text; + this.overlay = overlay; + this.color = color; + this.rate = rate; + } + + public void setText(String text) { + this.text = text; + } + + public void setRate(int rate) { + this.rate = rate; + } + + public void setOverlay(Overlay overlay) { + this.overlay = overlay; + } + + public void setColor(BarColor color) { + this.color = color; + } + + public String getText() { + return text; + } + + public int getRate() { + return rate; + } + + public BarColor getColor() { + return color; + } + + public Overlay getOverlay() { + return overlay; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/BossBarSenderP.java b/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/BossBarSenderP.java new file mode 100644 index 0000000..6950f57 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/BossBarSenderP.java @@ -0,0 +1,92 @@ +package net.momirealms.customnameplates.bossbar.protocollib; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.InternalStructure; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedChatComponent; +import com.comphenix.protocol.wrappers.WrappedWatchableObject; +import me.clip.placeholderapi.PlaceholderAPI; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import net.momirealms.customnameplates.AdventureManager; +import net.momirealms.customnameplates.ConfigManager; +import net.momirealms.customnameplates.CustomNameplates; +import org.bukkit.boss.BarColor; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.lang.reflect.InvocationTargetException; +import java.util.Objects; +import java.util.UUID; + +public class BossBarSenderP extends BukkitRunnable { + + private final Player player; + private PacketContainer packet; + private int timer; + private final BossBarConfigP bossbarConfig; + private String text; + private Overlay overlay; + private BarColor barColor; + + public BossBarSenderP(Player player, BossBarConfigP bossbarConfig){ + this.player = player; + this.bossbarConfig = bossbarConfig; + this.timer = 0; + } + + public void showBossbar(){ + this.packet = new PacketContainer(PacketType.Play.Server.BOSS); + packet.setMeta("id", UUID.randomUUID()); + this.overlay = bossbarConfig.getOverlay(); + this.barColor = bossbarConfig.getColor(); + InternalStructure internalStructure = packet.getStructures().read(1); + if (ConfigManager.MainConfig.placeholderAPI){ + this.text = PlaceholderAPI.setPlaceholders(player, bossbarConfig.getText()); + }else { + this.text = bossbarConfig.getText(); + } + internalStructure.getChatComponents().write(0, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize(text)))); + internalStructure.getFloat().write(0,1F); + internalStructure.getEnumModifier(BarColor.class, 2).write(0, barColor); + internalStructure.getEnumModifier(Overlay.class, 3).write(0, overlay); + try{ + CustomNameplates.protocolManager.sendServerPacket(player, packet); + }catch (InvocationTargetException e){ + AdventureManager.consoleMessage("[CustomNameplates] Failed to display bossbar for "+player.getName()); + } + } + + @Override + public void run() { + if (timer < bossbarConfig.getRate()){ + timer++; + }else { + timer = 0; + String newText; + Label_out: { + if (ConfigManager.MainConfig.placeholderAPI){ + newText = PlaceholderAPI.setPlaceholders(player, bossbarConfig.getText()); + }else { + newText = bossbarConfig.getText(); + } + if (!Objects.equals(newText, text) || !Objects.equals(bossbarConfig.getColor(), barColor) || !Objects.equals(bossbarConfig.getOverlay(), overlay)){ + text = newText; + barColor = bossbarConfig.getColor(); + overlay = bossbarConfig.getOverlay(); + break Label_out; + } + return; + } + InternalStructure internalStructure = packet.getStructures().read(1); + internalStructure.getChatComponents().write(0, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize(text)))); + internalStructure.getEnumModifier(BarColor.class, 2).write(0, barColor); + internalStructure.getEnumModifier(Overlay.class, 3).write(0, overlay); + try{ + CustomNameplates.protocolManager.sendServerPacket(player, packet); + }catch (InvocationTargetException e){ + AdventureManager.consoleMessage("[CustomNameplates] Failed to display bossbar for " + player.getName()); + } + } + } +} diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/Overlay.java b/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/Overlay.java new file mode 100644 index 0000000..f89aa8d --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/Overlay.java @@ -0,0 +1,9 @@ +package net.momirealms.customnameplates.bossbar.protocollib; + +public enum Overlay { + NOTCHED_6, + NOTCHED_10, + NOTCHED_12, + NOTCHED_20, + PROGRESS +} diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/QuitAndJoinP.java b/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/QuitAndJoinP.java new file mode 100644 index 0000000..22bebe0 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/QuitAndJoinP.java @@ -0,0 +1,31 @@ +package net.momirealms.customnameplates.bossbar.protocollib; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import java.util.HashMap; + +public class QuitAndJoinP implements Listener { + + public static HashMap cache = new HashMap<>(); + + @EventHandler + public void onJoin(PlayerJoinEvent event){ + Player player = event.getPlayer(); + TimerTaskP timerTask = new TimerTaskP(player); + cache.put(player, timerTask); + } + + @EventHandler + public void onQuit(PlayerQuitEvent event){ + Player player = event.getPlayer(); + TimerTaskP timerTask = cache.get(player); + if (timerTask != null){ + timerTask.stopTimer(); + } + cache.remove(player); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/TimerTaskP.java b/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/TimerTaskP.java new file mode 100644 index 0000000..aeb0f44 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/bossbar/protocollib/TimerTaskP.java @@ -0,0 +1,29 @@ +package net.momirealms.customnameplates.bossbar.protocollib; + +import net.momirealms.customnameplates.ConfigManager; +import net.momirealms.customnameplates.CustomNameplates; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitTask; + +import java.util.HashMap; + +public class TimerTaskP { + + private final HashMap bossbarCache = new HashMap<>(); + + public TimerTaskP(Player player){ + ConfigManager.bossbarsP.forEach((key, bossbarConfig) -> { + BossBarSenderP bossbar = new BossBarSenderP(player, bossbarConfig); + bossbar.showBossbar(); + BukkitTask task = bossbar.runTaskTimerAsynchronously(CustomNameplates.instance, 1,1); + bossbarCache.put(task.getTaskId(), bossbar); + }); + } + + public void stopTimer(){ + bossbarCache.forEach((key,value)-> { + Bukkit.getScheduler().cancelTask(key); + }); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/Execute.java b/src/main/java/net/momirealms/customnameplates/commands/Execute.java index b6124f3..9e6554f 100644 --- a/src/main/java/net/momirealms/customnameplates/commands/Execute.java +++ b/src/main/java/net/momirealms/customnameplates/commands/Execute.java @@ -32,6 +32,7 @@ import net.momirealms.customnameplates.CustomNameplates; import net.momirealms.customnameplates.data.DataManager; import net.momirealms.customnameplates.font.FontCache; import net.momirealms.customnameplates.hook.ParsePapi; +import net.momirealms.customnameplates.hook.TABHook; import net.momirealms.customnameplates.nameplates.NameplateUtil; import net.momirealms.customnameplates.scoreboard.NameplatesTeam; import org.apache.commons.lang.StringUtils; @@ -121,7 +122,11 @@ public class Execute implements CommandExecutor { return true; } DataManager.cache.get(player.getUniqueId()).equipNameplate(args[1]); - this.plugin.getScoreBoardManager().getTeam(player.getName()).updateNameplates(); + if (ConfigManager.MainConfig.tab){ + this.plugin.getScoreBoardManager().getTeam(TABHook.getTABTeam(player.getName())).updateNameplates(); + }else { + this.plugin.getScoreBoardManager().getTeam(player.getName()).updateNameplates(); + } this.plugin.getDataManager().savePlayer(player.getUniqueId()); AdventureManager.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.equip.replace("{Nameplate}", plugin.getResourceManager().getNameplateInfo(args[1]).getConfig().getName())); } else { @@ -154,7 +159,11 @@ public class Execute implements CommandExecutor { return true; } DataManager.cache.get(player.getUniqueId()).equipNameplate(args[2]); - this.plugin.getScoreBoardManager().getTeam(args[1]).updateNameplates(); + if (ConfigManager.MainConfig.tab){ + this.plugin.getScoreBoardManager().getTeam(TABHook.getTABTeam(args[1])).updateNameplates(); + }else { + this.plugin.getScoreBoardManager().getTeam(args[1]).updateNameplates(); + } this.plugin.getDataManager().savePlayer(player.getUniqueId()); if (sender instanceof Player){ AdventureManager.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.force_equip.replace("{Nameplate}", plugin.getResourceManager().getNameplateInfo(args[2]).getConfig().getName()).replace("{Player}", args[1])); @@ -177,7 +186,11 @@ public class Execute implements CommandExecutor { case "unequip" -> { if (sender instanceof Player player){ DataManager.cache.get(player.getUniqueId()).equipNameplate("none"); - this.plugin.getScoreBoardManager().getTeam(player.getName()).updateNameplates(); + if (ConfigManager.MainConfig.tab){ + this.plugin.getScoreBoardManager().getTeam(TABHook.getTABTeam(player.getName())).updateNameplates(); + }else { + this.plugin.getScoreBoardManager().getTeam(player.getName()).updateNameplates(); + } this.plugin.getDataManager().savePlayer(player.getUniqueId()); AdventureManager.playerMessage(player, ConfigManager.Message.prefix + ConfigManager.Message.unequip); }else { @@ -198,7 +211,11 @@ public class Execute implements CommandExecutor { if (Bukkit.getPlayer(args[1]) != null){ Player player = Bukkit.getPlayer(args[1]); DataManager.cache.get(player.getUniqueId()).equipNameplate("none"); - this.plugin.getScoreBoardManager().getTeam(args[1]).updateNameplates(); + if (ConfigManager.MainConfig.tab){ + this.plugin.getScoreBoardManager().getTeam(TABHook.getTABTeam(args[1])).updateNameplates(); + }else { + this.plugin.getScoreBoardManager().getTeam(args[1]).updateNameplates(); + } this.plugin.getDataManager().savePlayer(player.getUniqueId()); if (sender instanceof Player){ AdventureManager.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.force_unequip.replace("{Player}", args[1])); diff --git a/src/main/java/net/momirealms/customnameplates/data/DataManager.java b/src/main/java/net/momirealms/customnameplates/data/DataManager.java index 88f03c7..3d39976 100644 --- a/src/main/java/net/momirealms/customnameplates/data/DataManager.java +++ b/src/main/java/net/momirealms/customnameplates/data/DataManager.java @@ -20,8 +20,11 @@ package net.momirealms.customnameplates.data; import net.momirealms.customnameplates.AdventureManager; import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.hook.TABHook; +import net.momirealms.customnameplates.scoreboard.ScoreBoardManager; import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import org.bukkit.scoreboard.Scoreboard; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/net/momirealms/customnameplates/hook/Placeholders.java b/src/main/java/net/momirealms/customnameplates/hook/Placeholders.java index e7f802e..dcb0302 100644 --- a/src/main/java/net/momirealms/customnameplates/hook/Placeholders.java +++ b/src/main/java/net/momirealms/customnameplates/hook/Placeholders.java @@ -26,6 +26,7 @@ import net.momirealms.customnameplates.font.FontWidth; import net.momirealms.customnameplates.font.FontWidthThin; import net.momirealms.customnameplates.nameplates.NameplateUtil; import net.momirealms.customnameplates.resource.ResourceManager; +import net.momirealms.customnameplates.scoreboard.NameplatesTeam; import net.momirealms.customnameplates.scoreboard.ScoreBoardManager; import net.momirealms.customnameplates.utils.BGInfo; import net.momirealms.customnameplates.utils.NPInfo; @@ -52,13 +53,31 @@ public class Placeholders extends PlaceholderExpansion { @Override public String onRequest(OfflinePlayer player, String params) { if (params.equals("prefix")){ - if (ScoreBoardManager.teams.get(player.getName()) != null){ - return ScoreBoardManager.teams.get(player.getName()).getPrefixText(); + if (ConfigManager.MainConfig.tab){ + String teamName = TABHook.getTABTeam(player.getName()); + NameplatesTeam nameplatesTeam = ScoreBoardManager.teams.get(teamName); + if (nameplatesTeam != null){ + return nameplatesTeam.getPrefixText(); + } + }else { + NameplatesTeam nameplatesTeam = ScoreBoardManager.teams.get(player.getName()); + if (nameplatesTeam != null){ + return nameplatesTeam.getPrefixText(); + } } } if (params.equals("suffix")){ - if (ScoreBoardManager.teams.get(player.getName()) != null){ - return ScoreBoardManager.teams.get(player.getName()).getSuffixText(); + if (ConfigManager.MainConfig.tab){ + String teamName = TABHook.getTABTeam(player.getName()); + NameplatesTeam nameplatesTeam = ScoreBoardManager.teams.get(teamName); + if (nameplatesTeam != null){ + return nameplatesTeam.getSuffixText(); + } + }else { + NameplatesTeam nameplatesTeam = ScoreBoardManager.teams.get(player.getName()); + if (nameplatesTeam != null){ + return nameplatesTeam.getSuffixText(); + } } } if (params.startsWith("bg_")){ diff --git a/src/main/java/net/momirealms/customnameplates/hook/TABHook.java b/src/main/java/net/momirealms/customnameplates/hook/TABHook.java new file mode 100644 index 0000000..1a11acf --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/hook/TABHook.java @@ -0,0 +1,20 @@ +package net.momirealms.customnameplates.hook; + +import me.neznamy.tab.api.TabPlayer; +import me.neznamy.tab.shared.TAB; + +public class TABHook { + + public static String getTABTeam(String playerName){ + TAB tab = TAB.getInstance(); + TabPlayer tabPlayer = tab.getPlayer(playerName); + String name = tabPlayer.getTeamName(); + + if (name == null) { + //System.out.println("TAB没有" + playerName); + return playerName; + } + //System.out.println("太好啦,有team" + name); + return name; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/listener/PacketsListener.java b/src/main/java/net/momirealms/customnameplates/listener/PacketsListener.java index fe0c77d..bd87a96 100644 --- a/src/main/java/net/momirealms/customnameplates/listener/PacketsListener.java +++ b/src/main/java/net/momirealms/customnameplates/listener/PacketsListener.java @@ -44,29 +44,36 @@ public class PacketsListener extends PacketAdapter { public void onPacketSending(PacketEvent event) { Integer n = event.getPacket().getIntegers().read(0); - if (n != 0 && n != 2) { + if (n != 2) { return; } + //if (n == 0) System.out.println("对玩家" + event.getPlayer().getName() + "发送team创建包"); + //if (n == 2) System.out.println("对玩家"+ event.getPlayer().getName() + "发送team更新包"); Optional optional = event.getPacket().getOptionalStructures().read(0); if (optional.isEmpty()) { return; } InternalStructure internalStructure = optional.get(); String teamName = event.getPacket().getStrings().read(0); + //System.out.println("本次创建/更新的队伍名是" + teamName); NameplatesTeam team = this.plugin.getScoreBoardManager().getTeam(teamName); - if (!this.plugin.getScoreBoardManager().doesTeamExist(teamName)){ + if (team == null) { + //System.out.println("但是这个队伍不存在于缓存中哦,说明那个玩家还没上线"); return; } + //System.out.println("这个队伍确实存在于缓存中呢!"); if (ConfigManager.MainConfig.show_after && (DataManager.cache.get(event.getPlayer().getUniqueId()) == null || DataManager.cache.get(event.getPlayer().getUniqueId()).getAccepted() == 0)) { + //System.out.println("玩家" +event.getPlayer().getName() +"因为没有接受资源包所以没有被显示铭牌"); internalStructure.getChatComponents().write(1, WrappedChatComponent.fromJson("{\"text\":\"\"}")); internalStructure.getChatComponents().write(2, WrappedChatComponent.fromJson("{\"text\":\"\"}")); internalStructure.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0,ChatColor.WHITE); return; } - if (team.getPrefix() != null){ + //System.out.println("玩家" +event.getPlayer().getName() +"可以看见队伍" + teamName + "的铭牌"); + if (team.getPrefix() != null) { internalStructure.getChatComponents().write(1, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(team.getPrefix()))); } - if (team.getSuffix() != null){ + if (team.getSuffix() != null) { internalStructure.getChatComponents().write(2, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(team.getSuffix()))); } internalStructure.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0,team.getColor()); diff --git a/src/main/java/net/momirealms/customnameplates/listener/PlayerListener.java b/src/main/java/net/momirealms/customnameplates/listener/PlayerListener.java index 79f5db2..0e17b62 100644 --- a/src/main/java/net/momirealms/customnameplates/listener/PlayerListener.java +++ b/src/main/java/net/momirealms/customnameplates/listener/PlayerListener.java @@ -17,26 +17,51 @@ package net.momirealms.customnameplates.listener; +import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; import net.momirealms.customnameplates.data.DataManager; import net.momirealms.customnameplates.data.PlayerData; +import net.momirealms.customnameplates.hook.TABHook; +import net.momirealms.customnameplates.scoreboard.ScoreBoardManager; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerResourcePackStatusEvent; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; public record PlayerListener(CustomNameplates plugin) implements Listener { @EventHandler public void onJoin(PlayerJoinEvent event) { this.plugin.getDataManager().loadData(event.getPlayer()); + Bukkit.getScheduler().runTaskLaterAsynchronously(CustomNameplates.instance, ()-> { + if (ConfigManager.MainConfig.tab){ + Bukkit.getOnlinePlayers().forEach(player -> this.plugin.getScoreBoardManager().getTeam(TABHook.getTABTeam(player.getName())).updateNameplates()); + }else { + Bukkit.getOnlinePlayers().forEach(player -> this.plugin.getScoreBoardManager().getTeam(player.getName()).updateNameplates()); + } + }, 50); } @EventHandler public void onQuit(PlayerQuitEvent event) { this.plugin.getDataManager().unloadPlayer(event.getPlayer().getUniqueId()); + Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard(); + Team team; + String teamName; + if (ConfigManager.MainConfig.tab){ + teamName = TABHook.getTABTeam(event.getPlayer().getName()); + }else { + teamName = event.getPlayer().getName(); + } + team = scoreboard.getTeam(teamName); + ScoreBoardManager.teams.remove(teamName); + if (team != null){ + team.unregister(); + } } @EventHandler @@ -48,10 +73,18 @@ public record PlayerListener(CustomNameplates plugin) implements Listener { } if (event.getStatus() == PlayerResourcePackStatusEvent.Status.SUCCESSFULLY_LOADED) { playerData.setAccepted(1); - Bukkit.getOnlinePlayers().forEach(player -> this.plugin.getScoreBoardManager().getTeam(player.getName()).updateNameplates()); + if (ConfigManager.MainConfig.tab){ + Bukkit.getOnlinePlayers().forEach(player -> this.plugin.getScoreBoardManager().getTeam(TABHook.getTABTeam(player.getName())).updateNameplates()); + }else { + Bukkit.getOnlinePlayers().forEach(player -> this.plugin.getScoreBoardManager().getTeam(player.getName()).updateNameplates()); + } } else if(event.getStatus() == PlayerResourcePackStatusEvent.Status.DECLINED || event.getStatus() == PlayerResourcePackStatusEvent.Status.FAILED_DOWNLOAD) { playerData.setAccepted(0); - Bukkit.getOnlinePlayers().forEach(player -> this.plugin.getScoreBoardManager().getTeam(player.getName()).updateNameplates()); + if (ConfigManager.MainConfig.tab){ + Bukkit.getOnlinePlayers().forEach(player -> this.plugin.getScoreBoardManager().getTeam(TABHook.getTABTeam(player.getName())).updateNameplates()); + }else { + Bukkit.getOnlinePlayers().forEach(player -> this.plugin.getScoreBoardManager().getTeam(player.getName()).updateNameplates()); + } } }, 20); } diff --git a/src/main/java/net/momirealms/customnameplates/resource/ResourceManager.java b/src/main/java/net/momirealms/customnameplates/resource/ResourceManager.java index 7a87bd7..42a862a 100644 --- a/src/main/java/net/momirealms/customnameplates/resource/ResourceManager.java +++ b/src/main/java/net/momirealms/customnameplates/resource/ResourceManager.java @@ -43,7 +43,7 @@ import static net.momirealms.customnameplates.ConfigManager.MainConfig.start; public class ResourceManager { public static HashMap caches = new HashMap<>(); - public static HashMap bgCaches = new HashMap<>(); + public static HashMap> bgCaches = new HashMap<>(); private final CustomNameplates plugin; public ResourceManager(CustomNameplates plugin) { @@ -94,6 +94,33 @@ public class ResourceManager { JsonArray jsonArray_1 = new JsonArray(); jsonObject_1.add("providers", jsonArray_1); + if (ConfigManager.MainConfig.anotherFont){ + JsonObject jsonObject_2 = new JsonObject(); + jsonObject_2.add("type", new JsonPrimitive("bitmap")); + jsonObject_2.add("file", new JsonPrimitive("minecraft:font/ascii.png")); + jsonObject_2.add("ascent", new JsonPrimitive(ConfigManager.MainConfig.fontOffset)); + jsonObject_2.add("height", new JsonPrimitive(8)); + JsonArray jsonArray_2 = new JsonArray(); + jsonArray_2.add("\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"); + jsonArray_2.add("\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"); + jsonArray_2.add(" !\"#$%&'()*+,-./"); + jsonArray_2.add("0123456789:;<=>?"); + jsonArray_2.add("@ABCDEFGHIJKLMNO"); + jsonArray_2.add("PQRSTUVWXYZ[\\\\]^_"); + jsonArray_2.add("`abcdefghijklmno"); + jsonArray_2.add("pqrstuvwxyz{|}~\u0000"); + jsonArray_2.add("\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"); + jsonArray_2.add("\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"); + jsonArray_2.add("\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"); + jsonArray_2.add("\\u2591\\u2592\\u2593\\u2502\\u2524\\u2561\\u2562\\u2556\\u2555\\u2563\\u2551\\u2557\\u255d\\u255c\\u255b\\u2510"); + jsonArray_2.add("\\u2514\\u2534\\u252c\\u251c\\u2500\\u253c\\u255e\\u255f\\u255a\\u2554\\u2569\\u2566\\u2560\\u2550\\u256c\\u2567"); + jsonArray_2.add("\\u2568\\u2564\\u2565\\u2559\\u2558\\u2552\\u2553\\u256b\\u256a\\u2518\\u250c\\u2588\\u2584\\u258c\\u2590\\u2580"); + jsonArray_2.add("\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\\u2205\\u2208\u0000"); + jsonArray_2.add("\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"); + jsonObject_2.add("chars", jsonArray_2); + jsonArray_1.add(jsonObject_2); + } + if (ConfigManager.nameplate){ for (File png : pngFiles) { JsonObject jsonObject_2 = new JsonObject(); @@ -268,20 +295,23 @@ public class ResourceManager { private List getBackgrounds(BackGround backGround) { ArrayList list = new ArrayList<>(); int y_offset = backGround.getOffset_y(); - list.add(setBackgrounds(backGround.getStart(),y_offset)); - list.add(setBackgrounds(backGround.getOffset_1(),y_offset)); - list.add(setBackgrounds(backGround.getOffset_2(),y_offset)); - list.add(setBackgrounds(backGround.getOffset_4(),y_offset)); - list.add(setBackgrounds(backGround.getOffset_8(),y_offset)); - list.add(setBackgrounds(backGround.getOffset_16(),y_offset)); - list.add(setBackgrounds(backGround.getOffset_32(),y_offset)); - list.add(setBackgrounds(backGround.getOffset_64(),y_offset)); - list.add(setBackgrounds(backGround.getOffset_128(),y_offset)); - list.add(setBackgrounds(backGround.getEnd(),y_offset)); + String name = backGround.getKey(); + HashMap chars = new HashMap<>(); + list.add(setBackgrounds(backGround.getStart(),y_offset,chars)); + list.add(setBackgrounds(backGround.getOffset_1(),y_offset,chars)); + list.add(setBackgrounds(backGround.getOffset_2(),y_offset,chars)); + list.add(setBackgrounds(backGround.getOffset_4(),y_offset,chars)); + list.add(setBackgrounds(backGround.getOffset_8(),y_offset,chars)); + list.add(setBackgrounds(backGround.getOffset_16(),y_offset,chars)); + list.add(setBackgrounds(backGround.getOffset_32(),y_offset,chars)); + list.add(setBackgrounds(backGround.getOffset_64(),y_offset,chars)); + list.add(setBackgrounds(backGround.getOffset_128(),y_offset,chars)); + list.add(setBackgrounds(backGround.getEnd(),y_offset,chars)); + bgCaches.put(name, chars); return list; } - private JsonObject setBackgrounds(String name, int y_offset){ + private JsonObject setBackgrounds(String name, int y_offset, HashMap chars){ JsonObject jsonObject_2 = new JsonObject(); jsonObject_2.add("type", new JsonPrimitive("bitmap")); jsonObject_2.add("file", new JsonPrimitive(ConfigManager.MainConfig.namespace + ":" + ConfigManager.MainConfig.bg_folder_path.replaceAll("\\\\","/") + name.toLowerCase() + ".png")); @@ -292,7 +322,7 @@ public class ResourceManager { jsonArray_2.add(native2ascii(character)); jsonObject_2.add("chars", jsonArray_2); start = (char)(start + '\u0001'); - bgCaches.put(name, character); + chars.put(name, character); try{ FileUtils.copyFile(new File(CustomNameplates.instance.getDataFolder() + File.separator + "backgrounds" + File.separator + name + ".png"), new File(CustomNameplates.instance.getDataFolder() + File.separator + "generated" + File.separator + ConfigManager.MainConfig.namespace + File.separatorChar + "textures" + File.separator + ConfigManager.MainConfig.bg_folder_path + name + ".png")); }catch (IOException e){ diff --git a/src/main/java/net/momirealms/customnameplates/scoreboard/NameplatesTeam.java b/src/main/java/net/momirealms/customnameplates/scoreboard/NameplatesTeam.java index 6c31c18..fa031c9 100644 --- a/src/main/java/net/momirealms/customnameplates/scoreboard/NameplatesTeam.java +++ b/src/main/java/net/momirealms/customnameplates/scoreboard/NameplatesTeam.java @@ -17,9 +17,7 @@ package net.momirealms.customnameplates.scoreboard; -import net.kyori.adventure.key.Key; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.minimessage.MiniMessage; import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; @@ -27,6 +25,7 @@ import net.momirealms.customnameplates.data.DataManager; import net.momirealms.customnameplates.data.PlayerData; import net.momirealms.customnameplates.font.FontCache; import net.momirealms.customnameplates.hook.ParsePapi; +import net.momirealms.customnameplates.hook.TABHook; import net.momirealms.customnameplates.nameplates.NameplateUtil; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -46,12 +45,14 @@ public class NameplatesTeam { private String prefixText; private String suffixText; private ChatColor color; + private final String teamName; public Component getPrefix() {return this.prefix;} public Component getSuffix() {return this.suffix;} public ChatColor getColor() {return this.color;} public String getPrefixText() {return prefixText;} public String getSuffixText() {return suffixText;} + public String getTeamName() {return teamName;} public NameplatesTeam(CustomNameplates plugin, Player player) { this.color = ChatColor.WHITE; @@ -59,8 +60,15 @@ public class NameplatesTeam { this.player = player; Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard(); String name = player.getName(); - this.team = Optional.ofNullable(Bukkit.getScoreboardManager().getMainScoreboard().getTeam(name)).orElseGet(() -> scoreboard.registerNewTeam(name)); - team.addEntry(player.getName()); + if (ConfigManager.MainConfig.tab){ + this.teamName = TABHook.getTABTeam(name); + this.team = Optional.ofNullable(Bukkit.getScoreboardManager().getMainScoreboard().getTeam(teamName)).orElseGet(() -> scoreboard.registerNewTeam(teamName)); + team.addEntry(player.getName()); + }else { + this.teamName = name; + this.team = Optional.ofNullable(Bukkit.getScoreboardManager().getMainScoreboard().getTeam(name)).orElseGet(() -> scoreboard.registerNewTeam(name)); + team.addEntry(player.getName()); + } } public void updateNameplates() { @@ -73,15 +81,15 @@ public class NameplatesTeam { } if (nameplate.equals("none")) { if (ConfigManager.MainConfig.placeholderAPI) { - this.prefix = Component.text(ParsePapi.parsePlaceholders(this.player, ConfigManager.MainConfig.player_prefix)); - this.suffix = Component.text(ParsePapi.parsePlaceholders(this.player, ConfigManager.MainConfig.player_suffix)); - this.prefixText = ParsePapi.parsePlaceholders(this.player, ConfigManager.MainConfig.player_prefix); - this.suffixText = ParsePapi.parsePlaceholders(this.player, ConfigManager.MainConfig.player_suffix); - }else { - this.prefix = Component.text(ConfigManager.MainConfig.player_prefix); - this.suffix = Component.text(ConfigManager.MainConfig.player_suffix); - this.prefixText = ConfigManager.MainConfig.player_prefix; - this.suffixText = ConfigManager.MainConfig.player_suffix; + this.prefix = MiniMessage.miniMessage().deserialize(ParsePapi.parsePlaceholders(this.player, ConfigManager.MainConfig.player_prefix)); + this.suffix = MiniMessage.miniMessage().deserialize(ParsePapi.parsePlaceholders(this.player, ConfigManager.MainConfig.player_suffix)); + this.prefixText = ""; + this.suffixText = ""; + } else { + this.prefix = MiniMessage.miniMessage().deserialize(ConfigManager.MainConfig.player_prefix); + this.suffix = MiniMessage.miniMessage().deserialize(ConfigManager.MainConfig.player_suffix); + this.prefixText = ""; + this.suffixText = ""; } this.color = ChatColor.WHITE; this.team.setPrefix(""); diff --git a/src/main/java/net/momirealms/customnameplates/scoreboard/ScoreBoardManager.java b/src/main/java/net/momirealms/customnameplates/scoreboard/ScoreBoardManager.java index 036e041..efaa37c 100644 --- a/src/main/java/net/momirealms/customnameplates/scoreboard/ScoreBoardManager.java +++ b/src/main/java/net/momirealms/customnameplates/scoreboard/ScoreBoardManager.java @@ -17,7 +17,9 @@ package net.momirealms.customnameplates.scoreboard; +import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.hook.TABHook; import org.bukkit.entity.Player; import java.util.HashMap; @@ -28,22 +30,27 @@ public record ScoreBoardManager(CustomNameplates plugin) { public static Map teams = new HashMap<>(); public NameplatesTeam getOrCreateTeam(Player player) { - if (!teams.containsKey(player.getName())) { - teams.put(player.getName(), new NameplatesTeam(this.plugin, player)); + if (ConfigManager.MainConfig.tab){ + String tabTeamName = TABHook.getTABTeam(player.getName()); + if (!teams.containsKey(tabTeamName)) { + teams.put(tabTeamName, new NameplatesTeam(this.plugin, player)); + } + this.getTeam(tabTeamName).updateNameplates(); + return teams.get(tabTeamName); + } else { + if (!teams.containsKey(player.getName())) { + teams.put(player.getName(), new NameplatesTeam(this.plugin, player)); + } + this.getTeam(player.getName()).updateNameplates(); + return teams.get(player.getName()); } - this.getTeam(player.getName()).updateNameplates(); - return teams.get(player.getName()); } - public void removeTeam(String playerName) { - teams.remove(playerName); + public void removeTeam(String teamName) { + teams.remove(teamName); } - public NameplatesTeam getTeam(String team) { - return teams.get(team); - } - - public boolean doesTeamExist(String playerName) { - return teams.containsKey(playerName); + public NameplatesTeam getTeam(String teamName) { + return teams.get(teamName); } } diff --git a/src/main/resources/actionbar.yml b/src/main/resources/actionbar.yml index 149946a..e77926e 100644 --- a/src/main/resources/actionbar.yml +++ b/src/main/resources/actionbar.yml @@ -1,2 +1,2 @@ -text: '%nameplates_bg_player%Hello! %player_name% %nameplates_bg_season%Current Season: %customcrops_season%' -refresh-rate: 1 \ No newline at end of file +text: '%nameplates_prefix%Hello! %player_name% %player_ip%%nameplates_suffix%' +refresh-rate: 5 \ No newline at end of file diff --git a/src/main/resources/background.yml b/src/main/resources/background.yml index 3151f26..2a15401 100644 --- a/src/main/resources/background.yml +++ b/src/main/resources/background.yml @@ -1,5 +1,18 @@ background: - bedrock: + bedrock_1: + x-offset: 5 + y-offset: 7 + start: b0 + offset_1: b1 + offset_2: b2 + offset_4: b4 + offset_8: b8 + offset_16: b16 + offset_32: b32 + offset_64: b64 + offset_128: b128 + end: b0 + bedrock_2: x-offset: 5 y-offset: 10 start: b0 diff --git a/src/main/resources/bossbar.yml b/src/main/resources/bossbar.yml index 7d5168e..576345d 100644 --- a/src/main/resources/bossbar.yml +++ b/src/main/resources/bossbar.yml @@ -1,13 +1,28 @@ # You need a restart when you add/remove a bossbar -# There's a bug that font can't be applied to bossbar. This is an Adventure API bug that I can't fix for the moment. + +# IMPORTANT NOTICE +# mode: Adventure / ProtocolLib +# There's a bug that font can't be applied to Adventure bossbar. This is an Adventure API bug that I can't fix for the moment. +# So I made the ProtocolLib mode and I will remove ProtocolLib mode when Adventure API is fixed! +# ProtocolLib mode doesn't support multiple bossbars for the moment. +# It requires a restart to change mode +mode: ProtocolLib + bossbar: - example_1: - text: 'Hi %player_name%! This is you nameplate!' + example: + text: '%nameplates_bg_player%Hello! %player_name% %nameplates_bg_pos%You are now at: %player_x%, %player_y%, %player_z%' + refresh-rate: 5 + # PINK + # YELLOW + # WHITE + # RED + # PURPLE + # GREEN + # BLUE color: YELLOW - refresh-rate: 1 - overlay: PROGRESS - example_2: - text: '%nameplates_prefix%Hello! %player_name% %player_health_rounded%❤%nameplates_suffix%' - color: WHITE - refresh-rate: 1 + # PROGRESS + # NOTCHED_6 + # NOTCHED_10 + # NOTCHED_12 + # NOTCHED_20 overlay: PROGRESS \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 46e614e..9f445f4 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -11,6 +11,8 @@ config: # When enabled, the plugin will automatically place the nameplates # folder into the resource pack generated by ItemsAdder. ItemsAdder: false + # When enabled, the plugin will hook into TAB's team management + TAB: false # Your namespace # If you don't know how font works, don't change this @@ -21,6 +23,11 @@ config: # If you don't know how font works, don't change this font: "default" + # Another ascii font with y offset + another-ascii-font: + enable: true + y-offset: 3 + # Customize the folder where png files should be generated. # This is useful for those who want to keep their resource pack structure in order. nameplate-folder-path: 'font\nameplates\' @@ -46,8 +53,8 @@ config: # Placeholder based prefix and suffix system. When enabled, it is recommended # to use PlaceholderAPI to be able to use this feature to the fullest extent. # keep it empty if you don't want to enable this feature. - prefix: '%vault_prefix%' - suffix: ' %player_health_rounded%❤' + prefix: 'Hello! ' + suffix: ' %player_ip%' # should prefix/suffix be hidden when player is equipping a nameplate hide-prefix-when-equipped: false diff --git a/src/main/resources/custom-papi.yml b/src/main/resources/custom-papi.yml index dc67b08..98fb949 100644 --- a/src/main/resources/custom-papi.yml +++ b/src/main/resources/custom-papi.yml @@ -9,10 +9,10 @@ papi: #%nameplates_bg_player%Hello! %player_name% player: text: 'Hello! %player_name%' - background: bedrock - season: - text: 'Current Season: %customcrops_season%' - background: bedrock + background: bedrock_1 + pos: + text: 'You are now at: %player_x%, %player_y%, %player_z%' + background: bedrock_1 #This papi will not return text with nameplate #It will only return the nameplate diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index d94bbef..cc6c5d9 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -8,6 +8,7 @@ depend: softdepend: - ItemsAdder - PlaceholderAPI + - TAB commands: customnameplates: usage: /customnameplates help