From b0c18c27dda3a1768537b66617cbde42b297daa5 Mon Sep 17 00:00:00 2001 From: Xiao-MoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Wed, 26 Oct 2022 00:48:03 +0800 Subject: [PATCH] 2.1.0 --- build.gradle | 3 +- .../customnameplates/ConfigManager.java | 567 ------------------ .../customnameplates/CustomNameplates.java | 245 ++------ .../bossbar/BossBarManager.java | 66 -- .../bungeecord/BungeeEventListener.java | 7 +- .../commands/AbstractSubCommand.java | 227 +++++++ .../commands/BubblesCommand.java | 86 +++ .../commands/NameplateCommand.java | 90 +++ .../SubCommand.java} | 30 +- .../commands/bb/ExecuteB.java | 185 ------ .../commands/bb/TabCompleteB.java | 119 ---- .../commands/np/ExecuteN.java | 398 ------------ .../commands/np/TabCompleteN.java | 140 ----- .../commands/subcmd/BubblesEquipCommand.java | 57 ++ .../subcmd/BubblesForceEquipCommand.java | 70 +++ .../subcmd/BubblesForceUnequipCommand.java | 61 ++ .../commands/subcmd/BubblesListCommand.java | 49 ++ .../subcmd/BubblesUnequipCommand.java | 38 ++ .../commands/subcmd/ForcePreviewCommand.java | 101 ++++ .../commands/subcmd/HelpCommand.java | 47 ++ .../subcmd/NameplatesEquipCommand.java | 62 ++ .../subcmd/NameplatesForceEquipCommand.java | 76 +++ .../subcmd/NameplatesForceUnequipCommand.java | 57 ++ .../subcmd/NameplatesListCommand.java | 47 ++ .../subcmd/NameplatesUnequipCommand.java | 37 ++ .../commands/subcmd/PreviewCommand.java | 57 ++ .../commands/subcmd/ReloadCommand.java | 37 ++ .../customnameplates/data/DataManager.java | 102 ---- .../customnameplates/data/SqlHandler.java | 174 ------ .../helper/LibraryLoader.java | 5 +- .../customnameplates/helper/Log.java | 13 +- .../helper/MavenLibraries.java | 7 +- .../customnameplates/helper/MavenLibrary.java | 8 +- .../helper/NonnullByDefault.java | 5 +- .../customnameplates/helper/Repository.java | 7 +- .../helper/URLClassLoaderAccess.java | 3 +- .../hook/NameplatePlaceholders.java | 58 +- .../hook/OffsetPlaceholders.java | 11 +- .../hook/PlaceholderManager.java | 68 --- .../bubbles => listener}/ChatListener.java | 6 +- .../EntityTagListener.java} | 5 +- .../ProxyDataListener.java | 11 +- .../{bossbar => listener}/SimpleListener.java | 12 +- .../bubbles => listener}/TrChatListener.java | 18 +- .../packet}/EntityDestroyListener.java | 6 +- .../packet}/EntityLookListener.java | 6 +- .../packet}/EntityMountListener.java | 6 +- .../packet}/EntityMoveListener.java | 6 +- .../packet}/EntitySpawnListener.java | 6 +- .../packet}/EntityTeleportListener.java | 6 +- .../manager/ActionBarManager.java | 99 +++ .../manager/BossBarManager.java | 125 ++++ .../manager/ChatBubblesManager.java | 195 ++++++ .../manager/ConfigManager.java | 73 +++ .../customnameplates/manager/DataManager.java | 80 +++ .../manager/MessageManager.java | 78 +++ .../manager/NameplateManager.java | 174 ++++++ .../manager/PlaceholderManager.java | 109 ++++ .../manager/ResourceManager.java | 479 +++++++++++++++ .../customnameplates/manager/TeamManager.java | 112 ++++ .../manager/WidthManager.java | 48 ++ .../nameplates/NameplateUtil.java | 94 --- .../nameplates/NameplatesTeam.java | 167 ------ .../nameplates/TeamManager.java | 81 --- .../nameplates/mode/EntityTag.java | 69 --- .../nameplates/mode/EventListener.java | 39 -- .../nameplates/mode/NameplateManager.java | 77 --- .../mode/bubbles/ChatBubblesManager.java | 184 ------ .../nameplates/mode/rd/RidingTag.java | 154 ----- .../nameplates/mode/tm/TeamTag.java | 96 --- .../mode/tmpackets/TeamPacketUtil.java | 104 ---- .../{ => objects}/Function.java | 16 +- .../customnameplates/objects/TextCache.java | 30 +- .../actionbar/ActionBarConfig.java | 4 +- .../actionbar/ActionBarTask.java | 12 +- .../objects/{ => background}/BackGround.java | 8 +- .../{ => background}/BackGroundText.java | 2 +- .../{ => objects}/bossbar/BossBarConfig.java | 4 +- .../bossbar/BossBarSender.java} | 10 +- .../{ => objects}/bossbar/Overlay.java | 4 +- .../{ => objects}/bossbar/TimerTaskP.java | 33 +- .../objects/data/DataStorageInterface.java | 12 + .../objects/data/FileStorageImpl.java | 64 ++ .../objects/data/MySQLStorageImpl.java | 126 ++++ .../{ => objects}/data/PlayerData.java | 25 +- .../objects/data/SqlConnection.java | 137 +++++ .../objects/data/SqlConstants.java | 9 + .../{ => objects}/font/FontChar.java | 2 +- .../{ => objects}/font/FontOffset.java | 2 +- .../{ => objects}/font/FontUtil.java | 14 +- .../{ => objects}/font/FontWidthNormal.java | 2 +- .../{ => objects}/font/FontWidthThin.java | 2 +- .../{ => objects}/nameplates/ArmorStand.java | 2 +- .../nameplates/ArmorStandManager.java | 15 +- .../nameplates/BubbleConfig.java | 2 +- .../nameplates/FakeArmorStand.java | 13 +- .../nameplates/NameplateConfig.java | 2 +- .../objects/nameplates/NameplateMode.java | 59 ++ .../{ => nameplates}/NameplateText.java | 2 +- .../objects/nameplates/NameplatesTeam.java | 156 +++++ .../nameplates/mode/EntityTag.java} | 177 +++--- .../nameplates/mode/PacketsHandler.java | 17 +- .../mode/bubbles/BBPacketsHandle.java | 12 +- .../nameplates/mode/rd/RdPacketsHandler.java | 36 +- .../objects/nameplates/mode/rd/RidingTag.java | 64 ++ .../objects/nameplates/mode/tm/TeamTag.java | 73 +++ .../nameplates/mode/tp/TeleportingTag.java | 82 +++ .../nameplates/mode/tp/TpPacketsHandler.java | 10 +- .../nameplates/mode/tp/VehicleChecker.java | 7 +- .../{ => objects}/requirements/Biome.java | 2 +- .../requirements/CustomPapi.java | 4 +- .../requirements/Permission.java | 2 +- .../requirements/PlayerCondition.java | 15 +- .../requirements/Requirement.java | 2 +- .../{ => objects}/requirements/Time.java | 2 +- .../{ => objects}/requirements/Weather.java | 2 +- .../{ => objects}/requirements/World.java | 2 +- .../{ => objects}/requirements/YPos.java | 2 +- .../requirements/papi/ExpressionAnd.java | 2 +- .../requirements/papi/ExpressionOr.java | 2 +- .../requirements/papi/PapiEquals.java | 2 +- .../requirements/papi/PapiGreater.java | 2 +- .../requirements/papi/PapiNoLarger.java | 2 +- .../requirements/papi/PapiNoLess.java | 2 +- .../requirements/papi/PapiNotEquals.java | 2 +- .../requirements/papi/PapiRequirement.java | 2 +- .../requirements/papi/PapiSmaller.java | 2 +- .../objects/team/SimpleTeam.java | 16 + .../team/SimpleTeamVisibility.java} | 58 +- .../team/TABTeamHook.java} | 33 +- .../objects/team/TABbcHook.java | 50 ++ .../objects/team/TeamNameInterface.java | 9 + .../team/TeamPacketInterface.java} | 4 +- .../team/TeamPrefixSuffix.java} | 59 +- .../resource/ResourceManager.java | 561 ----------------- .../customnameplates/utils/AdventureUtil.java | 25 +- .../customnameplates/utils/ConfigUtil.java | 70 ++- .../customnameplates/utils/HoloUtil.java | 5 +- .../customnameplates/utils/JsonUtil.java | 29 - .../NameplateUtil.java} | 11 +- .../customnameplates/utils/SqlConnection.java | 200 ------ .../utils/TeamManagePacketUtil.java | 78 +++ src/main/resources/MODULES.yml | 7 +- src/main/resources/bubble.yml | 7 +- src/main/resources/config.yml | 12 +- src/main/resources/database.yml | 57 +- src/main/resources/messages/cn.yml | 8 +- src/main/resources/messages/en.yml | 6 +- src/main/resources/messages/es.yml | 4 +- src/main/resources/plugin.yml | 2 +- 150 files changed, 4307 insertions(+), 4447 deletions(-) delete mode 100644 src/main/java/net/momirealms/customnameplates/ConfigManager.java delete mode 100644 src/main/java/net/momirealms/customnameplates/bossbar/BossBarManager.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/AbstractSubCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/BubblesCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/NameplateCommand.java rename src/main/java/net/momirealms/customnameplates/{nameplates/listener/BukkitListener.java => commands/SubCommand.java} (53%) delete mode 100644 src/main/java/net/momirealms/customnameplates/commands/bb/ExecuteB.java delete mode 100644 src/main/java/net/momirealms/customnameplates/commands/bb/TabCompleteB.java delete mode 100644 src/main/java/net/momirealms/customnameplates/commands/np/ExecuteN.java delete mode 100644 src/main/java/net/momirealms/customnameplates/commands/np/TabCompleteN.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesEquipCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesForceEquipCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesForceUnequipCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesListCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesUnequipCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/subcmd/ForcePreviewCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/subcmd/HelpCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesEquipCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesForceEquipCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesForceUnequipCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesListCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesUnequipCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/subcmd/PreviewCommand.java create mode 100644 src/main/java/net/momirealms/customnameplates/commands/subcmd/ReloadCommand.java delete mode 100644 src/main/java/net/momirealms/customnameplates/data/DataManager.java delete mode 100644 src/main/java/net/momirealms/customnameplates/data/SqlHandler.java delete mode 100644 src/main/java/net/momirealms/customnameplates/hook/PlaceholderManager.java rename src/main/java/net/momirealms/customnameplates/{nameplates/mode/bubbles => listener}/ChatListener.java (88%) rename src/main/java/net/momirealms/customnameplates/{nameplates/mode/EventListenerE.java => listener/EntityTagListener.java} (85%) rename src/main/java/net/momirealms/customnameplates/{nameplates => listener}/ProxyDataListener.java (82%) rename src/main/java/net/momirealms/customnameplates/{bossbar => listener}/SimpleListener.java (78%) rename src/main/java/net/momirealms/customnameplates/{nameplates/mode/bubbles => listener}/TrChatListener.java (60%) rename src/main/java/net/momirealms/customnameplates/{nameplates/listener => listener/packet}/EntityDestroyListener.java (85%) rename src/main/java/net/momirealms/customnameplates/{nameplates/listener => listener/packet}/EntityLookListener.java (84%) rename src/main/java/net/momirealms/customnameplates/{nameplates/listener => listener/packet}/EntityMountListener.java (84%) rename src/main/java/net/momirealms/customnameplates/{nameplates/listener => listener/packet}/EntityMoveListener.java (85%) rename src/main/java/net/momirealms/customnameplates/{nameplates/listener => listener/packet}/EntitySpawnListener.java (84%) rename src/main/java/net/momirealms/customnameplates/{nameplates/listener => listener/packet}/EntityTeleportListener.java (85%) create mode 100644 src/main/java/net/momirealms/customnameplates/manager/ActionBarManager.java create mode 100644 src/main/java/net/momirealms/customnameplates/manager/BossBarManager.java create mode 100644 src/main/java/net/momirealms/customnameplates/manager/ChatBubblesManager.java create mode 100644 src/main/java/net/momirealms/customnameplates/manager/ConfigManager.java create mode 100644 src/main/java/net/momirealms/customnameplates/manager/DataManager.java create mode 100644 src/main/java/net/momirealms/customnameplates/manager/MessageManager.java create mode 100644 src/main/java/net/momirealms/customnameplates/manager/NameplateManager.java create mode 100644 src/main/java/net/momirealms/customnameplates/manager/PlaceholderManager.java create mode 100644 src/main/java/net/momirealms/customnameplates/manager/ResourceManager.java create mode 100644 src/main/java/net/momirealms/customnameplates/manager/TeamManager.java create mode 100644 src/main/java/net/momirealms/customnameplates/manager/WidthManager.java delete mode 100644 src/main/java/net/momirealms/customnameplates/nameplates/NameplateUtil.java delete mode 100644 src/main/java/net/momirealms/customnameplates/nameplates/NameplatesTeam.java delete mode 100644 src/main/java/net/momirealms/customnameplates/nameplates/TeamManager.java delete mode 100644 src/main/java/net/momirealms/customnameplates/nameplates/mode/EntityTag.java delete mode 100644 src/main/java/net/momirealms/customnameplates/nameplates/mode/EventListener.java delete mode 100644 src/main/java/net/momirealms/customnameplates/nameplates/mode/NameplateManager.java delete mode 100644 src/main/java/net/momirealms/customnameplates/nameplates/mode/bubbles/ChatBubblesManager.java delete mode 100644 src/main/java/net/momirealms/customnameplates/nameplates/mode/rd/RidingTag.java delete mode 100644 src/main/java/net/momirealms/customnameplates/nameplates/mode/tm/TeamTag.java delete mode 100644 src/main/java/net/momirealms/customnameplates/nameplates/mode/tmpackets/TeamPacketUtil.java rename src/main/java/net/momirealms/customnameplates/{ => objects}/Function.java (81%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/actionbar/ActionBarConfig.java (91%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/actionbar/ActionBarTask.java (84%) rename src/main/java/net/momirealms/customnameplates/objects/{ => background}/BackGround.java (93%) rename src/main/java/net/momirealms/customnameplates/objects/{ => background}/BackGroundText.java (93%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/bossbar/BossBarConfig.java (93%) rename src/main/java/net/momirealms/customnameplates/{bossbar/Sender.java => objects/bossbar/BossBarSender.java} (96%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/bossbar/Overlay.java (93%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/bossbar/TimerTaskP.java (61%) create mode 100644 src/main/java/net/momirealms/customnameplates/objects/data/DataStorageInterface.java create mode 100644 src/main/java/net/momirealms/customnameplates/objects/data/FileStorageImpl.java create mode 100644 src/main/java/net/momirealms/customnameplates/objects/data/MySQLStorageImpl.java rename src/main/java/net/momirealms/customnameplates/{ => objects}/data/PlayerData.java (74%) create mode 100644 src/main/java/net/momirealms/customnameplates/objects/data/SqlConnection.java create mode 100644 src/main/java/net/momirealms/customnameplates/objects/data/SqlConstants.java rename src/main/java/net/momirealms/customnameplates/{ => objects}/font/FontChar.java (96%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/font/FontOffset.java (98%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/font/FontUtil.java (78%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/font/FontWidthNormal.java (97%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/font/FontWidthThin.java (97%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/nameplates/ArmorStand.java (95%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/nameplates/ArmorStandManager.java (89%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/nameplates/BubbleConfig.java (95%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/nameplates/FakeArmorStand.java (96%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/nameplates/NameplateConfig.java (95%) create mode 100644 src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplateMode.java rename src/main/java/net/momirealms/customnameplates/objects/{ => nameplates}/NameplateText.java (93%) create mode 100644 src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplatesTeam.java rename src/main/java/net/momirealms/customnameplates/{nameplates/mode/tp/TeleportingTag.java => objects/nameplates/mode/EntityTag.java} (51%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/nameplates/mode/PacketsHandler.java (81%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/nameplates/mode/bubbles/BBPacketsHandle.java (90%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/nameplates/mode/rd/RdPacketsHandler.java (78%) create mode 100644 src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/rd/RidingTag.java create mode 100644 src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/tm/TeamTag.java create mode 100644 src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/tp/TeleportingTag.java rename src/main/java/net/momirealms/customnameplates/{ => objects}/nameplates/mode/tp/TpPacketsHandler.java (92%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/nameplates/mode/tp/VehicleChecker.java (93%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/Biome.java (95%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/CustomPapi.java (97%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/Permission.java (94%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/PlayerCondition.java (74%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/Requirement.java (92%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/Time.java (95%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/Weather.java (96%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/World.java (94%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/YPos.java (95%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/papi/ExpressionAnd.java (94%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/papi/ExpressionOr.java (94%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/papi/PapiEquals.java (93%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/papi/PapiGreater.java (93%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/papi/PapiNoLarger.java (93%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/papi/PapiNoLess.java (93%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/papi/PapiNotEquals.java (93%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/papi/PapiRequirement.java (92%) rename src/main/java/net/momirealms/customnameplates/{ => objects}/requirements/papi/PapiSmaller.java (93%) create mode 100644 src/main/java/net/momirealms/customnameplates/objects/team/SimpleTeam.java rename src/main/java/net/momirealms/customnameplates/{nameplates/mode/tmpackets/TeamPacketB.java => objects/team/SimpleTeamVisibility.java} (52%) rename src/main/java/net/momirealms/customnameplates/{actionbar/ActionBarManager.java => objects/team/TABTeamHook.java} (54%) create mode 100644 src/main/java/net/momirealms/customnameplates/objects/team/TABbcHook.java create mode 100644 src/main/java/net/momirealms/customnameplates/objects/team/TeamNameInterface.java rename src/main/java/net/momirealms/customnameplates/{nameplates/TeamPacketManager.java => objects/team/TeamPacketInterface.java} (89%) rename src/main/java/net/momirealms/customnameplates/{nameplates/mode/tmpackets/TeamPacketA.java => objects/team/TeamPrefixSuffix.java} (52%) delete mode 100644 src/main/java/net/momirealms/customnameplates/resource/ResourceManager.java delete mode 100644 src/main/java/net/momirealms/customnameplates/utils/JsonUtil.java rename src/main/java/net/momirealms/customnameplates/{hook/TABTeamHook.java => utils/NameplateUtil.java} (69%) delete mode 100644 src/main/java/net/momirealms/customnameplates/utils/SqlConnection.java create mode 100644 src/main/java/net/momirealms/customnameplates/utils/TeamManagePacketUtil.java diff --git a/build.gradle b/build.gradle index 3c90e93..d28eec0 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '2.0.6' +version = '2.1.0' repositories { mavenCentral() @@ -49,7 +49,6 @@ dependencies { compileOnly 'net.md-5:bungeecord-api:1.19-R0.1-SNAPSHOT' compileOnly 'codecrafter47.bungeetablistplus:bungeetablistplus-api-bungee:3.5.2' compileOnly 'com.github.LoneDev6:api-itemsadder:3.2.3c' - compileOnly 'com.github.oraxen:oraxen:-SNAPSHOT' implementation('net.kyori:adventure-api:4.11.0') implementation('net.kyori:adventure-platform-bukkit:4.1.2') implementation('net.kyori:adventure-text-minimessage:4.11.0') diff --git a/src/main/java/net/momirealms/customnameplates/ConfigManager.java b/src/main/java/net/momirealms/customnameplates/ConfigManager.java deleted file mode 100644 index ee3ec98..0000000 --- a/src/main/java/net/momirealms/customnameplates/ConfigManager.java +++ /dev/null @@ -1,567 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates; - -import net.kyori.adventure.key.Key; -import net.momirealms.customnameplates.actionbar.ActionBarConfig; -import net.momirealms.customnameplates.bossbar.BossBarConfig; -import net.momirealms.customnameplates.bossbar.Overlay; -import net.momirealms.customnameplates.data.SqlHandler; -import net.momirealms.customnameplates.font.FontOffset; -import net.momirealms.customnameplates.font.FontWidthNormal; -import net.momirealms.customnameplates.font.FontWidthThin; -import net.momirealms.customnameplates.objects.StaticText; -import net.momirealms.customnameplates.requirements.*; -import net.momirealms.customnameplates.utils.AdventureUtil; -import net.momirealms.customnameplates.objects.BackGroundText; -import net.momirealms.customnameplates.objects.NameplateText; -import net.momirealms.customnameplates.utils.ConfigUtil; -import net.momirealms.customnameplates.utils.Reflection; -import org.bukkit.Bukkit; -import org.bukkit.boss.BarColor; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; - -import java.io.File; -import java.io.IOException; -import java.util.*; - -public class ConfigManager { - - public static TreeMap bossBars = new TreeMap<>(); - public static HashMap actionBars = new HashMap<>(); - public static HashMap papiBG = new HashMap<>(); - public static HashMap papiNP = new HashMap<>(); - public static HashMap papiST = new HashMap<>(); - public static HashMap fontWidth = new HashMap<>(); - - /** - * 获取配置文件 - * @param configName 文件名 - * @return YAML配置 - */ - public static YamlConfiguration getConfig(String configName) { - File file = new File(CustomNameplates.instance.getDataFolder(), configName); - if (!file.exists()) { - CustomNameplates.instance.saveResource(configName, false); - } - return YamlConfiguration.loadConfiguration(file); - } - - /** - * 载入模块 - */ - public static class Module{ - - public static boolean nameplate; - public static boolean background; - public static boolean bossBar; - public static boolean actionbar; - public static boolean bubbles; - - public static void loadModule(){ - YamlConfiguration module = getConfig("MODULES.yml"); - nameplate = module.getBoolean("nameplate", true); - background = module.getBoolean("background", true); - bossBar = module.getBoolean("bossbar", true); - actionbar = module.getBoolean("actionbar", true); - bubbles = module.getBoolean("bubbles", false); - try { - Reflection.load(); - ConfigUtil.update(); - } - catch (Exception e){ - e.printStackTrace(); - } - } - } - - /** - * 载入主配置 - */ - public static class Main { - - public static String namespace; - public static String fontName; - public static String start_char; - public static String lang; - public static String version; - - public static String np_folder_path; - public static String bg_folder_path; - public static String ss_folder_path; - public static String bb_folder_path; - public static String font; - public static String[] trChatChannel; - - public static boolean itemsAdder; - public static boolean placeholderAPI; - - public static boolean thin_font; - public static boolean tab; - public static boolean tab_bc; - public static boolean oraxen; - public static boolean extract; - public static boolean trChat; - public static List offsets; - public static char start; - public static Key key; - - public static void reload(){ - - CustomNameplates.instance.saveDefaultConfig(); - CustomNameplates.instance.reloadConfig(); - - FileConfiguration config = CustomNameplates.instance.getConfig(); - lang = config.getString("config.lang"); - namespace = config.getString("config.namespace"); - font = config.getString("config.font"); - fontName = namespace + ":" + font; - start_char = config.getString("config.start-char"); - start = start_char.charAt(0); - np_folder_path = config.getString("config.nameplate-folder-path","font\\nameplates\\"); - bb_folder_path = config.getString("config.bubble-folder-path","font\\bubbles\\"); - bg_folder_path = config.getString("config.background-folder-path","font\\backgrounds\\"); - ss_folder_path = config.getString("config.space-split-folder-path","font\\"); - key = Key.key(fontName); - thin_font = config.getBoolean("config.use-thin-font",false); - itemsAdder = config.getBoolean("config.integrations.ItemsAdder",false); - version = config.getString("config-version"); - placeholderAPI = config.getBoolean("config.integrations.PlaceholderAPI",false); - tab = config.getBoolean("config.integrations.TAB",false); - tab_bc = config.getBoolean("config.integrations.TAB-BC",false); - oraxen = config.getBoolean("config.integrations.Oraxen",false); - trChat = config.getBoolean("config.integrations.TrChat",false); - trChatChannel = config.getStringList("config.integrations.TrChat-exlude-channels").toArray(new String[0]); - offsets = config.getIntegerList("config.ascii-y-offset.offset"); - - if(config.getBoolean("config.extract-shader",true)) { - extract = true; - } - if (itemsAdder && CustomNameplates.instance.getServer().getPluginManager().getPlugin("ItemsAdder") == null){ - CustomNameplates.instance.getLogger().warning("Failed to initialize ItemsAdder!"); - itemsAdder = false; - } - if (placeholderAPI && CustomNameplates.instance.getServer().getPluginManager().getPlugin("PlaceholderAPI") == null){ - CustomNameplates.instance.getLogger().warning("Failed to initialize PlaceholderAPI!"); - placeholderAPI = false; - } - if ((tab && CustomNameplates.instance.getServer().getPluginManager().getPlugin("TAB") == null) || tab_bc){ - tab = false; - } - if (oraxen && CustomNameplates.instance.getServer().getPluginManager().getPlugin("Oraxen") == null){ - CustomNameplates.instance.getLogger().warning("Failed to initialize Oraxen!"); - oraxen = false; - } - if (trChat && CustomNameplates.instance.getServer().getPluginManager().getPlugin("TrChat") == null){ - CustomNameplates.instance.getLogger().warning("Failed to initialize TrChat!"); - trChat = false; - } - } - } - - public static class Nameplate{ - - public static String default_nameplate; - public static String player_prefix; - public static String player_suffix; - public static String player_name; - public static long preview; - public static boolean update; - public static int refresh; - public static String mode; - public static boolean hidePrefix; - public static boolean hideSuffix; - public static boolean tryHook; - public static boolean removeTag; - public static boolean smallSize; - public static boolean fakeTeam; - public static HashMap textMap = new HashMap<>(); - - public static void reload() { - - YamlConfiguration config = getConfig("nameplate.yml"); - default_nameplate = config.getString("nameplate.default-nameplate"); - player_name = config.getString("nameplate.player-name", "%player_name%"); - preview = config.getLong("nameplate.preview-duration"); - mode = config.getString("nameplate.mode","team"); - update = config.getBoolean("nameplate.update.enable",true); - fakeTeam = config.getBoolean("nameplate.create-fake-team",true); - refresh = config.getInt("nameplate.update.ticks",20); - player_prefix = config.getString("nameplate.prefix",""); - player_suffix = config.getString("nameplate.suffix",""); - hidePrefix = config.getBoolean("nameplate.team.hide-prefix-when-equipped",true); - hideSuffix = config.getBoolean("nameplate.team.hide-suffix-when-equipped",true); - if (mode.equalsIgnoreCase("team")) removeTag = false; - else if (mode.equalsIgnoreCase("riding")) { - tryHook = config.getBoolean("nameplate.riding.try-to-hook-cosmetics-plugin", false); - List texts = config.getStringList("nameplate.riding.text"); - textMap.clear(); - for (String text : texts) { - textMap.put(text, -0.1); - } - smallSize = config.getBoolean("nameplate.riding.small-height", true); - removeTag = config.getBoolean("nameplate.riding.remove-nametag"); - } - else if (mode.equalsIgnoreCase("teleporting")) { - removeTag = config.getBoolean("nameplate.teleporting.remove-nametag"); - smallSize = config.getBoolean("nameplate.teleporting.small-height", true); - textMap.clear(); - config.getConfigurationSection("nameplate.teleporting.text").getKeys(false).forEach(key -> { - textMap.put(config.getString("nameplate.teleporting.text." + key + ".content"), config.getDouble("nameplate.teleporting.text." + key + ".offset")); - }); - } - } - } - - /** - * 载入消息文件 - */ - public static class Message{ - - public static String noPerm; - public static String prefix; - public static String lackArgs; - public static String reload; - public static String not_online; - public static String no_console; - public static String coolDown; - public static String preview; - public static String generate; - public static String noNameplate; - public static String generateDone; - - public static String np_equip; - public static String np_unEquip; - public static String np_force_equip; - public static String np_force_unEquip; - public static String np_not_exist; - public static String np_notAvailable; - public static String np_available; - public static String np_haveNone; - - public static String bb_equip; - public static String bb_unEquip; - public static String bb_force_equip; - public static String bb_force_unEquip; - public static String bb_not_exist; - public static String bb_notAvailable; - public static String bb_available; - public static String bb_haveNone; - - public static void reload(){ - - YamlConfiguration messagesConfig = getConfig("messages" + File.separator + Main.lang +".yml"); - - noPerm = messagesConfig.getString("messages.no-perm"); - prefix = messagesConfig.getString("messages.prefix"); - lackArgs = messagesConfig.getString("messages.lack-args"); - reload = messagesConfig.getString("messages.reload"); - coolDown = messagesConfig.getString("messages.cooldown"); - preview = messagesConfig.getString("messages.preview"); - generate = messagesConfig.getString("messages.generate"); - generateDone = messagesConfig.getString("messages.generate-done"); - noNameplate = messagesConfig.getString("messages.no-nameplate"); - not_online = messagesConfig.getString("messages.not-online"); - no_console = messagesConfig.getString("messages.no-console"); - - np_equip = messagesConfig.getString("messages.equip-nameplates"); - np_unEquip = messagesConfig.getString("messages.unequip-nameplates"); - np_force_equip = messagesConfig.getString("messages.force-equip-nameplates"); - np_force_unEquip = messagesConfig.getString("messages.force-unequip-nameplates"); - np_not_exist = messagesConfig.getString("messages.not-exist-nameplates"); - np_notAvailable = messagesConfig.getString("messages.not-available-nameplates"); - np_available = messagesConfig.getString("messages.available-nameplates"); - np_haveNone = messagesConfig.getString("messages.have-no-nameplates"); - - bb_equip = messagesConfig.getString("messages.equip-bubbles"); - bb_unEquip = messagesConfig.getString("messages.unequip-bubbles"); - bb_force_equip = messagesConfig.getString("messages.force-equip-bubbles"); - bb_force_unEquip = messagesConfig.getString("messages.force-unequip-bubbles"); - bb_not_exist = messagesConfig.getString("messages.not-exist-bubbles"); - bb_notAvailable = messagesConfig.getString("messages.not-available-bubbles"); - bb_available = messagesConfig.getString("messages.available-bubbles"); - bb_haveNone = messagesConfig.getString("messages.have-no-bubbles"); - } - } - - /** - * 载入BossBar配置 - */ - public static void loadBossBar() { - bossBars.clear(); - YamlConfiguration config = getConfig("bossbar.yml"); - if (config.contains("bossbar")) { - config.getConfigurationSection("bossbar").getKeys(false).forEach(key -> { - String[] texts; - String text = config.getString("bossbar." + key + ".text"); - if (text != null) { - texts = new String[]{text}; - } - else { - List strings = config.getStringList("bossbar." + key + ".dynamic-text"); - texts = strings.toArray(new String[0]); - } - List requirements = new ArrayList<>(); - if (config.contains("bossbar." + key + ".conditions")){ - config.getConfigurationSection("bossbar." + key + ".conditions").getKeys(false).forEach(requirement -> { - switch (requirement){ - case "weather" -> requirements.add(new Weather(config.getStringList("bossbar." + key + ".conditions.weather"))); - case "ypos" -> requirements.add(new YPos(config.getStringList("bossbar." + key + ".conditions.ypos"))); - case "world" -> requirements.add(new World(config.getStringList("bossbar." + key + ".conditions.world"))); - case "biome" -> requirements.add(new Biome(config.getStringList("bossbar." + key + ".conditions.biome"))); - case "permission" -> requirements.add(new Permission(config.getString("bossbar." + key + ".conditions.permission"))); - case "time" -> requirements.add(new Time(config.getStringList("bossbar." + key + ".conditions.time"))); - case "papi-condition" -> { - if (Main.placeholderAPI) requirements.add(new CustomPapi(config.getConfigurationSection("bossbar." + key + ".conditions.papi-condition").getValues(false))); - else AdventureUtil.consoleMessage("[CustomNameplates] You need to enable PlaceholderAPI Integration to use papi condition!"); - } - } - }); - } - BossBarConfig bossBarConfig = new BossBarConfig( - texts, - Overlay.valueOf(config.getString("bossbar."+key+".overlay","progress").toUpperCase()), - BarColor.valueOf(config.getString("bossbar."+key+".color","white").toUpperCase()), - config.getInt("bossbar." + key + ".refresh-rate", 15) - 1, - config.getInt("bossbar." + key + ".switch-interval", 5) * 20, - requirements - ); - bossBars.put(key, bossBarConfig); - }); - AdventureUtil.consoleMessage("[CustomNameplates] Loaded " + bossBars.size() + " bossbars"); - } - else { - File file = new File(CustomNameplates.instance.getDataFolder(), "bossbar.yml"); - File backFile = new File(CustomNameplates.instance.getDataFolder(), "bossbar_backup.yml"); - try { - config.save(backFile); - } - catch (IOException e) { - e.printStackTrace(); - } - if (file.delete()) { - loadBossBar(); - } - } - } - - /** - * 加载自定义的papi变量 - */ - public static void loadPapi() { - papiBG.clear(); - papiNP.clear(); - papiST.clear(); - YamlConfiguration papiInfo = getConfig("custom-papi.yml"); - papiInfo.getConfigurationSection("papi").getKeys(false).forEach(key -> { - if (papiInfo.contains("papi." + key + ".background")) - papiBG.put(key, new BackGroundText(papiInfo.getString("papi."+key+".text"), papiInfo.getString("papi." + key + ".background"))); - if (papiInfo.contains("papi." + key + ".nameplate")) - papiNP.put(key, new NameplateText(papiInfo.getString("papi."+key+".text"), papiInfo.getString("papi." + key + ".nameplate"))); - if (papiInfo.contains("papi." + key + ".static")) - papiST.put(key, new StaticText(papiInfo.getString("papi."+key+".text"), papiInfo.getInt("papi." + key + ".static"))); - }); - } - - /** - * 加载actionbar模块相关功能 - */ - - public static void loadActionBar() { - actionBars.clear(); - YamlConfiguration config = getConfig("actionbar.yml"); - if (config.contains("actionbar")) { - for (String key : config.getConfigurationSection("actionbar").getKeys(false)) { - String[] texts; - String text = config.getString("actionbar." + key + ".text"); - if (text != null) { - texts = new String[]{text}; - } - else { - List strings = config.getStringList("actionbar." + key + ".dynamic-text"); - texts = strings.toArray(new String[0]); - } - List requirements = new ArrayList<>(); - if (config.contains("actionbar." + key + ".conditions")){ - config.getConfigurationSection("actionbar." + key + ".conditions").getKeys(false).forEach(requirement -> { - switch (requirement){ - case "weather" -> requirements.add(new Weather(config.getStringList("actionbar." + key + ".conditions.weather"))); - case "ypos" -> requirements.add(new YPos(config.getStringList("actionbar." + key + ".conditions.ypos"))); - case "world" -> requirements.add(new World(config.getStringList("actionbar." + key + ".conditions.world"))); - case "biome" -> requirements.add(new Biome(config.getStringList("actionbar." + key + ".conditions.biome"))); - case "permission" -> requirements.add(new Permission(config.getString("actionbar." + key + ".conditions.permission"))); - case "time" -> requirements.add(new Time(config.getStringList("actionbar." + key + ".conditions.time"))); - case "papi-condition" -> { - if (Main.placeholderAPI) requirements.add(new CustomPapi(config.getConfigurationSection("actionbar." + key + ".conditions.papi-condition").getValues(false))); - else AdventureUtil.consoleMessage("[CustomNameplates] You need to enable PlaceholderAPI Integration to use papi condition!"); - } - } - }); - } - ActionBarConfig actionBarConfig = new ActionBarConfig( - config.getInt("actionbar." + key + ".refresh-rate", 5) - 1, - config.getInt("actionbar." + key + ".switch-interval", 15) * 20, - texts, - requirements - ); - actionBars.put(key, actionBarConfig); - } - AdventureUtil.consoleMessage("[CustomNameplates] Loaded " + actionBars.size() + " actionbars"); - } - else { - File file = new File(CustomNameplates.instance.getDataFolder(), "actionbar.yml"); - if (file.delete()) { - loadActionBar(); - } - File backFile = new File(CustomNameplates.instance.getDataFolder(), "actionbar_backup.yml"); - try { - config.save(backFile); - } - catch (IOException e) { - e.printStackTrace(); - } - } - } - - /** - * 加载聊天气泡模块功能 - */ - public static class Bubbles { - public static String defaultBubble = "none"; - public static String defaultFormat; - public static String prefix; - public static String suffix; - public static double lineSpace; - public static double yOffset; - public static int stayTime; - public static int coolDown; - public static int maxChar; - public static void load() { - YamlConfiguration config = getConfig("bubble.yml"); - defaultBubble = config.getString("bubble.default-bubbles", "none"); - prefix = config.getString("bubble.text-prefix", ""); - suffix = config.getString("bubble.text-suffix", ""); - lineSpace = config.getDouble("bubble.line-spacing"); - defaultFormat = config.getString("bubble.default-format", ""); - yOffset = config.getDouble("bubble.bottom-line-Y-offset"); - stayTime = config.getInt("bubble.stay-time", 5); - coolDown = config.getInt("bubble.cool-down", 1) * 1000; - maxChar = config.getInt("bubble.max-char-length", 35); - } - } - - /** - * 载入自定义宽度配置 - */ - public static void loadWidth() { - fontWidth.clear(); - YamlConfiguration config = getConfig("char-width.yml"); - for (String key : config.getKeys(false)) { - if (key.length() == 1) { - fontWidth.put(key.charAt(0), config.getInt(key)); - } - else { - AdventureUtil.consoleMessage("[CustomNameplates] " + key + " in custom char-width.yml is in wrong format or not supported"); - } - } - AdventureUtil.consoleMessage("[CustomNameplates] Loaded " + fontWidth.size() + " custom char-width"); - if (Main.thin_font) - for (int i = 0; i < FontWidthThin.values().length; i++) - fontWidth.put(FontWidthThin.values()[i].getCharacter(), FontWidthThin.values()[i].getLength()); - else - for (int i = 0; i < FontWidthNormal.values().length; i++) - fontWidth.put(FontWidthNormal.values()[i].getCharacter(), FontWidthNormal.values()[i].getLength()); - for (int i = 0; i < FontOffset.values().length; i++) - fontWidth.put(FontOffset.values()[i].getCharacter(), FontOffset.values()[i].getSpace() - 1); - } - - /** - * 数据库设置 - */ - public static class Database { - - public static String user; - public static String password; - public static String url; - public static String ENCODING; - public static String tableName; - public static boolean enable_pool; - public static boolean use_mysql; - public static boolean async; - public static int maximum_pool_size; - public static int minimum_idle; - public static int maximum_lifetime; - public static int idle_timeout; - - public static void reload(){ - - YamlConfiguration databaseConfig = getConfig("database.yml"); - String storage_mode = databaseConfig.getString("settings.storage-mode","SQLite"); - async = !databaseConfig.getBoolean("settings.disable-async", false); - if(storage_mode.equalsIgnoreCase("SQLite")){ - enable_pool = false; - use_mysql = false; - tableName = "nameplates"; - } - else if(storage_mode.equalsIgnoreCase("MYSQL")){ - use_mysql = true; - ENCODING = databaseConfig.getString("MySQL.property.encoding"); - tableName = databaseConfig.getString("MySQL.table-name"); - user = databaseConfig.getString("MySQL.user"); - password = databaseConfig.getString("MySQL.password"); - url = "jdbc:mysql://" + databaseConfig.getString("MySQL.host") - + ":" + databaseConfig.getString("MySQL.port") + "/" - + databaseConfig.getString("MySQL.database") + "?characterEncoding=" - + ENCODING + "&useSSL=" - + databaseConfig.getString("MySQL.property.use-ssl"); - if (databaseConfig.getString("MySQL.property.timezone") != null && - !databaseConfig.getString("MySQL.property.timezone").equals("")) { - url = url + "&serverTimezone=" + databaseConfig.getString("MySQL.property.timezone"); - } - if (databaseConfig.getBoolean("MySQL.property.allowPublicKeyRetrieval")) { - url = url + "&allowPublicKeyRetrieval=true"; - } - enable_pool = databaseConfig.getBoolean("settings.use-pool"); - - if(enable_pool){ - maximum_pool_size = databaseConfig.getInt("Pool-Settings.maximum-pool-size"); - minimum_idle = databaseConfig.getInt("Pool-Settings.minimum-idle"); - maximum_lifetime = databaseConfig.getInt("Pool-Settings.maximum-lifetime"); - idle_timeout = databaseConfig.getInt("Pool-Settings.idle-timeout"); - } - } - else { - AdventureUtil.consoleMessage("[CustomNameplates] Error! No such storage mode!"); - Bukkit.getPluginManager().disablePlugin(CustomNameplates.instance); - } - - if (databaseConfig.getBoolean("settings.migration", false)) { - SqlHandler.updateTable(); - databaseConfig.set("settings.migration", false); - AdventureUtil.consoleMessage("[CustomNameplates] Migration is done!"); - try { - databaseConfig.save(new File(CustomNameplates.instance.getDataFolder(), "database.yml")); - } - catch (IOException e) { - e.printStackTrace(); - } - } - } - } -} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/CustomNameplates.java b/src/main/java/net/momirealms/customnameplates/CustomNameplates.java index bb8d0ec..984b95e 100644 --- a/src/main/java/net/momirealms/customnameplates/CustomNameplates.java +++ b/src/main/java/net/momirealms/customnameplates/CustomNameplates.java @@ -22,101 +22,80 @@ import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolManager; import com.comphenix.protocol.events.PacketContainer; import net.kyori.adventure.platform.bukkit.BukkitAudiences; -import net.momirealms.customnameplates.actionbar.ActionBarManager; -import net.momirealms.customnameplates.bossbar.BossBarManager; -import net.momirealms.customnameplates.commands.bb.ExecuteB; -import net.momirealms.customnameplates.commands.bb.TabCompleteB; -import net.momirealms.customnameplates.commands.np.ExecuteN; -import net.momirealms.customnameplates.commands.np.TabCompleteN; -import net.momirealms.customnameplates.data.DataManager; -import net.momirealms.customnameplates.data.SqlHandler; +import net.momirealms.customnameplates.commands.BubblesCommand; +import net.momirealms.customnameplates.commands.NameplateCommand; import net.momirealms.customnameplates.helper.LibraryLoader; -import net.momirealms.customnameplates.hook.IAImageHook; -import net.momirealms.customnameplates.hook.ImageParser; -import net.momirealms.customnameplates.hook.OXImageHook; -import net.momirealms.customnameplates.hook.PlaceholderManager; -import net.momirealms.customnameplates.nameplates.ProxyDataListener; -import net.momirealms.customnameplates.nameplates.TeamManager; -import net.momirealms.customnameplates.nameplates.TeamPacketManager; -import net.momirealms.customnameplates.nameplates.mode.bubbles.ChatBubblesManager; -import net.momirealms.customnameplates.nameplates.mode.NameplateManager; -import net.momirealms.customnameplates.nameplates.mode.rd.RidingTag; -import net.momirealms.customnameplates.nameplates.mode.tm.TeamTag; -import net.momirealms.customnameplates.nameplates.mode.tmpackets.TeamPacketA; -import net.momirealms.customnameplates.nameplates.mode.tmpackets.TeamPacketB; -import net.momirealms.customnameplates.nameplates.mode.tmpackets.TeamPacketUtil; -import net.momirealms.customnameplates.nameplates.mode.tp.TeleportingTag; -import net.momirealms.customnameplates.resource.ResourceManager; +import net.momirealms.customnameplates.manager.*; import net.momirealms.customnameplates.utils.AdventureUtil; +import net.momirealms.customnameplates.utils.ConfigUtil; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.scoreboard.Team; - -import java.util.Objects; public final class CustomNameplates extends JavaPlugin { - public static CustomNameplates instance; + public static CustomNameplates plugin; public static BukkitAudiences adventure; public static ProtocolManager protocolManager; private ResourceManager resourceManager; - private DataManager dataManager; - private TeamManager teamManager; - private TeamPacketManager teamPacketManager; private BossBarManager bossBarManager; private ActionBarManager actionBarManager; private PlaceholderManager placeholderManager; private NameplateManager nameplateManager; private ChatBubblesManager chatBubblesManager; - private ProxyDataListener proxyDataListener; - private ImageParser imageParser; + private DataManager dataManager; + private ConfigManager configManager; + private MessageManager messageManager; + private WidthManager widthManager; @Override public void onLoad(){ - instance = this; + plugin = this; LibraryLoader.load("commons-io","commons-io","2.11.0","https://repo.maven.apache.org/maven2/"); LibraryLoader.load("com.zaxxer","HikariCP","5.0.1","https://repo.maven.apache.org/maven2/"); LibraryLoader.load("dev.dejvokep","boosted-yaml","1.3","https://repo.maven.apache.org/maven2/"); + LibraryLoader.load("org.mariadb.jdbc","mariadb-java-client","3.0.6","https://repo.maven.apache.org/maven2/"); } @Override public void onEnable() { - adventure = BukkitAudiences.create(this); protocolManager = ProtocolLibrary.getProtocolManager(); + //Don't delete this PacketContainer packet = new PacketContainer(PacketType.Play.Server.SCOREBOARD_TEAM); AdventureUtil.consoleMessage("[CustomNameplates] Running on " + Bukkit.getVersion()); - Objects.requireNonNull(Bukkit.getPluginCommand("customnameplates")).setExecutor(new ExecuteN()); - Objects.requireNonNull(Bukkit.getPluginCommand("customnameplates")).setTabCompleter(new TabCompleteN()); - Objects.requireNonNull(Bukkit.getPluginCommand("chatbubbles")).setExecutor(new ExecuteB()); - Objects.requireNonNull(Bukkit.getPluginCommand("chatbubbles")).setTabCompleter(new TabCompleteB()); - - loadConfig(); - + this.placeholderManager = new PlaceholderManager(); + this.actionBarManager = new ActionBarManager(); + this.bossBarManager = new BossBarManager(); this.resourceManager = new ResourceManager(); - this.resourceManager.generateResourcePack(); + this.dataManager = new DataManager(); + this.nameplateManager = new NameplateManager(); + this.configManager = new ConfigManager(); + this.messageManager = new MessageManager(); + this.widthManager = new WidthManager(); + this.chatBubblesManager = new ChatBubblesManager(); - AdventureUtil.consoleMessage("[CustomNameplates] Plugin Enabled!"); + ConfigUtil.reloadConfigs(); + + NameplateCommand nameplateCommand = new NameplateCommand(); + Bukkit.getPluginCommand("customnameplates").setExecutor(nameplateCommand); + Bukkit.getPluginCommand("customnameplates").setTabCompleter(nameplateCommand); + + BubblesCommand bubblesCommand = new BubblesCommand(); + Bukkit.getPluginCommand("bubbles").setExecutor(bubblesCommand); + Bukkit.getPluginCommand("bubbles").setTabCompleter(bubblesCommand); + + AdventureUtil.consoleMessage("[CustomNameplates] Plugin Enabled!"); new Metrics(this, 16649); } @Override public void onDisable() { - if (ConfigManager.Module.nameplate){ - SqlHandler.close(); - if (!ConfigManager.Nameplate.fakeTeam && !ConfigManager.Main.tab && !ConfigManager.Main.tab_bc) { - for (Team team : Bukkit.getScoreboardManager().getMainScoreboard().getTeams()) { - team.unregister(); - } - } - } if (actionBarManager != null) { actionBarManager.unload(); } @@ -132,142 +111,12 @@ public final class CustomNameplates extends JavaPlugin { if (placeholderManager != null) { placeholderManager.unload(); } + if (dataManager != null) { + dataManager.disable(); + } if (adventure != null) { adventure.close(); } - if (proxyDataListener != null) { - this.getServer().getMessenger().unregisterIncomingPluginChannel(this, "customnameplates:cnp"); - this.getServer().getMessenger().unregisterOutgoingPluginChannel(this, "customnameplates:cnp"); - } - - } - - public void loadConfig() { - - ConfigManager.Module.loadModule(); - ConfigManager.Main.reload(); - ConfigManager.Message.reload(); - ConfigManager.loadWidth(); - ConfigManager.Database.reload(); - - if (this.dataManager == null) { - this.dataManager = new DataManager(); - if (!dataManager.create()) { - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to enable Data Manager!"); - return; - } - } - - if (ConfigManager.Main.placeholderAPI){ - ConfigManager.loadPapi(); - if (this.placeholderManager != null) { - this.placeholderManager.unload(); - this.placeholderManager.load(); - } - else { - this.placeholderManager = new PlaceholderManager("PAPI"); - this.placeholderManager.load(); - } - } - else if (this.placeholderManager != null) { - this.placeholderManager.unload(); - this.placeholderManager = null; - } - - if (ConfigManager.Module.bossBar){ - ConfigManager.loadBossBar(); - if (this.bossBarManager != null) { - this.bossBarManager.unload(); - this.bossBarManager.load(); - } - else { - this.bossBarManager = new BossBarManager("BossBar"); - this.bossBarManager.load(); - } - } - else if (this.bossBarManager != null) { - this.bossBarManager.unload(); - this.bossBarManager = null; - } - - if (ConfigManager.Module.actionbar){ - ConfigManager.loadActionBar(); - if (actionBarManager != null) { - this.actionBarManager.unload(); - this.actionBarManager.load(); - } - else { - this.actionBarManager = new ActionBarManager("ActionBar"); - this.actionBarManager.load(); - } - } - else if (this.actionBarManager != null) { - this.actionBarManager.unload(); - this.actionBarManager = null; - } - if (ConfigManager.Module.nameplate){ - ConfigManager.Nameplate.reload(); - - if (ConfigManager.Main.tab_bc) { - proxyDataListener = new ProxyDataListener(); - this.getServer().getMessenger().registerOutgoingPluginChannel(this, "customnameplates:cnp"); - this.getServer().getMessenger().registerIncomingPluginChannel(this, "customnameplates:cnp", proxyDataListener); - } - else if (proxyDataListener != null) { - this.getServer().getMessenger().unregisterIncomingPluginChannel(this, "customnameplates:cnp"); - this.getServer().getMessenger().unregisterOutgoingPluginChannel(this, "customnameplates:cnp"); - } - - if (this.teamManager == null) { - this.teamManager = new TeamManager(); - for (Player player : Bukkit.getOnlinePlayers()) { - CustomNameplates.instance.getDataManager().loadData(player); - } - } - if (this.nameplateManager != null) { - this.nameplateManager.unload(); - this.nameplateManager = null; - } - if (ConfigManager.Nameplate.mode.equalsIgnoreCase("team")) { - this.teamPacketManager = new TeamPacketA(teamManager); - this.nameplateManager = new TeamTag("TEAM", teamManager); - this.nameplateManager.load(); - } - else { - this.teamPacketManager = new TeamPacketB(); - if (ConfigManager.Nameplate.mode.equalsIgnoreCase("riding")) { - this.nameplateManager = new RidingTag("RIDING"); - this.nameplateManager.load(); - }else if (ConfigManager.Nameplate.mode.equalsIgnoreCase("teleporting")){ - this.nameplateManager = new TeleportingTag("TELEPORTING"); - this.nameplateManager.load(); - }else { - AdventureUtil.consoleMessage("[CustomNameplates] Unknown nameplate mode!"); - } - } - } - else { - if (this.nameplateManager != null) { - TeamPacketUtil.clearTeamInfo(); - this.nameplateManager.unload(); - this.nameplateManager = null; - } - } - - if (this.chatBubblesManager != null) { - this.chatBubblesManager.unload(); - } - if (ConfigManager.Module.bubbles) { - ConfigManager.Bubbles.load(); - this.chatBubblesManager = new ChatBubblesManager("BUBBLE"); - this.chatBubblesManager.load(); - if (ConfigManager.Main.itemsAdder) { - this.imageParser = new IAImageHook(); - } - if (ConfigManager.Main.oraxen) { - this.imageParser = new OXImageHook(); - } - } } public ResourceManager getResourceManager() { @@ -278,14 +127,6 @@ public final class CustomNameplates extends JavaPlugin { return this.dataManager; } - public TeamManager getTeamManager() { - return this.teamManager; - } - - public TeamPacketManager getTeamPacketManager() { - return teamPacketManager; - } - public PlaceholderManager getPlaceholderManager() { return placeholderManager; } @@ -302,7 +143,19 @@ public final class CustomNameplates extends JavaPlugin { return nameplateManager; } - public ImageParser getImageParser() { - return imageParser; + public ConfigManager getConfigManager() { + return configManager; + } + + public MessageManager getMessageManager() { + return messageManager; + } + + public ChatBubblesManager getChatBubblesManager() { + return chatBubblesManager; + } + + public WidthManager getWidthManager() { + return widthManager; } } diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/BossBarManager.java b/src/main/java/net/momirealms/customnameplates/bossbar/BossBarManager.java deleted file mode 100644 index 374b1eb..0000000 --- a/src/main/java/net/momirealms/customnameplates/bossbar/BossBarManager.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.bossbar; - -import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.Function; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -import java.util.HashMap; - -public class BossBarManager extends Function { - - private final SimpleListener simpleListener; - - private final HashMap taskCache = new HashMap<>(); - - public BossBarManager(String name) { - super(name); - this.simpleListener = new SimpleListener(this); - } - - @Override - public void load() { - for (Player player : Bukkit.getOnlinePlayers()) { - taskCache.put(player, new TimerTaskP(player)); - } - Bukkit.getPluginManager().registerEvents(simpleListener, CustomNameplates.instance); - } - - @Override - public void unload() { - HandlerList.unregisterAll(simpleListener); - for (TimerTaskP timerTask : taskCache.values()) { - timerTask.stopTimer(); - } - taskCache.clear(); - } - - public void onJoin(Player player) { - taskCache.put(player, new TimerTaskP(player)); - } - - public void onQuit(Player player) { - TimerTaskP timerTask = taskCache.remove(player); - if (timerTask != null){ - timerTask.stopTimer(); - } - } -} diff --git a/src/main/java/net/momirealms/customnameplates/bungeecord/BungeeEventListener.java b/src/main/java/net/momirealms/customnameplates/bungeecord/BungeeEventListener.java index 0f9e3a6..549d2af 100644 --- a/src/main/java/net/momirealms/customnameplates/bungeecord/BungeeEventListener.java +++ b/src/main/java/net/momirealms/customnameplates/bungeecord/BungeeEventListener.java @@ -20,12 +20,12 @@ package net.momirealms.customnameplates.bungeecord; import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; +import me.neznamy.tab.shared.TAB; import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.event.PlayerDisconnectEvent; import net.md_5.bungee.api.event.PluginMessageEvent; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.event.EventHandler; -import net.momirealms.customnameplates.hook.TABTeamHook; +import net.momirealms.customnameplates.objects.team.TABTeamHook; import java.util.Objects; @@ -51,7 +51,8 @@ public class BungeeEventListener implements Listener { String playerName = dataInput.readUTF(); String teamName = playerName; if (plugin.getBungeeConfig().isTab()) { - teamName = TABTeamHook.getTABTeam(playerName); + teamName = TAB.getInstance().getPlayer(playerName).getTeamName(); + teamName = teamName == null ? playerName : teamName; } ProxiedPlayer proxiedPlayer = plugin.getProxy().getPlayer(playerName); ByteArrayDataOutput byteArrayDataOutput = ByteStreams.newDataOutput(); diff --git a/src/main/java/net/momirealms/customnameplates/commands/AbstractSubCommand.java b/src/main/java/net/momirealms/customnameplates/commands/AbstractSubCommand.java new file mode 100644 index 0000000..8de2e57 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/AbstractSubCommand.java @@ -0,0 +1,227 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.commands; + +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.manager.NameplateManager; +import net.momirealms.customnameplates.manager.ResourceManager; +import net.momirealms.customnameplates.objects.nameplates.ArmorStandManager; +import net.momirealms.customnameplates.objects.nameplates.NameplatesTeam; +import net.momirealms.customnameplates.objects.nameplates.mode.EntityTag; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.permissions.PermissionAttachmentInfo; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +public abstract class AbstractSubCommand implements SubCommand { + + private final String command; + private Map subCommandMap; + protected HashMap coolDown = new HashMap<>(); + + public AbstractSubCommand(String command, Map subCommandMap) { + this.command = command; + this.subCommandMap = subCommandMap; + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + if (subCommandMap == null || args.size() < 1) { + return true; + } + SubCommand subCommand = subCommandMap.get(args.get(0)); + if (subCommand == null) { + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.unavailableArgs); + } else { + subCommand.onCommand(sender, args.subList(1, args.size())); + } + return true; + } + + @Override + public List onTabComplete(CommandSender sender, List args) { + if (subCommandMap == null) + return Collections.singletonList(""); + if (args.size() <= 1) { + List returnList = new ArrayList<>(subCommandMap.keySet()); + returnList.removeIf(str -> !str.startsWith(args.get(0))); + return returnList; + } + SubCommand subCmd = subCommandMap.get(args.get(0)); + if (subCmd != null) + return subCommandMap.get(args.get(0)).onTabComplete(sender, args.subList(1, args.size())); + return Collections.singletonList(""); + } + + @Override + public String getSubCommand() { + return command; + } + + @Override + public Map getSubCommands() { + return Collections.unmodifiableMap(subCommandMap); + } + + @Override + public void regSubCommand(SubCommand command) { + if (subCommandMap == null) { + subCommandMap = new ConcurrentHashMap<>(); + } + subCommandMap.put(command.getSubCommand(), command); + } + + protected List availableNameplates(CommandSender sender){ + List availableNameplates = new ArrayList<>(); + if (sender instanceof Player player){ + getAvailableNameplates(player, availableNameplates); + } + return availableNameplates; + } + + protected List availableBubbles(CommandSender sender){ + List availableBubbles = new ArrayList<>(); + if (sender instanceof Player player){ + getAvailableBubbles(player, availableBubbles); + } + return availableBubbles; + } + + protected List online_players(){ + List online = new ArrayList<>(); + Bukkit.getOnlinePlayers().forEach((player -> online.add(player.getName()))); + return online; + } + + protected List nameplates(){ + return new ArrayList<>(ResourceManager.NAMEPLATES.keySet()); + } + + protected List bubbles(){ + return new ArrayList<>(ResourceManager.BUBBLES.keySet()); + } + + protected void unequipNameplate(Player player) { + CustomNameplates.plugin.getDataManager().getPlayerData(player).equipNameplate("none"); + CustomNameplates.plugin.getDataManager().saveData(player); + NameplatesTeam nameplatesTeam = CustomNameplates.plugin.getNameplateManager().getTeamManager().getNameplatesTeam(player); + if (nameplatesTeam != null) nameplatesTeam.updateNameplates(); + CustomNameplates.plugin.getNameplateManager().getTeamManager().sendUpdateToAll(player, true); + } + + protected void showPlayerArmorStandTags(Player player) { + EntityTag entityTag = (EntityTag) CustomNameplates.plugin.getNameplateManager().getNameplateMode(); + ArmorStandManager asm = entityTag.getArmorStandManager(player); + asm.spawn(player); + for (int i = 0; i < NameplateManager.preview * 20; i++) { + Bukkit.getScheduler().runTaskLater(CustomNameplates.plugin, ()-> { + asm.teleport(player); + },i); + } + Bukkit.getScheduler().runTaskLater(CustomNameplates.plugin, ()-> { + asm.destroy(player); + },NameplateManager.preview * 20); + } + + protected void getAvailableNameplates(Player player, List availableNameplates) { + for (PermissionAttachmentInfo info : player.getEffectivePermissions()) { + String permission = info.getPermission().toLowerCase(); + if (permission.startsWith("nameplates.equip.")) { + permission = permission.substring(17); + if (ResourceManager.NAMEPLATES.get(permission) != null) { + availableNameplates.add(permission); + } + } + } + } + + protected void getAvailableBubbles(Player player, List availableBubbles) { + for (PermissionAttachmentInfo info : player.getEffectivePermissions()) { + String permission = info.getPermission().toLowerCase(); + if (permission.startsWith("bubbles.equip.")) { + permission = permission.substring(14); + if (ResourceManager.BUBBLES.get(permission) != null) { + availableBubbles.add(permission); + } + } + } + } + + protected int color2decimal(ChatColor color){ + switch (String.valueOf(color.getChar())){ + case "0" -> { + return 0; + } + case "c" -> { + return 16733525; + } + case "6" -> { + return 16755200; + } + case "4" -> { + return 11141120; + } + case "e" -> { + return 16777045; + } + case "2" -> { + return 43520; + } + case "a" -> { + return 5635925; + } + case "b" -> { + return 5636095; + } + case "3" -> { + return 43690; + } + case "1" -> { + return 170; + } + case "9" -> { + return 5592575; + } + case "d" -> { + return 16733695; + } + case "5" -> { + return 11141290; + } + case "8" -> { + return 5592405; + } + case "7" -> { + return 11184810; + } + default -> { + return 16777215; + } + } + } + + public void setSubCommandMap(Map subCommandMap) { + this.subCommandMap = subCommandMap; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/BubblesCommand.java b/src/main/java/net/momirealms/customnameplates/commands/BubblesCommand.java new file mode 100644 index 0000000..a459bde --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/BubblesCommand.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.commands; + +import net.momirealms.customnameplates.commands.subcmd.*; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; +import org.jetbrains.annotations.NotNull; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +public class BubblesCommand implements TabExecutor { + + private final Map subCommandMap; + + public BubblesCommand() { + subCommandMap = new ConcurrentHashMap<>(); + regDefaultSubCommands(); + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + List argList = Arrays.asList(args); + if (argList.size() < 1) { + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.nonArgs); + return true; + } + SubCommand subCommand = subCommandMap.get(argList.get(0)); + if (subCommand != null) + return subCommand.onCommand(sender, argList.subList(1, argList.size())); + else { + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.unavailableArgs); + return true; + } + } + + private void regDefaultSubCommands() { + regSubCommand(BubblesEquipCommand.INSTANCE); + regSubCommand(BubblesUnequipCommand.INSTANCE); + regSubCommand(BubblesForceEquipCommand.INSTANCE); + regSubCommand(BubblesForceUnequipCommand.INSTANCE); + regSubCommand(BubblesListCommand.INSTANCE); + } + + public void regSubCommand(SubCommand executor) { + subCommandMap.put(executor.getSubCommand(), executor); + } + + @Override + public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) { + List argList = Arrays.asList(args); + if (argList.size() <= 1) { + List returnList = new ArrayList<>(subCommandMap.keySet()); + returnList.removeIf(str -> !str.startsWith(args[0]) || !sender.hasPermission("bubbles." + str)); + return returnList; + } + SubCommand subCommand = subCommandMap.get(argList.get(0)); + if (subCommand != null) + return subCommand.onTabComplete(sender, argList.subList(1, argList.size())); + else + return Collections.singletonList(""); + } + + public Map getSubCommandMap() { + return subCommandMap; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/NameplateCommand.java b/src/main/java/net/momirealms/customnameplates/commands/NameplateCommand.java new file mode 100644 index 0000000..fca1ec1 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/NameplateCommand.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.commands; + +import net.momirealms.customnameplates.commands.subcmd.*; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; +import org.jetbrains.annotations.NotNull; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +public class NameplateCommand implements TabExecutor { + + private final Map subCommandMap; + + public NameplateCommand() { + subCommandMap = new ConcurrentHashMap<>(); + regDefaultSubCommands(); + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + List argList = Arrays.asList(args); + if (argList.size() < 1) { + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.nonArgs); + return true; + } + SubCommand subCommand = subCommandMap.get(argList.get(0)); + if (subCommand != null) + return subCommand.onCommand(sender, argList.subList(1, argList.size())); + else { + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.unavailableArgs); + return true; + } + } + + private void regDefaultSubCommands() { + regSubCommand(ReloadCommand.INSTANCE); + regSubCommand(NameplatesEquipCommand.INSTANCE); + regSubCommand(NameplatesForceEquipCommand.INSTANCE); + regSubCommand(NameplatesUnequipCommand.INSTANCE); + regSubCommand(NameplatesForceUnequipCommand.INSTANCE); + regSubCommand(PreviewCommand.INSTANCE); + regSubCommand(ForcePreviewCommand.INSTANCE); + regSubCommand(NameplatesListCommand.INSTANCE); + regSubCommand(HelpCommand.INSTANCE); + } + + public void regSubCommand(SubCommand executor) { + subCommandMap.put(executor.getSubCommand(), executor); + } + + @Override + public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) { + List argList = Arrays.asList(args); + if (argList.size() <= 1) { + List returnList = new ArrayList<>(subCommandMap.keySet()); + returnList.removeIf(str -> !str.startsWith(args[0]) || !sender.hasPermission("nameplates." + str)); + return returnList; + } + SubCommand subCommand = subCommandMap.get(argList.get(0)); + if (subCommand != null) + return subCommand.onTabComplete(sender, argList.subList(1, argList.size())); + else + return Collections.singletonList(""); + } + + public Map getSubCommandMap() { + return subCommandMap; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/listener/BukkitListener.java b/src/main/java/net/momirealms/customnameplates/commands/SubCommand.java similarity index 53% rename from src/main/java/net/momirealms/customnameplates/nameplates/listener/BukkitListener.java rename to src/main/java/net/momirealms/customnameplates/commands/SubCommand.java index bdf0b1c..785ab69 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/listener/BukkitListener.java +++ b/src/main/java/net/momirealms/customnameplates/commands/SubCommand.java @@ -15,25 +15,23 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.listener; +package net.momirealms.customnameplates.commands; -import net.momirealms.customnameplates.nameplates.mode.PacketsHandler; -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.command.CommandSender; -public record BukkitListener( - PacketsHandler handler) implements Listener { +import java.util.List; +import java.util.Map; - @EventHandler - public void onJoin(PlayerJoinEvent event) { - handler.onJoin(event.getPlayer()); - } +public interface SubCommand { - @EventHandler - public void onQuit(PlayerQuitEvent event) { - handler.onQuit(event.getPlayer()); - } + boolean onCommand(CommandSender sender, List args); + + List onTabComplete(CommandSender sender, List args); + + String getSubCommand(); + + Map getSubCommands(); + + void regSubCommand(SubCommand subCommand); } diff --git a/src/main/java/net/momirealms/customnameplates/commands/bb/ExecuteB.java b/src/main/java/net/momirealms/customnameplates/commands/bb/ExecuteB.java deleted file mode 100644 index dec5234..0000000 --- a/src/main/java/net/momirealms/customnameplates/commands/bb/ExecuteB.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.commands.bb; - -import net.momirealms.customnameplates.ConfigManager; -import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.TeamManager; -import net.momirealms.customnameplates.resource.ResourceManager; -import net.momirealms.customnameplates.utils.AdventureUtil; -import org.apache.commons.lang.StringUtils; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.permissions.PermissionAttachmentInfo; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; - -public class ExecuteB implements CommandExecutor { - - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { - - if (args.length < 1){ - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - return true; - } - - switch (args[0]) { - case "equip" -> { - if (sender instanceof Player player) { - if (args.length < 2) { - AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - return true; - } - if (sender.hasPermission("bubbles.equip." + args[1]) || sender.isOp()) { - if (CustomNameplates.instance.getResourceManager().getBubbleConfig(args[1]) == null) { - AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.bb_not_exist); - return true; - } - CustomNameplates.instance.getDataManager().getCache().get(player.getUniqueId()).setBubbles(args[1]); - CustomNameplates.instance.getDataManager().savePlayer(player.getUniqueId()); - AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.bb_equip.replace("{Bubble}", CustomNameplates.instance.getResourceManager().getBubbleConfig(args[1]).name())); - } - else AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.bb_notAvailable); - } - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.no_console); - return true; - } - case "forceequip" -> { - if (args.length < 3){ - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - return true; - } - if (sender.hasPermission("bubbles.forceequip") || sender.isOp()) { - Player player = Bukkit.getPlayer(args[1]); - if (player != null){ - if (CustomNameplates.instance.getResourceManager().getBubbleConfig(args[2]) == null){ - if(sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.bb_not_exist); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.bb_not_exist); - return true; - } - CustomNameplates.instance.getDataManager().getCache().get(player.getUniqueId()).setBubbles(args[2]); - CustomNameplates.instance.getDataManager().savePlayer(player.getUniqueId()); - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.bb_force_equip.replace("{Bubble}", CustomNameplates.instance.getResourceManager().getBubbleConfig(args[2]).name()).replace("{Player}", args[1])); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.bb_force_equip.replace("{Bubble}", CustomNameplates.instance.getResourceManager().getBubbleConfig(args[2]).name()).replace("{Player}", args[1])); - } - else { - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.not_online.replace("{Player}",args[1])); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.not_online.replace("{Player}",args[1])); - } - } - else AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.noPerm); - return true; - } - case "unequip" -> { - if (sender instanceof Player player){ - CustomNameplates.instance.getDataManager().getCache().get(player.getUniqueId()).setBubbles("none"); - CustomNameplates.instance.getDataManager().savePlayer(player.getUniqueId()); - AdventureUtil.playerMessage(player, ConfigManager.Message.prefix + ConfigManager.Message.bb_unEquip); - } - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.no_console); - return true; - } - case "forceunequip" -> { - if (args.length < 2){ - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - return true; - } - if (sender.hasPermission("bubbles.forceunequip")){ - Player player = Bukkit.getPlayer(args[1]); - if (player != null){ - CustomNameplates.instance.getDataManager().getCache().get(player.getUniqueId()).setBubbles("none"); - CustomNameplates.instance.getDataManager().savePlayer(player.getUniqueId()); - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.bb_force_unEquip.replace("{Player}", args[1])); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.bb_force_unEquip.replace("{Player}", args[1])); - }else { - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.not_online.replace("{Player}",args[1])); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.not_online.replace("{Player}",args[1])); - } - } - return true; - } - case "list" -> { - if (sender instanceof Player player) { - if (player.isOp()) { - StringBuilder stringBuilder = new StringBuilder(); - ResourceManager.BUBBLES.keySet().forEach(key -> { - if (key.equalsIgnoreCase("none")) return; - stringBuilder.append(key).append(" "); - }); - AdventureUtil.playerMessage(player, ConfigManager.Message.prefix + ConfigManager.Message.bb_available.replace("{Bubbles}", stringBuilder.toString())); - } - else if (player.hasPermission("bubbles.list")) { - List availableBubbles = new ArrayList<>(); - for (PermissionAttachmentInfo info : player.getEffectivePermissions()) { - String permission = info.getPermission().toLowerCase(); - if (permission.startsWith("bubbles.equip.")) { - permission = StringUtils.replace(permission, "bubbles.equip.", ""); - if (ResourceManager.BUBBLES.get(permission) != null) { - availableBubbles.add(permission); - } - } - } - if (availableBubbles.size() != 0) { - StringBuilder stringBuilder = new StringBuilder(); - for (String str : availableBubbles) { - stringBuilder.append(str).append(" "); - } - AdventureUtil.playerMessage(player, ConfigManager.Message.prefix + ConfigManager.Message.bb_available.replace("{Bubbles}", stringBuilder.toString())); - } - else { - AdventureUtil.playerMessage(player, ConfigManager.Message.prefix + ConfigManager.Message.bb_haveNone); - } - } - else AdventureUtil.playerMessage(player, ConfigManager.Message.prefix + ConfigManager.Message.noPerm); - } - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.no_console); - return true; - } - default -> { - if (sender instanceof Player player){ - if (player.hasPermission("bubbles.help")){ - AdventureUtil.playerMessage(player,"/bubbles help - show the command list"); - AdventureUtil.playerMessage(player,"/bubbles equip - equip a specified bubble"); - AdventureUtil.playerMessage(player,"/bubbles forceequip - force a player to equip a specified bubble"); - AdventureUtil.playerMessage(player,"/bubbles unequip - unequip your bubble"); - AdventureUtil.playerMessage(player,"/bubbles forceunequip - force unequip a player's bubble"); - AdventureUtil.playerMessage(player,"/bubbles list - list your available bubbles"); - } - } - else { - AdventureUtil.consoleMessage("/bubbles help - show the command list"); - AdventureUtil.consoleMessage("/bubbles equip - equip a specified bubble"); - AdventureUtil.consoleMessage("/bubbles forceequip - force a player to equip a specified bubble"); - AdventureUtil.consoleMessage("/bubbles unequip - unequip your bubble"); - AdventureUtil.consoleMessage("/bubbles forceunequip - force unequip a player's bubble"); - AdventureUtil.consoleMessage("/bubbles list - list your available bubbles"); - } - return true; - } - } - } -} diff --git a/src/main/java/net/momirealms/customnameplates/commands/bb/TabCompleteB.java b/src/main/java/net/momirealms/customnameplates/commands/bb/TabCompleteB.java deleted file mode 100644 index daea2f0..0000000 --- a/src/main/java/net/momirealms/customnameplates/commands/bb/TabCompleteB.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.commands.bb; - -import net.momirealms.customnameplates.resource.ResourceManager; -import org.apache.commons.lang.StringUtils; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabCompleter; -import org.bukkit.entity.Player; -import org.bukkit.permissions.PermissionAttachmentInfo; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.List; - -public class TabCompleteB implements TabCompleter { - @Override - public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { - - if(1 == args.length){ - - List tab = new ArrayList<>(); - if (sender.hasPermission("bubbles.help")) tab.add("help"); - if (sender.hasPermission("bubbles.equip")) tab.add("equip"); - if (sender.hasPermission("bubbles.forceequip")) tab.add("forceequip"); - if (sender.hasPermission("bubbles.unequip")) tab.add("unequip"); - if (sender.hasPermission("bubbles.forceunequip")) tab.add("forceunequip"); - if (sender.hasPermission("bubbles.list")) tab.add("list"); - - List arrayList = new ArrayList<>(); - for (String cmd : tab) { - if (cmd.startsWith(args[0])) - arrayList.add(cmd); - } - return arrayList; - } - if(2 == args.length){ - if (args[0].equalsIgnoreCase("equip")){ - List arrayList = new ArrayList<>(); - for (String cmd : availableBubbles(sender)) { - if (cmd.startsWith(args[1])) - arrayList.add(cmd); - } - return arrayList; - } - if (args[0].equalsIgnoreCase("forceunequip") && sender.hasPermission("bubbles.forceunequip")){ - List arrayList = new ArrayList<>(); - for (String cmd : online_players()) { - if (cmd.startsWith(args[1])) - arrayList.add(cmd); - } - return arrayList; - } - if (args[0].equalsIgnoreCase("forceequip") && sender.hasPermission("bubbles.forceequip")){ - List arrayList = new ArrayList<>(); - for (String cmd : online_players()) { - if (cmd.startsWith(args[1])) - arrayList.add(cmd); - } - return arrayList; - } - } - if(3 == args.length){ - if (args[0].equalsIgnoreCase("forceequip") && sender.hasPermission("bubbles.forceequip")){ - List arrayList = new ArrayList<>(); - for (String cmd : bubbles()) { - if (cmd.startsWith(args[2])) - arrayList.add(cmd); - } - return arrayList; - } - } - return null; - } - - private static List online_players(){ - List online = new ArrayList<>(); - Bukkit.getOnlinePlayers().forEach((player -> online.add(player.getName()))); - return online; - } - - private List availableBubbles(CommandSender sender){ - List availableBubbles = new ArrayList<>(); - if (sender instanceof Player player){ - for (PermissionAttachmentInfo info : player.getEffectivePermissions()) { - String permission = info.getPermission().toLowerCase(); - if (permission.startsWith("bubbles.equip.")) { - permission = StringUtils.replace(permission, "bubbles.equip.", ""); - if (ResourceManager.BUBBLES.get(permission) != null){ - availableBubbles.add(permission); - } - } - } - } - return availableBubbles; - } - - private List bubbles(){ - return new ArrayList<>(ResourceManager.BUBBLES.keySet()); - } -} diff --git a/src/main/java/net/momirealms/customnameplates/commands/np/ExecuteN.java b/src/main/java/net/momirealms/customnameplates/commands/np/ExecuteN.java deleted file mode 100644 index 046b3ae..0000000 --- a/src/main/java/net/momirealms/customnameplates/commands/np/ExecuteN.java +++ /dev/null @@ -1,398 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.commands.np; - -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.nameplates.*; -import net.momirealms.customnameplates.nameplates.mode.EntityTag; -import net.momirealms.customnameplates.resource.ResourceManager; -import net.momirealms.customnameplates.utils.AdventureUtil; -import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.utils.HoloUtil; -import org.apache.commons.lang.StringUtils; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.permissions.PermissionAttachmentInfo; - -import javax.annotation.ParametersAreNonnullByDefault; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class ExecuteN implements CommandExecutor { - - private final HashMap coolDown = new HashMap<>(); - - @Override - @ParametersAreNonnullByDefault - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - - if (args.length < 1){ - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - return true; - } - - switch (args[0]) { - //重载 - case "reload" -> { - - if (sender.hasPermission("nameplates.reload") || sender.isOp()) { - - CustomNameplates.instance.loadConfig(); - - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.reload); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.reload); - - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.generate); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.generate); - CustomNameplates.instance.getResourceManager().generateResourcePack(); - - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.generateDone); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.generateDone); - } - else AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.noPerm); - return true; - } - //佩戴铭牌 - case "equip" -> { - if (sender instanceof Player player) { - - if (args.length < 2) { - AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - return true; - } - - if (sender.hasPermission("nameplates.equip." + args[1]) || sender.isOp()) { - - if (CustomNameplates.instance.getResourceManager().getNameplateConfig(args[1]) == null) { - AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.np_not_exist); - return true; - } - CustomNameplates.instance.getDataManager().getCache().get(player.getUniqueId()).equipNameplate(args[1]); - CustomNameplates.instance.getDataManager().savePlayer(player.getUniqueId()); - NameplatesTeam nameplatesTeam = CustomNameplates.instance.getTeamManager().getTeams().get(TeamManager.getTeamName(player)); - if (nameplatesTeam != null) nameplatesTeam.updateNameplates(); - CustomNameplates.instance.getTeamPacketManager().sendUpdateToAll(player, true); - AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.np_equip.replace("{Nameplate}", CustomNameplates.instance.getResourceManager().getNameplateConfig(args[1]).name())); - - } - else AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.np_notAvailable); - } - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.no_console); - - return true; - } - //强制佩戴铭牌 - case "forceequip" -> { - - if (args.length < 3){ - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - return true; - } - - if (sender.hasPermission("nameplates.forceequip") || sender.isOp()){ - Player player = Bukkit.getPlayer(args[1]); - if (player != null){ - if (CustomNameplates.instance.getResourceManager().getNameplateConfig(args[2]) == null){ - if(sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.np_not_exist); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.np_not_exist); - return true; - } - CustomNameplates.instance.getDataManager().getCache().get(player.getUniqueId()).equipNameplate(args[2]); - CustomNameplates.instance.getDataManager().savePlayer(player.getUniqueId()); - NameplatesTeam nameplatesTeam = CustomNameplates.instance.getTeamManager().getTeams().get(TeamManager.getTeamName(player)); - if (nameplatesTeam != null) nameplatesTeam.updateNameplates(); - CustomNameplates.instance.getTeamPacketManager().sendUpdateToAll(player, true); - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.np_force_equip.replace("{Nameplate}", CustomNameplates.instance.getResourceManager().getNameplateConfig(args[2]).name()).replace("{Player}", args[1])); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.np_force_equip.replace("{Nameplate}", CustomNameplates.instance.getResourceManager().getNameplateConfig(args[2]).name()).replace("{Player}", args[1])); - }else { - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.not_online.replace("{Player}",args[1])); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.not_online.replace("{Player}",args[1])); - } - } - else AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.noPerm); - - return true; - } - //卸下铭牌 - case "unequip" -> { - - if (sender instanceof Player player){ - CustomNameplates.instance.getDataManager().getCache().get(player.getUniqueId()).equipNameplate("none"); - CustomNameplates.instance.getDataManager().savePlayer(player.getUniqueId()); - CustomNameplates.instance.getTeamManager().getTeams().get(TeamManager.getTeamName(player)).updateNameplates(); - CustomNameplates.instance.getTeamPacketManager().sendUpdateToAll(player, true); - AdventureUtil.playerMessage(player, ConfigManager.Message.prefix + ConfigManager.Message.np_unEquip); - } - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.no_console); - - return true; - } - //强制卸下铭牌 - case "forceunequip" -> { - - if (args.length < 2){ - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - return true; - } - - if (sender.hasPermission("nameplates.forceunequip")){ - - Player player = Bukkit.getPlayer(args[1]); - if (player != null){ - CustomNameplates.instance.getDataManager().getCache().get(player.getUniqueId()).equipNameplate("none"); - CustomNameplates.instance.getDataManager().savePlayer(player.getUniqueId()); - CustomNameplates.instance.getTeamManager().getTeams().get(TeamManager.getTeamName(player)).updateNameplates(); - CustomNameplates.instance.getTeamPacketManager().sendUpdateToAll(player, true); - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.np_force_unEquip.replace("{Player}", args[1])); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.np_force_unEquip.replace("{Player}", args[1])); - }else { - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.not_online.replace("{Player}",args[1])); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.not_online.replace("{Player}",args[1])); - } - } - - return true; - } - //预览铭牌 - case "preview" -> { - - if (sender instanceof Player player){ - if (player.hasPermission("nameplates.preview") || player.isOp()){ - //指令冷却 - long time = System.currentTimeMillis(); - //冷却时间判断 - if (time - (coolDown.getOrDefault(player, time - ConfigManager.Nameplate.preview * 1050)) < ConfigManager.Nameplate.preview * 1050) { - AdventureUtil.playerMessage(player, ConfigManager.Message.prefix + ConfigManager.Message.coolDown); - return true; - } - //重置冷却时间 - coolDown.put(player, time); - AdventureUtil.playerMessage(player, ConfigManager.Message.prefix + ConfigManager.Message.preview); - if (ConfigManager.Nameplate.mode.equalsIgnoreCase("team")) { - NameplatesTeam team = CustomNameplates.instance.getTeamManager().getTeams().get(TeamManager.getTeamName(player)); - Component full = team.getPrefix().append(Component.text(player.getName()).color(TextColor.color(color2decimal(team.getColor()))).font(Key.key("default")).append(team.getSuffix())); - HoloUtil.showHolo(full, player, (int) ConfigManager.Nameplate.preview); - } - else { - EntityTag entityTag = (EntityTag) CustomNameplates.instance.getNameplateManager(); - ArmorStandManager asm = entityTag.getArmorStandManager(player); - asm.spawn(player); - for (int i = 0; i < ConfigManager.Nameplate.preview * 20; i++) { - Bukkit.getScheduler().runTaskLater(CustomNameplates.instance, ()->{ - asm.teleport(player); - },i); - } - Bukkit.getScheduler().runTaskLater(CustomNameplates.instance, ()->{ - asm.destroy(player); - },ConfigManager.Nameplate.preview * 20); - } - }else { - AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.noPerm); - } - } - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.no_console); - - return true; - } - //强制预览铭牌 - case "forcepreview" -> { - - if (sender.hasPermission("nameplates.forcepreview") || sender.isOp()) { - - if (args.length < 3){ - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.lackArgs); - return true; - } - - Player player = Bukkit.getPlayer(args[1]); - if (player == null){ - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.not_online); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.not_online); - return true; - } - NameplateConfig nameplateConfig = CustomNameplates.instance.getResourceManager().getNameplateConfig(args[2]); - if (nameplateConfig == null){ - if (sender instanceof Player) AdventureUtil.playerMessage((Player) sender, ConfigManager.Message.prefix + ConfigManager.Message.np_not_exist); - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.np_not_exist); - return true; - } - long time = System.currentTimeMillis(); - if (time - (coolDown.getOrDefault(player, time - ConfigManager.Nameplate.preview * 1050)) < ConfigManager.Nameplate.preview * 1050) { - AdventureUtil.playerMessage(player, ConfigManager.Message.prefix + ConfigManager.Message.coolDown); - return true; - } - coolDown.put(player, time); - if (ConfigManager.Nameplate.mode.equalsIgnoreCase("team")) { - String playerPrefix = ConfigManager.Nameplate.hidePrefix ? "" : ConfigManager.Main.placeholderAPI ? CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(player, ConfigManager.Nameplate.player_prefix) : ConfigManager.Nameplate.player_prefix; - String playerSuffix = ConfigManager.Nameplate.hideSuffix ? "" : ConfigManager.Main.placeholderAPI ? CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(player, ConfigManager.Nameplate.player_suffix) : ConfigManager.Nameplate.player_suffix; - Component prefix = Component.text(NameplateUtil.makeCustomNameplate(MiniMessage.miniMessage().stripTags(playerPrefix), args[1], MiniMessage.miniMessage().stripTags(playerSuffix), nameplateConfig)).font(ConfigManager.Main.key).append(MiniMessage.miniMessage().deserialize(playerPrefix)); - Component suffix = MiniMessage.miniMessage().deserialize(playerSuffix).append(Component.text(NameplateUtil.getSuffixChar(MiniMessage.miniMessage().stripTags(playerPrefix) + args[1] + MiniMessage.miniMessage().stripTags(playerSuffix))).font(ConfigManager.Main.key)); - Component full = prefix.append(Component.text(player.getName()).color(TextColor.color(color2decimal(nameplateConfig.color()))).font(Key.key("default")).append(suffix)); - HoloUtil.showHolo(full, player, (int) ConfigManager.Nameplate.preview); - } - else { - EntityTag entityTag = (EntityTag) CustomNameplates.instance.getNameplateManager(); - ArmorStandManager asm = entityTag.getArmorStandManager(player); - asm.spawn(player); - for (int i = 0; i < ConfigManager.Nameplate.preview * 20; i++) { - Bukkit.getScheduler().runTaskLater(CustomNameplates.instance, ()->{ - asm.teleport(player); - },i); - } - Bukkit.getScheduler().runTaskLater(CustomNameplates.instance, ()->{ - asm.destroy(player); - },ConfigManager.Nameplate.preview * 20); - } - } - return true; - } - //显示可用铭牌 - case "list" -> { - if (sender instanceof Player player) { - if (player.isOp()) { - StringBuilder stringBuilder = new StringBuilder(); - ResourceManager.NAMEPLATES.keySet().forEach(key -> { - if (key.equalsIgnoreCase("none")) return; - stringBuilder.append(key).append(" "); - }); - AdventureUtil.playerMessage(player, ConfigManager.Message.prefix + ConfigManager.Message.np_available.replace("{Nameplates}", stringBuilder.toString())); - } - else if (player.hasPermission("nameplates.list")) { - List availableNameplates = new ArrayList<>(); - for (PermissionAttachmentInfo info : player.getEffectivePermissions()) { - String permission = info.getPermission().toLowerCase(); - if (permission.startsWith("nameplates.equip.")) { - permission = StringUtils.replace(permission, "nameplates.equip.", ""); - if (ResourceManager.NAMEPLATES.get(permission) != null) { - availableNameplates.add(permission); - } - } - } - if (availableNameplates.size() != 0) { - StringBuilder stringBuilder = new StringBuilder(); - for (String str : availableNameplates) { - stringBuilder.append(str).append(" "); - } - AdventureUtil.playerMessage(player, ConfigManager.Message.prefix + ConfigManager.Message.np_available.replace("{Nameplates}", stringBuilder.toString())); - } - else { - AdventureUtil.playerMessage(player, ConfigManager.Message.prefix + ConfigManager.Message.np_haveNone); - } - } - else AdventureUtil.playerMessage(player, ConfigManager.Message.prefix + ConfigManager.Message.noPerm); - } - else AdventureUtil.consoleMessage(ConfigManager.Message.prefix + ConfigManager.Message.no_console); - return true; - } - //默认 - default -> { - if (sender instanceof Player player){ - if (player.hasPermission("nameplates.help")){ - AdventureUtil.playerMessage(player,"/nameplates help - show the command list"); - AdventureUtil.playerMessage(player,"/nameplates reload - reload the configuration"); - AdventureUtil.playerMessage(player,"/nameplates equip - equip a specified nameplate"); - AdventureUtil.playerMessage(player,"/nameplates forceequip - force a player to equip a specified nameplate"); - AdventureUtil.playerMessage(player,"/nameplates unequip - unequip your nameplate"); - AdventureUtil.playerMessage(player,"/nameplates forceunequip - force unequip a player's nameplate"); - AdventureUtil.playerMessage(player,"/nameplates preview - preview your nameplate"); - AdventureUtil.playerMessage(player,"/nameplates forcepreview - force a player to preview a nameplate"); - AdventureUtil.playerMessage(player,"/nameplates list - list your available nameplates"); - } - } - else { - AdventureUtil.consoleMessage("/nameplates help - show the command list"); - AdventureUtil.consoleMessage("/nameplates reload - reload the configuration"); - AdventureUtil.consoleMessage("/nameplates equip - equip a specified nameplate"); - AdventureUtil.consoleMessage("/nameplates forceequip - force a player to equip a specified nameplate"); - AdventureUtil.consoleMessage("/nameplates unequip - unequip your nameplate"); - AdventureUtil.consoleMessage("/nameplates forceunequip - force unequip a player's nameplate"); - AdventureUtil.consoleMessage("/nameplates preview - preview your nameplate"); - AdventureUtil.consoleMessage("/nameplates forcepreview - force a player to preview a nameplate"); - AdventureUtil.consoleMessage("/nameplates list - list your available nameplates"); - } - return true; - } - } - } - - private int color2decimal(ChatColor color){ - switch (String.valueOf(color.getChar())){ - case "0" -> { - return 0; - } - case "c" -> { - return 16733525; - } - case "6" -> { - return 16755200; - } - case "4" -> { - return 11141120; - } - case "e" -> { - return 16777045; - } - case "2" -> { - return 43520; - } - case "a" -> { - return 5635925; - } - case "b" -> { - return 5636095; - } - case "3" -> { - return 43690; - } - case "1" -> { - return 170; - } - case "9" -> { - return 5592575; - } - case "d" -> { - return 16733695; - } - case "5" -> { - return 11141290; - } - case "8" -> { - return 5592405; - } - case "7" -> { - return 11184810; - } - default -> { - return 16777215; - } - } - } -} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/commands/np/TabCompleteN.java b/src/main/java/net/momirealms/customnameplates/commands/np/TabCompleteN.java deleted file mode 100644 index 778c8e7..0000000 --- a/src/main/java/net/momirealms/customnameplates/commands/np/TabCompleteN.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.commands.np; - -import net.momirealms.customnameplates.resource.ResourceManager; -import org.apache.commons.lang.StringUtils; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabCompleter; -import org.bukkit.entity.Player; -import org.bukkit.permissions.PermissionAttachmentInfo; -import org.jetbrains.annotations.Nullable; - -import javax.annotation.ParametersAreNonnullByDefault; -import java.util.ArrayList; -import java.util.List; - -public class TabCompleteN implements TabCompleter { - - @Override - @ParametersAreNonnullByDefault - public @Nullable List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { - - if(1 == args.length){ - - List tab = new ArrayList<>(); - if (sender.hasPermission("nameplates.reload")) tab.add("reload"); - if (sender.hasPermission("nameplates.help")) tab.add("help"); - if (sender.hasPermission("nameplates.equip")) tab.add("equip"); - if (sender.hasPermission("nameplates.forceequip")) tab.add("forceequip"); - if (sender.hasPermission("nameplates.unequip")) tab.add("unequip"); - if (sender.hasPermission("nameplates.forceunequip")) tab.add("forceunequip"); - if (sender.hasPermission("nameplates.forcepreview")) tab.add("forcepreview"); - if (sender.hasPermission("nameplates.preview")) tab.add("preview"); - if (sender.hasPermission("nameplates.list")) tab.add("list"); - - List arrayList = new ArrayList<>(); - for (String cmd : tab) { - if (cmd.startsWith(args[0])) - arrayList.add(cmd); - } - return arrayList; - } - if(2 == args.length){ - if (args[0].equalsIgnoreCase("equip")){ - List arrayList = new ArrayList<>(); - for (String cmd : availableNameplates(sender)) { - if (cmd.startsWith(args[1])) - arrayList.add(cmd); - } - return arrayList; - } - if (args[0].equalsIgnoreCase("forceunequip") && sender.hasPermission("nameplates.forceunequip")){ - List arrayList = new ArrayList<>(); - for (String cmd : online_players()) { - if (cmd.startsWith(args[1])) - arrayList.add(cmd); - } - return arrayList; - } - if (args[0].equalsIgnoreCase("forceequip") && sender.hasPermission("nameplates.forceequip")){ - List arrayList = new ArrayList<>(); - for (String cmd : online_players()) { - if (cmd.startsWith(args[1])) - arrayList.add(cmd); - } - return arrayList; - } - if (args[0].equalsIgnoreCase("forcepreview") && sender.hasPermission("nameplates.forcepreview")){ - List arrayList = new ArrayList<>(); - for (String cmd : online_players()) { - if (cmd.startsWith(args[1])) - arrayList.add(cmd); - } - return arrayList; - } - } - if(3 == args.length){ - if (args[0].equalsIgnoreCase("forceequip") && sender.hasPermission("nameplates.forceequip")){ - List arrayList = new ArrayList<>(); - for (String cmd : nameplates()) { - if (cmd.startsWith(args[2])) - arrayList.add(cmd); - } - return arrayList; - } - if (args[0].equalsIgnoreCase("forcepreview") && sender.hasPermission("nameplates.forcepreview")){ - List arrayList = new ArrayList<>(); - for (String cmd : nameplates()) { - if (cmd.startsWith(args[2])) - arrayList.add(cmd); - } - return arrayList; - } - } - return null; - } - - private static List online_players(){ - List online = new ArrayList<>(); - Bukkit.getOnlinePlayers().forEach((player -> online.add(player.getName()))); - return online; - } - - private List availableNameplates(CommandSender sender){ - List availableNameplates = new ArrayList<>(); - if (sender instanceof Player player){ - for (PermissionAttachmentInfo info : player.getEffectivePermissions()) { - String permission = info.getPermission().toLowerCase(); - if (permission.startsWith("nameplates.equip.")) { - permission = StringUtils.replace(permission, "nameplates.equip.", ""); - if (ResourceManager.NAMEPLATES.get(permission) != null){ - availableNameplates.add(permission); - } - } - } - } - return availableNameplates; - } - - private List nameplates(){ - return new ArrayList<>(ResourceManager.NAMEPLATES.keySet()); - } -} diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesEquipCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesEquipCommand.java new file mode 100644 index 0000000..7557fa8 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesEquipCommand.java @@ -0,0 +1,57 @@ +package net.momirealms.customnameplates.commands.subcmd; + +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.commands.AbstractSubCommand; +import net.momirealms.customnameplates.commands.SubCommand; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class BubblesEquipCommand extends AbstractSubCommand { + + public static final SubCommand INSTANCE = new BubblesEquipCommand(); + + public BubblesEquipCommand() { + super("equip", null); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + if (!(sender instanceof Player player)) { + AdventureUtil.consoleMessage(MessageManager.prefix + MessageManager.no_console); + return true; + } + if (args.size() < 1) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.lackArgs); + return true; + } + + if (CustomNameplates.plugin.getResourceManager().getBubbleConfig(args.get(0)) == null) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.bb_not_exist); + return true; + } + + if (!sender.hasPermission("bubbles.equip." + args.get(0))) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.bb_notAvailable); + return true; + } + CustomNameplates.plugin.getDataManager().getPlayerData(player).setBubbles(args.get(0)); + CustomNameplates.plugin.getDataManager().saveData(player); + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.bb_equip.replace("{Bubble}", CustomNameplates.plugin.getResourceManager().getBubbleConfig(args.get(0)).name())); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, List args) { + List arrayList = new ArrayList<>(); + for (String bubble : availableBubbles(sender)) { + if (bubble.startsWith(args.get(0))) + arrayList.add(bubble); + } + return arrayList; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesForceEquipCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesForceEquipCommand.java new file mode 100644 index 0000000..fb14fd5 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesForceEquipCommand.java @@ -0,0 +1,70 @@ +package net.momirealms.customnameplates.commands.subcmd; + +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.commands.AbstractSubCommand; +import net.momirealms.customnameplates.commands.SubCommand; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class BubblesForceEquipCommand extends AbstractSubCommand { + + public static final SubCommand INSTANCE = new BubblesForceEquipCommand(); + + public BubblesForceEquipCommand() { + super("forceequip", null); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + if (args.size() < 2){ + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.lackArgs); + return true; + } + if (!sender.hasPermission("bubbles.forceequip")) { + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.noPerm); + return true; + } + + Player player = Bukkit.getPlayer(args.get(0)); + if (player == null) { + return true; + } + + if (CustomNameplates.plugin.getResourceManager().getBubbleConfig(args.get(1)) == null){ + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.bb_not_exist); + return true; + } + CustomNameplates.plugin.getDataManager().getPlayerData(player).setBubbles(args.get(0)); + CustomNameplates.plugin.getDataManager().saveData(player); + + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.bb_force_equip.replace("{Bubble}", CustomNameplates.plugin.getResourceManager().getBubbleConfig(args.get(1)).name()).replace("{Player}", args.get(0))); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, List args) { + if (args.size() == 1) { + List arrayList = new ArrayList<>(); + for (String player : online_players()) { + if (player.startsWith(args.get(0))) + arrayList.add(player); + } + return arrayList; + } + if (args.size() == 2) { + List arrayList = new ArrayList<>(); + for (String bubble : bubbles()) { + if (bubble.startsWith(args.get(1))) + arrayList.add(bubble); + } + return arrayList; + } + return super.onTabComplete(sender, args); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesForceUnequipCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesForceUnequipCommand.java new file mode 100644 index 0000000..75b2353 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesForceUnequipCommand.java @@ -0,0 +1,61 @@ +package net.momirealms.customnameplates.commands.subcmd; + +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.commands.AbstractSubCommand; +import net.momirealms.customnameplates.commands.SubCommand; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class BubblesForceUnequipCommand extends AbstractSubCommand { + + public static final SubCommand INSTANCE = new BubblesForceUnequipCommand(); + + public BubblesForceUnequipCommand() { + super("forceunequip", null); + } + + + @Override + public boolean onCommand(CommandSender sender, List args) { + + if (!sender.hasPermission("bubbles.forceunequip")) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.noPerm); + return true; + } + + if (args.size() < 1){ + AdventureUtil.sendMessage(sender,MessageManager.prefix + MessageManager.lackArgs); + return true; + } + + Player player = Bukkit.getPlayer(args.get(0)); + if (player == null) { + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.not_online.replace("{Player}",args.get(0))); + return true; + } + + CustomNameplates.plugin.getDataManager().getPlayerData(player).setBubbles("none"); + CustomNameplates.plugin.getDataManager().saveData(player); + AdventureUtil.sendMessage(sender,MessageManager.prefix + MessageManager.bb_force_unEquip.replace("{Player}", args.get(0))); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, List args) { + if (args.size() == 1) { + List arrayList = new ArrayList<>(); + for (String player : online_players()) { + if (player.startsWith(args.get(0))) + arrayList.add(player); + } + return arrayList; + } + return super.onTabComplete(sender, args); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesListCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesListCommand.java new file mode 100644 index 0000000..c73c364 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesListCommand.java @@ -0,0 +1,49 @@ +package net.momirealms.customnameplates.commands.subcmd; + +import net.momirealms.customnameplates.commands.AbstractSubCommand; +import net.momirealms.customnameplates.commands.SubCommand; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class BubblesListCommand extends AbstractSubCommand { + + public static final SubCommand INSTANCE = new BubblesListCommand(); + + public BubblesListCommand() { + super("list", null); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + + if (!(sender.hasPermission("bubbles.list"))) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.noPerm); + return true; + } + + if (!(sender instanceof Player player)) { + AdventureUtil.consoleMessage(MessageManager.prefix + MessageManager.no_console); + return true; + } + + List availableBubbles = new ArrayList<>(); + getAvailableBubbles(player, availableBubbles); + if (availableBubbles.size() != 0) { + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < availableBubbles.size(); i++) { + if (i != availableBubbles.size() - 1) stringBuilder.append(availableBubbles.get(i)).append(","); + else stringBuilder.append(availableBubbles.get(i)); + } + AdventureUtil.playerMessage(player, MessageManager.prefix + MessageManager.bb_available.replace("{Bubbles}", stringBuilder.toString())); + } + else { + AdventureUtil.playerMessage(player, MessageManager.prefix + MessageManager.bb_haveNone); + } + return true; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesUnequipCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesUnequipCommand.java new file mode 100644 index 0000000..9104626 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/BubblesUnequipCommand.java @@ -0,0 +1,38 @@ +package net.momirealms.customnameplates.commands.subcmd; + +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.commands.AbstractSubCommand; +import net.momirealms.customnameplates.commands.SubCommand; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +public class BubblesUnequipCommand extends AbstractSubCommand { + + public static final SubCommand INSTANCE = new BubblesUnequipCommand(); + + public BubblesUnequipCommand() { + super("unequip", null); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + + if (!(sender instanceof Player player)) { + AdventureUtil.consoleMessage(MessageManager.prefix + MessageManager.no_console); + return true; + } + if (!(sender.hasPermission("bubbles.unequip"))) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.noPerm); + return true; + } + + CustomNameplates.plugin.getDataManager().getPlayerData(player).setBubbles("none"); + CustomNameplates.plugin.getDataManager().saveData(player); + AdventureUtil.playerMessage(player, MessageManager.prefix + MessageManager.bb_unEquip); + return true; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/ForcePreviewCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/ForcePreviewCommand.java new file mode 100644 index 0000000..880db60 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/ForcePreviewCommand.java @@ -0,0 +1,101 @@ +package net.momirealms.customnameplates.commands.subcmd; + +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.CustomNameplates; +import net.momirealms.customnameplates.commands.AbstractSubCommand; +import net.momirealms.customnameplates.commands.SubCommand; +import net.momirealms.customnameplates.manager.ConfigManager; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.manager.NameplateManager; +import net.momirealms.customnameplates.objects.nameplates.NameplateConfig; +import net.momirealms.customnameplates.utils.AdventureUtil; +import net.momirealms.customnameplates.utils.HoloUtil; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class ForcePreviewCommand extends AbstractSubCommand { + + public static final SubCommand INSTANCE = new ForcePreviewCommand(); + + public ForcePreviewCommand() { + super("forcepreview", null); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + + if (!sender.hasPermission("nameplates.forcepreview")) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.noPerm); + return true; + } + + if (args.size() < 1) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.lackArgs); + return true; + } + + Player player = Bukkit.getPlayer(args.get(0)); + if (player == null) { + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.not_online.replace("{Player}",args.get(0))); + return true; + } + + long time = System.currentTimeMillis(); + if (time - (coolDown.getOrDefault(player, time - NameplateManager.preview * 1050)) < NameplateManager.preview * 1050) { + AdventureUtil.playerMessage(player, MessageManager.prefix + MessageManager.coolDown); + return true; + } + coolDown.put(player, time); + + if (NameplateManager.mode.equalsIgnoreCase("team")) { + if (args.size() < 2) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.lackArgs); + return true; + } + NameplateConfig nameplateConfig = CustomNameplates.plugin.getResourceManager().getNameplateConfig(args.get(1)); + if (nameplateConfig == null){ + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.np_not_exist); + return true; + } + String playerPrefix = NameplateManager.hidePrefix ? "" : CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(player, NameplateManager.player_prefix); + String playerSuffix = NameplateManager.hideSuffix ? "" : CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(player, NameplateManager.player_suffix); + Component prefix = Component.text(CustomNameplates.plugin.getNameplateManager().makeCustomNameplate(MiniMessage.miniMessage().stripTags(playerPrefix), args.get(0), MiniMessage.miniMessage().stripTags(playerSuffix), nameplateConfig)).font(ConfigManager.key).append(MiniMessage.miniMessage().deserialize(playerPrefix)); + Component suffix = MiniMessage.miniMessage().deserialize(playerSuffix).append(Component.text(CustomNameplates.plugin.getNameplateManager().getSuffixChar(MiniMessage.miniMessage().stripTags(playerPrefix) + args.get(0) + MiniMessage.miniMessage().stripTags(playerSuffix))).font(ConfigManager.key)); + Component full = prefix.append(Component.text(player.getName()).color(TextColor.color(color2decimal(nameplateConfig.color()))).font(Key.key("default")).append(suffix)); + HoloUtil.showHolo(full, player, (int) NameplateManager.preview); + } + else { + showPlayerArmorStandTags(player); + } + + return true; + } + + @Override + public List onTabComplete(CommandSender sender, List args) { + if (args.size() == 1) { + List arrayList = new ArrayList<>(); + for (String player : online_players()) { + if (player.startsWith(args.get(0))) + arrayList.add(player); + } + return arrayList; + } + if (args.size() == 2 && NameplateManager.mode.equalsIgnoreCase("team")) { + List arrayList = new ArrayList<>(); + for (String string : nameplates()) { + if (string.startsWith(args.get(1))) + arrayList.add(string); + } + return arrayList; + } + return super.onTabComplete(sender, args); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/HelpCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/HelpCommand.java new file mode 100644 index 0000000..e4d4c55 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/HelpCommand.java @@ -0,0 +1,47 @@ +package net.momirealms.customnameplates.commands.subcmd; + +import net.momirealms.customnameplates.commands.AbstractSubCommand; +import net.momirealms.customnameplates.commands.SubCommand; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +public class HelpCommand extends AbstractSubCommand { + + public static final SubCommand INSTANCE = new HelpCommand(); + + public HelpCommand() { + super("help", null); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + if (sender instanceof Player player) { + if (player.hasPermission("nameplates.help")){ + AdventureUtil.playerMessage(player,"/nameplates help - show the command list"); + AdventureUtil.playerMessage(player,"/nameplates reload - reload the configuration"); + AdventureUtil.playerMessage(player,"/nameplates equip - equip a specified nameplate"); + AdventureUtil.playerMessage(player,"/nameplates forceequip - force a player to equip a specified nameplate"); + AdventureUtil.playerMessage(player,"/nameplates unequip - unequip your nameplate"); + AdventureUtil.playerMessage(player,"/nameplates forceunequip - force unequip a player's nameplate"); + AdventureUtil.playerMessage(player,"/nameplates preview - preview your nameplate"); + AdventureUtil.playerMessage(player,"/nameplates forcepreview - force a player to preview a nameplate"); + AdventureUtil.playerMessage(player,"/nameplates list - list your available nameplates"); + } + } + else { + AdventureUtil.consoleMessage("/nameplates help - show the command list"); + AdventureUtil.consoleMessage("/nameplates reload - reload the configuration"); + AdventureUtil.consoleMessage("/nameplates equip - equip a specified nameplate"); + AdventureUtil.consoleMessage("/nameplates forceequip - force a player to equip a specified nameplate"); + AdventureUtil.consoleMessage("/nameplates unequip - unequip your nameplate"); + AdventureUtil.consoleMessage("/nameplates forceunequip - force unequip a player's nameplate"); + AdventureUtil.consoleMessage("/nameplates preview - preview your nameplate"); + AdventureUtil.consoleMessage("/nameplates forcepreview - force a player to preview a nameplate"); + AdventureUtil.consoleMessage("/nameplates list - list your available nameplates"); + } + return true; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesEquipCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesEquipCommand.java new file mode 100644 index 0000000..ca48ef7 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesEquipCommand.java @@ -0,0 +1,62 @@ +package net.momirealms.customnameplates.commands.subcmd; + +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.commands.AbstractSubCommand; +import net.momirealms.customnameplates.commands.SubCommand; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.objects.nameplates.NameplatesTeam; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class NameplatesEquipCommand extends AbstractSubCommand { + + public static final SubCommand INSTANCE = new NameplatesEquipCommand(); + + public NameplatesEquipCommand() { + super("equip", null); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + if (!(sender instanceof Player player)) { + AdventureUtil.consoleMessage(MessageManager.prefix + MessageManager.no_console); + return true; + } + if (args.size() < 1) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.lackArgs); + return true; + } + + if (sender.hasPermission("nameplates.equip." + args.get(0))) { + + if (CustomNameplates.plugin.getResourceManager().getNameplateConfig(args.get(0)) == null) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.np_not_exist); + return true; + } + CustomNameplates.plugin.getDataManager().getPlayerData(player).equipNameplate(args.get(0)); + CustomNameplates.plugin.getDataManager().saveData(player); + NameplatesTeam nameplatesTeam = CustomNameplates.plugin.getNameplateManager().getTeamManager().getNameplatesTeam(player); + if (nameplatesTeam != null) nameplatesTeam.updateNameplates(); + CustomNameplates.plugin.getNameplateManager().getTeamManager().sendUpdateToAll(player, true); + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.np_equip.replace("{Nameplate}", CustomNameplates.plugin.getResourceManager().getNameplateConfig(args.get(0)).name())); + } + else { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.np_notAvailable); + } + return true; + } + + @Override + public List onTabComplete(CommandSender sender, List args) { + List arrayList = new ArrayList<>(); + for (String cmd : availableNameplates(sender)) { + if (cmd.startsWith(args.get(0))) + arrayList.add(cmd); + } + return arrayList; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesForceEquipCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesForceEquipCommand.java new file mode 100644 index 0000000..913374a --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesForceEquipCommand.java @@ -0,0 +1,76 @@ +package net.momirealms.customnameplates.commands.subcmd; + +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.commands.AbstractSubCommand; +import net.momirealms.customnameplates.commands.SubCommand; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.objects.nameplates.NameplatesTeam; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class NameplatesForceEquipCommand extends AbstractSubCommand { + + public static final SubCommand INSTANCE = new NameplatesForceEquipCommand(); + + public NameplatesForceEquipCommand() { + super("forceequip", null); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + + if (!(sender.hasPermission("nameplates.forceequip"))) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.noPerm); + return true; + } + + if (args.size() < 2){ + AdventureUtil.sendMessage(sender,MessageManager.prefix + MessageManager.lackArgs); + return true; + } + + Player player = Bukkit.getPlayer(args.get(0)); + if (player == null) { + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.not_online.replace("{Player}",args.get(0))); + return true; + } + if (CustomNameplates.plugin.getResourceManager().getNameplateConfig(args.get(1)) == null){ + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.np_not_exist); + return true; + } + CustomNameplates.plugin.getDataManager().getPlayerData(player).equipNameplate(args.get(1)); + CustomNameplates.plugin.getDataManager().saveData(player); + NameplatesTeam nameplatesTeam = CustomNameplates.plugin.getNameplateManager().getTeamManager().getNameplatesTeam(player); + if (nameplatesTeam != null) nameplatesTeam.updateNameplates(); + CustomNameplates.plugin.getNameplateManager().getTeamManager().sendUpdateToAll(player, true); + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.np_force_equip.replace("{Nameplate}", CustomNameplates.plugin.getResourceManager().getNameplateConfig(args.get(1)).name()).replace("{Player}", args.get(0))); + + return super.onCommand(sender, args); + } + + @Override + public List onTabComplete(CommandSender sender, List args) { + if (args.size() == 1) { + List arrayList = new ArrayList<>(); + for (String player : online_players()) { + if (player.startsWith(args.get(0))) + arrayList.add(player); + } + return arrayList; + } + if (args.size() == 2) { + List arrayList = new ArrayList<>(); + for (String nameplate : nameplates()) { + if (nameplate.startsWith(args.get(1))) + arrayList.add(nameplate); + } + return arrayList; + } + return super.onTabComplete(sender, args); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesForceUnequipCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesForceUnequipCommand.java new file mode 100644 index 0000000..3810a39 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesForceUnequipCommand.java @@ -0,0 +1,57 @@ +package net.momirealms.customnameplates.commands.subcmd; + +import net.momirealms.customnameplates.commands.AbstractSubCommand; +import net.momirealms.customnameplates.commands.SubCommand; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class NameplatesForceUnequipCommand extends AbstractSubCommand { + + public static final SubCommand INSTANCE = new NameplatesForceUnequipCommand(); + + public NameplatesForceUnequipCommand() { + super("forceunequip", null); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + + if (!(sender.hasPermission("nameplates.forceunequip"))) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.noPerm); + return true; + } + + if (args.size() < 1){ + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.lackArgs); + return true; + } + + Player player = Bukkit.getPlayer(args.get(0)); + if (player == null) { + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.not_online.replace("{Player}",args.get(0))); + return true; + } + super.unequipNameplate(player); + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.np_force_unEquip.replace("{Player}", args.get(0))); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, List args) { + if (args.size() == 1) { + List arrayList = new ArrayList<>(); + for (String player : online_players()) { + if (player.startsWith(args.get(0))) + arrayList.add(player); + } + return arrayList; + } + return super.onTabComplete(sender, args); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesListCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesListCommand.java new file mode 100644 index 0000000..9071d79 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesListCommand.java @@ -0,0 +1,47 @@ +package net.momirealms.customnameplates.commands.subcmd; + +import net.momirealms.customnameplates.commands.AbstractSubCommand; +import net.momirealms.customnameplates.commands.SubCommand; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class NameplatesListCommand extends AbstractSubCommand { + + public static final SubCommand INSTANCE = new NameplatesListCommand(); + + public NameplatesListCommand() { + super("list", null); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + if (!(sender.hasPermission("nameplates.list"))) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.noPerm); + return true; + } + if (!(sender instanceof Player player)) { + AdventureUtil.consoleMessage(MessageManager.prefix + MessageManager.no_console); + return true; + } + + List availableNameplates = new ArrayList<>(); + getAvailableNameplates(player, availableNameplates); + if (availableNameplates.size() != 0) { + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < availableNameplates.size(); i++) { + if (i != availableNameplates.size() - 1) stringBuilder.append(availableNameplates.get(i)).append(","); + else stringBuilder.append(availableNameplates.get(i)); + } + AdventureUtil.playerMessage(player, MessageManager.prefix + MessageManager.np_available.replace("{Nameplates}", stringBuilder.toString())); + } + else { + AdventureUtil.playerMessage(player, MessageManager.prefix + MessageManager.np_haveNone); + } + return true; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesUnequipCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesUnequipCommand.java new file mode 100644 index 0000000..8db5611 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/NameplatesUnequipCommand.java @@ -0,0 +1,37 @@ +package net.momirealms.customnameplates.commands.subcmd; + +import net.momirealms.customnameplates.commands.AbstractSubCommand; +import net.momirealms.customnameplates.commands.SubCommand; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +public class NameplatesUnequipCommand extends AbstractSubCommand { + + public static final SubCommand INSTANCE = new NameplatesUnequipCommand(); + + public NameplatesUnequipCommand() { + super("unequip", null); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + + if (!(sender.hasPermission("nameplates.unequip"))) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.noPerm); + return true; + } + + if (!(sender instanceof Player player)) { + AdventureUtil.consoleMessage(MessageManager.prefix + MessageManager.no_console); + return true; + } + + super.unequipNameplate(player); + AdventureUtil.playerMessage(player, MessageManager.prefix + MessageManager.np_unEquip); + return super.onCommand(sender, args); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/PreviewCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/PreviewCommand.java new file mode 100644 index 0000000..581ce35 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/PreviewCommand.java @@ -0,0 +1,57 @@ +package net.momirealms.customnameplates.commands.subcmd; + +import net.kyori.adventure.key.Key; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextColor; +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.commands.AbstractSubCommand; +import net.momirealms.customnameplates.commands.SubCommand; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.manager.NameplateManager; +import net.momirealms.customnameplates.objects.nameplates.NameplatesTeam; +import net.momirealms.customnameplates.utils.AdventureUtil; +import net.momirealms.customnameplates.utils.HoloUtil; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +public class PreviewCommand extends AbstractSubCommand { + + public static final SubCommand INSTANCE = new PreviewCommand(); + public PreviewCommand() { + super("preview", null); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + if (!(sender instanceof Player player)) { + AdventureUtil.consoleMessage(MessageManager.prefix + MessageManager.no_console); + return true; + } + if (!(sender.hasPermission("nameplates.preview"))) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.noPerm); + return true; + } + + long time = System.currentTimeMillis(); + if (time - (coolDown.getOrDefault(player, time - NameplateManager.preview * 1050)) < NameplateManager.preview * 1050) { + AdventureUtil.playerMessage(player, MessageManager.prefix + MessageManager.coolDown); + return true; + } + coolDown.put(player, time); + + AdventureUtil.playerMessage(player, MessageManager.prefix +MessageManager.preview); + if (NameplateManager.mode.equalsIgnoreCase("team")) { + NameplatesTeam team = CustomNameplates.plugin.getNameplateManager().getTeamManager().getNameplatesTeam(player); + if (team != null) { + Component full = team.getPrefix().append(Component.text(player.getName()).color(TextColor.color(color2decimal(team.getColor()))).font(Key.key("default")).append(team.getSuffix())); + HoloUtil.showHolo(full, player, (int) NameplateManager.preview); + } + } + else { + showPlayerArmorStandTags(player); + } + return true; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/ReloadCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/ReloadCommand.java new file mode 100644 index 0000000..598d529 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/ReloadCommand.java @@ -0,0 +1,37 @@ +package net.momirealms.customnameplates.commands.subcmd; + +import net.momirealms.customnameplates.commands.AbstractSubCommand; +import net.momirealms.customnameplates.commands.SubCommand; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.utils.AdventureUtil; +import net.momirealms.customnameplates.utils.ConfigUtil; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +public class ReloadCommand extends AbstractSubCommand { + + public static final SubCommand INSTANCE = new ReloadCommand(); + + private ReloadCommand() { + super("reload", null); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + + if (!(sender.hasPermission("nameplates.reload"))) { + AdventureUtil.playerMessage((Player) sender, MessageManager.prefix + MessageManager.noPerm); + return true; + } + + if (args.size() < 1) { + long time1 = System.currentTimeMillis(); + ConfigUtil.reloadConfigs(); + AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.reload.replace("{time}", String.valueOf(System.currentTimeMillis() - time1))); + return true; + } + return super.onCommand(sender, args); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/data/DataManager.java b/src/main/java/net/momirealms/customnameplates/data/DataManager.java deleted file mode 100644 index 5ccfa29..0000000 --- a/src/main/java/net/momirealms/customnameplates/data/DataManager.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.data; - -import net.momirealms.customnameplates.ConfigManager; -import net.momirealms.customnameplates.utils.AdventureUtil; -import net.momirealms.customnameplates.CustomNameplates; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import java.util.HashMap; -import java.util.Optional; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -public class DataManager { - - private final ConcurrentHashMap cache = new ConcurrentHashMap<>(); - - public PlayerData getOrEmpty(Player player) { - if (cache.get(player.getUniqueId()) == null) { - return new PlayerData("none","none"); - } - else { - return cache.get(player.getUniqueId()); - } - } - - public void loadData(Player player) { - UUID uuid = player.getUniqueId(); - if (ConfigManager.Database.async) { - Bukkit.getScheduler().runTaskAsynchronously(CustomNameplates.instance, () -> { - PlayerData playerData = SqlHandler.getPlayerData(uuid); - cache.put(uuid, Optional.ofNullable(playerData).orElse(new PlayerData(ConfigManager.Nameplate.default_nameplate, ConfigManager.Bubbles.defaultBubble))); - if (ConfigManager.Module.nameplate) CustomNameplates.instance.getTeamManager().createTeam(player); - }); - } - else { - PlayerData playerData = SqlHandler.getPlayerData(uuid); - cache.put(uuid, Optional.ofNullable(playerData).orElse(new PlayerData(ConfigManager.Nameplate.default_nameplate, ConfigManager.Bubbles.defaultBubble))); - if (ConfigManager.Module.nameplate) CustomNameplates.instance.getTeamManager().createTeam(player); - } - } - - public PlayerData getOrCreate(UUID uuid) { - if (cache.containsKey(uuid)) { - return cache.get(uuid); - } - PlayerData playerData = SqlHandler.getPlayerData(uuid); - if (playerData == null) { - playerData = new PlayerData(ConfigManager.Nameplate.default_nameplate, ConfigManager.Bubbles.defaultBubble); - } - cache.put(uuid, playerData); - return playerData; - } - - public void unloadPlayer(UUID uuid) { - cache.remove(uuid); - } - - public void savePlayer(UUID uuid) { - if (ConfigManager.Database.async){ - Bukkit.getScheduler().runTaskAsynchronously(CustomNameplates.instance, () -> { - SqlHandler.save(cache.get(uuid), uuid); - }); - }else { - SqlHandler.save(cache.get(uuid), uuid); - } - } - - public boolean create() { - if (ConfigManager.Database.use_mysql) AdventureUtil.consoleMessage("[CustomNameplates] Storage Mode - MYSQL"); - else AdventureUtil.consoleMessage("[CustomNameplates] Storage Mode - SQLite"); - if (SqlHandler.connect()) { - if (ConfigManager.Database.use_mysql) { - SqlHandler.getWaitTimeOut(); - } - SqlHandler.createTable(); - return true; - } - else return false; - } - - public ConcurrentHashMap getCache() { - return cache; - } -} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/data/SqlHandler.java b/src/main/java/net/momirealms/customnameplates/data/SqlHandler.java deleted file mode 100644 index 714e8e5..0000000 --- a/src/main/java/net/momirealms/customnameplates/data/SqlHandler.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.data; - -import net.momirealms.customnameplates.ConfigManager; -import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.utils.AdventureUtil; -import net.momirealms.customnameplates.utils.SqlConnection; -import org.bukkit.Bukkit; -import org.jetbrains.annotations.Nullable; - -import java.sql.*; -import java.util.HashMap; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -public class SqlHandler { - - public final static SqlConnection database = new SqlConnection(); - - public static boolean connect() { - return database.setGlobalConnection(); - } - - public static void close() { - database.close(); - } - - public static void getWaitTimeOut() { - if (ConfigManager.Database.use_mysql && !ConfigManager.Database.enable_pool) { - try { - Connection connection = database.getConnectionAndCheck(); - String query = "show variables LIKE 'wait_timeout'"; - PreparedStatement statement = connection.prepareStatement(query); - ResultSet rs = statement.executeQuery(); - if (rs.next()) { - int waitTime = rs.getInt(2); - if (waitTime > 50) { - database.waitTimeOut = waitTime - 30; - } - } - rs.close(); - statement.close(); - database.closeHikariConnection(connection); - } catch (SQLException ignored) { - AdventureUtil.consoleMessage("[CustomNameplates] Failed to get wait time out"); - } - } - } - - public static void createTable() { - Connection connection = database.getConnectionAndCheck(); - - try { - Statement statement = connection.createStatement(); - if (statement == null) { - return; - } - String query; - if (ConfigManager.Database.use_mysql) { - query = "CREATE TABLE IF NOT EXISTS " + ConfigManager.Database.tableName - + "(player VARCHAR(50) NOT NULL, equipped VARCHAR(50) NOT NULL, bubble VARCHAR(50) NOT NULL," - + " PRIMARY KEY (player)) DEFAULT charset = " + ConfigManager.Database.ENCODING + ";"; - } else { - query = "CREATE TABLE IF NOT EXISTS " + ConfigManager.Database.tableName - + "(player VARCHAR(50) NOT NULL, equipped VARCHAR(50) NOT NULL, bubble VARCHAR(50) NOT NULL," - + " PRIMARY KEY (player));"; - } - statement.executeUpdate(query); - statement.close(); - database.closeHikariConnection(connection); - } catch (SQLException e) { - e.printStackTrace(); - } - } - - public static void updateTable() { - try { - Connection connection = database.getConnectionAndCheck(); - Statement statement = connection.createStatement(); - if (statement == null) { - return; - } - String query1 = "ALTER TABLE " + ConfigManager.Database.tableName + " DROP COLUMN accepted;"; - String query2 = "ALTER TABLE " + ConfigManager.Database.tableName + " ADD COLUMN bubble VARCHAR(50) NOT NULL DEFAULT 'none';"; - statement.executeUpdate(query1); - statement.executeUpdate(query2); - statement.close(); - database.closeHikariConnection(connection); - } catch (SQLException e) { - e.printStackTrace(); - } - } - - @Nullable - public static PlayerData getPlayerData(UUID uuid) { - PlayerData playerData = null; - try { - Connection connection = database.getConnectionAndCheck(); - String sql = "SELECT * FROM " + ConfigManager.Database.tableName + " WHERE player = ?"; - PreparedStatement statement = connection.prepareStatement(sql); - statement.setString(1, uuid.toString()); - ResultSet rs = statement.executeQuery(); - if (rs.next()) { - playerData = new PlayerData(rs.getString(2), rs.getString(3)); - } - else { - sql = "INSERT INTO " + ConfigManager.Database.tableName + "(player,equipped,bubble) values(?,?,?)"; - statement = connection.prepareStatement(sql); - statement.setString(1, uuid.toString()); - statement.setString(2, ConfigManager.Nameplate.default_nameplate); - statement.setString(3, ConfigManager.Bubbles.defaultBubble); - statement.executeUpdate(); - } - rs.close(); - statement.close(); - database.closeHikariConnection(connection); - } catch (SQLException e) { - e.printStackTrace(); - } - return playerData; - } - - public static void save(PlayerData playerData, UUID uuid) { - Connection connection = database.getConnectionAndCheck(); - try { - String query = " SET equipped = ?, bubble = ? WHERE player = ?"; - PreparedStatement statement = connection.prepareStatement("UPDATE " + ConfigManager.Database.tableName + query); - statement.setString(1, playerData.getEquippedNameplate()); - statement.setString(2, playerData.getBubbles()); - statement.setString(3, uuid.toString()); - statement.executeUpdate(); - statement.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - database.closeHikariConnection(connection); - } - - public static void saveAll() { - Connection connection = database.getConnectionAndCheck(); - ConcurrentHashMap data = CustomNameplates.instance.getDataManager().getCache(); - Bukkit.getOnlinePlayers().forEach(player -> { - try { - PlayerData playerData = data.get(player.getUniqueId()); - String query = " SET equipped = ?, bubble = ? WHERE player = ?"; - PreparedStatement statement = connection.prepareStatement("UPDATE " + ConfigManager.Database.tableName + query); - statement.setString(1, playerData.getEquippedNameplate()); - statement.setString(2, playerData.getBubbles()); - statement.setString(3, String.valueOf(player.getUniqueId())); - statement.executeUpdate(); - statement.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - }); - database.closeHikariConnection(connection); - } -} diff --git a/src/main/java/net/momirealms/customnameplates/helper/LibraryLoader.java b/src/main/java/net/momirealms/customnameplates/helper/LibraryLoader.java index b8df644..9e95676 100644 --- a/src/main/java/net/momirealms/customnameplates/helper/LibraryLoader.java +++ b/src/main/java/net/momirealms/customnameplates/helper/LibraryLoader.java @@ -27,7 +27,6 @@ package net.momirealms.customnameplates.helper; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; - import net.momirealms.customnameplates.CustomNameplates; import org.apache.commons.lang.StringUtils; @@ -47,7 +46,7 @@ import java.util.Objects; public final class LibraryLoader { @SuppressWarnings("Guava") - private static final Supplier URL_INJECTOR = Suppliers.memoize(() -> URLClassLoaderAccess.create((URLClassLoader) CustomNameplates.instance.getClass().getClassLoader())); + private static final Supplier URL_INJECTOR = Suppliers.memoize(() -> URLClassLoaderAccess.create((URLClassLoader) CustomNameplates.plugin.getClass().getClassLoader())); /** * Resolves all {@link MavenLibrary} annotations on the given object. @@ -111,7 +110,7 @@ public final class LibraryLoader { } private static File getLibFolder(Dependency dependency) { - File pluginDataFolder = CustomNameplates.instance.getDataFolder(); + File pluginDataFolder = CustomNameplates.plugin.getDataFolder(); File serverDir = pluginDataFolder.getParentFile().getParentFile(); File helperDir = new File(serverDir, "libraries"); diff --git a/src/main/java/net/momirealms/customnameplates/helper/Log.java b/src/main/java/net/momirealms/customnameplates/helper/Log.java index f7338cf..630843d 100644 --- a/src/main/java/net/momirealms/customnameplates/helper/Log.java +++ b/src/main/java/net/momirealms/customnameplates/helper/Log.java @@ -28,9 +28,8 @@ package net.momirealms.customnameplates.helper; import net.momirealms.customnameplates.CustomNameplates; import org.bukkit.Bukkit; -import java.util.logging.Level; - import javax.annotation.Nonnull; +import java.util.logging.Level; /** * Utility for quickly accessing a logger instance without using {@link Bukkit#getLogger()} @@ -38,23 +37,23 @@ import javax.annotation.Nonnull; public final class Log { public static void info(@Nonnull String s) { - CustomNameplates.instance.getLogger().info(s); + CustomNameplates.plugin.getLogger().info(s); } public static void warn(@Nonnull String s) { - CustomNameplates.instance.getLogger().warning(s); + CustomNameplates.plugin.getLogger().warning(s); } public static void severe(@Nonnull String s) { - CustomNameplates.instance.getLogger().severe(s); + CustomNameplates.plugin.getLogger().severe(s); } public static void warn(@Nonnull String s, Throwable t) { - CustomNameplates.instance.getLogger().log(Level.WARNING, s, t); + CustomNameplates.plugin.getLogger().log(Level.WARNING, s, t); } public static void severe(@Nonnull String s, Throwable t) { - CustomNameplates.instance.getLogger().log(Level.SEVERE, s, t); + CustomNameplates.plugin.getLogger().log(Level.SEVERE, s, t); } private Log() { diff --git a/src/main/java/net/momirealms/customnameplates/helper/MavenLibraries.java b/src/main/java/net/momirealms/customnameplates/helper/MavenLibraries.java index 4654110..ca4747c 100644 --- a/src/main/java/net/momirealms/customnameplates/helper/MavenLibraries.java +++ b/src/main/java/net/momirealms/customnameplates/helper/MavenLibraries.java @@ -25,13 +25,8 @@ package net.momirealms.customnameplates.helper; -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - import javax.annotation.Nonnull; +import java.lang.annotation.*; /** * Annotation to indicate the required libraries for a class. diff --git a/src/main/java/net/momirealms/customnameplates/helper/MavenLibrary.java b/src/main/java/net/momirealms/customnameplates/helper/MavenLibrary.java index 80e29ea..27a653a 100644 --- a/src/main/java/net/momirealms/customnameplates/helper/MavenLibrary.java +++ b/src/main/java/net/momirealms/customnameplates/helper/MavenLibrary.java @@ -25,14 +25,8 @@ package net.momirealms.customnameplates.helper; -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Repeatable; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - import javax.annotation.Nonnull; +import java.lang.annotation.*; /** * Annotation to indicate a required library for a class. diff --git a/src/main/java/net/momirealms/customnameplates/helper/NonnullByDefault.java b/src/main/java/net/momirealms/customnameplates/helper/NonnullByDefault.java index a6475a3..a39e959 100644 --- a/src/main/java/net/momirealms/customnameplates/helper/NonnullByDefault.java +++ b/src/main/java/net/momirealms/customnameplates/helper/NonnullByDefault.java @@ -25,14 +25,13 @@ package net.momirealms.customnameplates.helper; +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierDefault; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import javax.annotation.Nonnull; -import javax.annotation.meta.TypeQualifierDefault; - @Nonnull @Documented @TypeQualifierDefault({ diff --git a/src/main/java/net/momirealms/customnameplates/helper/Repository.java b/src/main/java/net/momirealms/customnameplates/helper/Repository.java index 444d7be..5bb87a5 100644 --- a/src/main/java/net/momirealms/customnameplates/helper/Repository.java +++ b/src/main/java/net/momirealms/customnameplates/helper/Repository.java @@ -25,13 +25,8 @@ package net.momirealms.customnameplates.helper; -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - import javax.annotation.Nonnull; +import java.lang.annotation.*; /** * Represents a maven repository. diff --git a/src/main/java/net/momirealms/customnameplates/helper/URLClassLoaderAccess.java b/src/main/java/net/momirealms/customnameplates/helper/URLClassLoaderAccess.java index 1c617d4..2541880 100644 --- a/src/main/java/net/momirealms/customnameplates/helper/URLClassLoaderAccess.java +++ b/src/main/java/net/momirealms/customnameplates/helper/URLClassLoaderAccess.java @@ -25,13 +25,12 @@ package net.momirealms.customnameplates.helper; +import javax.annotation.Nonnull; import java.lang.reflect.Field; import java.net.URL; import java.net.URLClassLoader; import java.util.Collection; -import javax.annotation.Nonnull; - /** * Provides access to {@link URLClassLoader}#addURL. */ diff --git a/src/main/java/net/momirealms/customnameplates/hook/NameplatePlaceholders.java b/src/main/java/net/momirealms/customnameplates/hook/NameplatePlaceholders.java index 1302af1..b4edd4f 100644 --- a/src/main/java/net/momirealms/customnameplates/hook/NameplatePlaceholders.java +++ b/src/main/java/net/momirealms/customnameplates/hook/NameplatePlaceholders.java @@ -19,25 +19,28 @@ package net.momirealms.customnameplates.hook; import me.clip.placeholderapi.PlaceholderAPI; import me.clip.placeholderapi.expansion.PlaceholderExpansion; -import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.helper.Log; -import net.momirealms.customnameplates.nameplates.*; -import net.momirealms.customnameplates.objects.BackGround; -import net.momirealms.customnameplates.data.PlayerData; -import net.momirealms.customnameplates.font.FontUtil; +import net.momirealms.customnameplates.manager.MessageManager; +import net.momirealms.customnameplates.manager.PlaceholderManager; +import net.momirealms.customnameplates.manager.ResourceManager; import net.momirealms.customnameplates.objects.StaticText; -import net.momirealms.customnameplates.resource.ResourceManager; -import net.momirealms.customnameplates.objects.BackGroundText; -import net.momirealms.customnameplates.objects.NameplateText; -import org.bukkit.OfflinePlayer; +import net.momirealms.customnameplates.objects.background.BackGround; +import net.momirealms.customnameplates.objects.background.BackGroundText; +import net.momirealms.customnameplates.objects.font.FontUtil; +import net.momirealms.customnameplates.objects.nameplates.NameplateConfig; +import net.momirealms.customnameplates.objects.nameplates.NameplateText; +import net.momirealms.customnameplates.objects.nameplates.NameplatesTeam; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import java.util.Optional; - public class NameplatePlaceholders extends PlaceholderExpansion { + private final PlaceholderManager placeholderManager; + + public NameplatePlaceholders(PlaceholderManager placeholderManager) { + this.placeholderManager = placeholderManager; + } + @Override public @NotNull String getIdentifier() { return "nameplates"; @@ -59,25 +62,25 @@ public class NameplatePlaceholders extends PlaceholderExpansion { } @Override - public String onRequest(OfflinePlayer player, String params) { + public String onPlaceholderRequest(Player player, String params) { if (params.equals("equipped")){ - String nameplate = Optional.ofNullable(CustomNameplates.instance.getDataManager().getCache().get(player.getUniqueId())).orElse(PlayerData.EMPTY).getEquippedNameplate(); + String nameplate = CustomNameplates.plugin.getDataManager().getPlayerData(player).getEquippedNameplate(); if (!nameplate.equals("none")) return ResourceManager.NAMEPLATES.get(nameplate).name(); - else return ConfigManager.Message.noNameplate; + return MessageManager.noNameplate; } if (params.equals("prefix")){ - NameplatesTeam nameplatesTeam = CustomNameplates.instance.getTeamManager().getTeams().get(TeamManager.getTeamName(player.getPlayer())); + NameplatesTeam nameplatesTeam = CustomNameplates.plugin.getNameplateManager().getTeamManager().getNameplatesTeam(player); if (nameplatesTeam != null) return nameplatesTeam.getPrefixText(); - else return ""; + return ""; } if (params.equals("suffix")){ - NameplatesTeam nameplatesTeam = CustomNameplates.instance.getTeamManager().getTeams().get(TeamManager.getTeamName(player.getPlayer())); + NameplatesTeam nameplatesTeam = CustomNameplates.plugin.getNameplateManager().getTeamManager().getNameplatesTeam(player); if (nameplatesTeam != null) return nameplatesTeam.getSuffixText(); - else return ""; + return ""; } if (params.startsWith("bg_")){ String bg = params.substring(3); - BackGroundText backGroundText = ConfigManager.papiBG.get(bg); + BackGroundText backGroundText = placeholderManager.getPapiBG().get(bg);; if (backGroundText == null) return ""; BackGround backGround = ResourceManager.BACKGROUNDS.get(backGroundText.getBackground()); if (backGround == null) return ""; @@ -86,7 +89,7 @@ public class NameplatePlaceholders extends PlaceholderExpansion { } if (params.startsWith("static_")){ String staticKey = params.substring(7); - StaticText staticText = ConfigManager.papiST.get(staticKey); + StaticText staticText = placeholderManager.getPapiST().get(staticKey); if (staticText == null) return ""; String text = PlaceholderAPI.setPlaceholders(player, staticText.getText()); int offset = staticText.getStaticValue() - FontUtil.getTotalWidth(text); @@ -94,22 +97,21 @@ public class NameplatePlaceholders extends PlaceholderExpansion { } if (params.startsWith("npp_")){ String np = params.substring(4); - NameplateText nameplateText = ConfigManager.papiNP.get(np); + NameplateText nameplateText = placeholderManager.getPapiNP().get(np); if (nameplateText == null) return ""; NameplateConfig nameplateConfig = ResourceManager.NAMEPLATES.get(nameplateText.getNameplate()); if (nameplateConfig == null) return ""; - String text = PlaceholderAPI.setPlaceholders(player, nameplateText.getText()); - return NameplateUtil.makeCustomNameplate("", text,"", nameplateConfig); + String text = placeholderManager.parsePlaceholders(player, nameplateText.getText()); + return CustomNameplates.plugin.getNameplateManager().makeCustomNameplate("", text,"", nameplateConfig); } if (params.startsWith("nps_")){ String np = params.substring(4); - NameplateText nameplateText = ConfigManager.papiNP.get(np); + NameplateText nameplateText = placeholderManager.getPapiNP().get(np); if (nameplateText == null) return ""; NameplateConfig nameplateConfig = ResourceManager.NAMEPLATES.get(nameplateText.getNameplate()); if (nameplateConfig == null) return ""; - String text = nameplateText.getText(); - if (ConfigManager.Main.placeholderAPI) text = PlaceholderAPI.setPlaceholders(player, text); - return NameplateUtil.getSuffixChar(text); + String text = placeholderManager.parsePlaceholders(player, nameplateText.getText()); + return CustomNameplates.plugin.getNameplateManager().getSuffixChar(text); } return null; } diff --git a/src/main/java/net/momirealms/customnameplates/hook/OffsetPlaceholders.java b/src/main/java/net/momirealms/customnameplates/hook/OffsetPlaceholders.java index d51ef9a..8c36d30 100644 --- a/src/main/java/net/momirealms/customnameplates/hook/OffsetPlaceholders.java +++ b/src/main/java/net/momirealms/customnameplates/hook/OffsetPlaceholders.java @@ -18,12 +18,12 @@ package net.momirealms.customnameplates.hook; import me.clip.placeholderapi.expansion.PlaceholderExpansion; -import net.momirealms.customnameplates.font.FontOffset; -import net.momirealms.customnameplates.font.FontUtil; +import net.momirealms.customnameplates.objects.font.FontUtil; import org.bukkit.OfflinePlayer; import org.jetbrains.annotations.NotNull; public class OffsetPlaceholders extends PlaceholderExpansion { + @Override public @NotNull String getIdentifier() { return "offset"; @@ -45,13 +45,12 @@ public class OffsetPlaceholders extends PlaceholderExpansion { } @Override - public String onRequest(OfflinePlayer player, String params) { - if (params == null) return null; + public String onRequest(OfflinePlayer player, @NotNull String params) { try { int offset = Integer.parseInt(params); return FontUtil.getOffset(offset); } catch (NumberFormatException ignored) { + return ""; } - return null; } -} +} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/hook/PlaceholderManager.java b/src/main/java/net/momirealms/customnameplates/hook/PlaceholderManager.java deleted file mode 100644 index fd992ae..0000000 --- a/src/main/java/net/momirealms/customnameplates/hook/PlaceholderManager.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.hook; - -import me.clip.placeholderapi.PlaceholderAPI; -import net.momirealms.customnameplates.Function; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class PlaceholderManager extends Function { - - private NameplatePlaceholders nameplatePlaceholders; - - private OffsetPlaceholders offsetPlaceholders; - - public PlaceholderManager(String name) { - super(name); - } - - @Override - public void load() { - this.nameplatePlaceholders = new NameplatePlaceholders(); - this.offsetPlaceholders = new OffsetPlaceholders(); - this.nameplatePlaceholders.register(); - this.offsetPlaceholders.register(); - } - - @Override - public void unload() { - this.nameplatePlaceholders.unregister(); - this.offsetPlaceholders.unregister(); - } - - public String parsePlaceholders(Player player, String papi) { - if (papi == null || papi.equals("")) return ""; - return PlaceholderAPI.setPlaceholders(player, papi); - } - - private final Pattern placeholderPattern = Pattern.compile("%([^%]*)%"); - - public List detectPlaceholders(String text){ - if (text == null || !text.contains("%")) return Collections.emptyList(); - List placeholders = new ArrayList<>(); - Matcher matcher = placeholderPattern.matcher(text); - while (matcher.find()) placeholders.add(matcher.group()); - return placeholders; - } -} diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/bubbles/ChatListener.java b/src/main/java/net/momirealms/customnameplates/listener/ChatListener.java similarity index 88% rename from src/main/java/net/momirealms/customnameplates/nameplates/mode/bubbles/ChatListener.java rename to src/main/java/net/momirealms/customnameplates/listener/ChatListener.java index f3b68c9..e91d09c 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/bubbles/ChatListener.java +++ b/src/main/java/net/momirealms/customnameplates/listener/ChatListener.java @@ -15,16 +15,16 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.mode.bubbles; +package net.momirealms.customnameplates.listener; import net.kyori.adventure.text.minimessage.MiniMessage; import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.manager.ChatBubblesManager; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerChatEvent; public class ChatListener implements Listener { @@ -37,7 +37,7 @@ public class ChatListener implements Listener { @EventHandler public void onChat(AsyncPlayerChatEvent event) { if (!event.isCancelled()) { - Bukkit.getScheduler().runTask(CustomNameplates.instance, () -> { + Bukkit.getScheduler().runTask(CustomNameplates.plugin, () -> { chatBubblesManager.onChat(event.getPlayer(), MiniMessage.miniMessage().stripTags(ChatColor.stripColor(event.getMessage()))); }); } diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/EventListenerE.java b/src/main/java/net/momirealms/customnameplates/listener/EntityTagListener.java similarity index 85% rename from src/main/java/net/momirealms/customnameplates/nameplates/mode/EventListenerE.java rename to src/main/java/net/momirealms/customnameplates/listener/EntityTagListener.java index 886859d..a8f2b0a 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/EventListenerE.java +++ b/src/main/java/net/momirealms/customnameplates/listener/EntityTagListener.java @@ -15,14 +15,15 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.mode; +package net.momirealms.customnameplates.listener; +import net.momirealms.customnameplates.objects.nameplates.mode.EntityTag; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerToggleSneakEvent; -public record EventListenerE(EntityTag entityTag) implements Listener { +public record EntityTagListener(EntityTag entityTag) implements Listener { @EventHandler public void onSneak(PlayerToggleSneakEvent event) { diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/ProxyDataListener.java b/src/main/java/net/momirealms/customnameplates/listener/ProxyDataListener.java similarity index 82% rename from src/main/java/net/momirealms/customnameplates/nameplates/ProxyDataListener.java rename to src/main/java/net/momirealms/customnameplates/listener/ProxyDataListener.java index 9873789..b934b66 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/ProxyDataListener.java +++ b/src/main/java/net/momirealms/customnameplates/listener/ProxyDataListener.java @@ -15,10 +15,11 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates; +package net.momirealms.customnameplates.listener; import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteStreams; +import net.momirealms.customnameplates.objects.team.TABbcHook; import org.bukkit.entity.Player; import org.bukkit.plugin.messaging.PluginMessageListener; import org.jetbrains.annotations.NotNull; @@ -27,6 +28,12 @@ import java.util.Objects; public class ProxyDataListener implements PluginMessageListener { + private final TABbcHook taBbcHook; + + public ProxyDataListener(TABbcHook taBbcHook) { + this.taBbcHook = taBbcHook; + } + @Override public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] message) { if (!Objects.equals("customnameplates:cnp", channel)) { @@ -35,6 +42,6 @@ public class ProxyDataListener implements PluginMessageListener { ByteArrayDataInput dataInput = ByteStreams.newDataInput(message); String playerName = dataInput.readUTF(); String teamName = dataInput.readUTF(); - TeamManager.teamNames.put(playerName, teamName); + taBbcHook.addPlayerToCache(playerName, teamName); } } diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/SimpleListener.java b/src/main/java/net/momirealms/customnameplates/listener/SimpleListener.java similarity index 78% rename from src/main/java/net/momirealms/customnameplates/bossbar/SimpleListener.java rename to src/main/java/net/momirealms/customnameplates/listener/SimpleListener.java index a4753aa..66abd83 100644 --- a/src/main/java/net/momirealms/customnameplates/bossbar/SimpleListener.java +++ b/src/main/java/net/momirealms/customnameplates/listener/SimpleListener.java @@ -15,22 +15,24 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.bossbar; +package net.momirealms.customnameplates.listener; +import net.momirealms.customnameplates.objects.Function; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; -public record SimpleListener(BossBarManager bossBarManager) implements Listener { +public record SimpleListener(Function function) implements Listener { @EventHandler public void onJoin(PlayerJoinEvent event) { - bossBarManager.onJoin(event.getPlayer()); + function.onJoin(event.getPlayer()); } @EventHandler public void onQuit(PlayerQuitEvent event) { - bossBarManager.onQuit(event.getPlayer()); + function.onQuit(event.getPlayer()); } -} + +} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/bubbles/TrChatListener.java b/src/main/java/net/momirealms/customnameplates/listener/TrChatListener.java similarity index 60% rename from src/main/java/net/momirealms/customnameplates/nameplates/mode/bubbles/TrChatListener.java rename to src/main/java/net/momirealms/customnameplates/listener/TrChatListener.java index 197a81b..f312c79 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/bubbles/TrChatListener.java +++ b/src/main/java/net/momirealms/customnameplates/listener/TrChatListener.java @@ -15,23 +15,27 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.mode.bubbles; +package net.momirealms.customnameplates.listener; import me.arasple.mc.trchat.api.event.TrChatEvent; -import net.momirealms.customnameplates.ConfigManager; +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.manager.ChatBubblesManager; +import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -public record TrChatListener( - ChatBubblesManager chatBubblesManager) implements Listener { +public record TrChatListener(ChatBubblesManager chatBubblesManager) implements Listener { @EventHandler public void onTrChat(TrChatEvent event) { if (event.isCancelled()) return; if (!event.getForward()) return; - for (String channel : ConfigManager.Main.trChatChannel) { - if (event.getChannel().getId().equals(channel)) return; + String channelName = event.getChannel().getId(); + for (String channel : ChatBubblesManager.channels) { + if (channelName.equals(channel)) return; } - chatBubblesManager.onChat(event.getSession().getPlayer(), event.getMessage()); + Bukkit.getScheduler().runTask(CustomNameplates.plugin, () -> { + chatBubblesManager.onChat(event.getSession().getPlayer(), event.getMessage()); + }); } } \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityDestroyListener.java b/src/main/java/net/momirealms/customnameplates/listener/packet/EntityDestroyListener.java similarity index 85% rename from src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityDestroyListener.java rename to src/main/java/net/momirealms/customnameplates/listener/packet/EntityDestroyListener.java index 2126547..6f19849 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityDestroyListener.java +++ b/src/main/java/net/momirealms/customnameplates/listener/packet/EntityDestroyListener.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.listener; +package net.momirealms.customnameplates.listener.packet; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.ListenerPriority; @@ -23,14 +23,14 @@ import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketEvent; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.mode.PacketsHandler; +import net.momirealms.customnameplates.objects.nameplates.mode.PacketsHandler; public class EntityDestroyListener extends PacketAdapter { private final PacketsHandler handler; public EntityDestroyListener(PacketsHandler handler) { - super(CustomNameplates.instance, ListenerPriority.HIGHEST, PacketType.Play.Server.ENTITY_DESTROY); + super(CustomNameplates.plugin, ListenerPriority.HIGHEST, PacketType.Play.Server.ENTITY_DESTROY); this.handler = handler; } diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityLookListener.java b/src/main/java/net/momirealms/customnameplates/listener/packet/EntityLookListener.java similarity index 84% rename from src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityLookListener.java rename to src/main/java/net/momirealms/customnameplates/listener/packet/EntityLookListener.java index c65a510..00438a8 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityLookListener.java +++ b/src/main/java/net/momirealms/customnameplates/listener/packet/EntityLookListener.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.listener; +package net.momirealms.customnameplates.listener.packet; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.ListenerPriority; @@ -23,14 +23,14 @@ import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketEvent; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.mode.PacketsHandler; +import net.momirealms.customnameplates.objects.nameplates.mode.PacketsHandler; public class EntityLookListener extends PacketAdapter { private final PacketsHandler handler; public EntityLookListener(PacketsHandler handler) { - super(CustomNameplates.instance, ListenerPriority.HIGHEST, PacketType.Play.Server.REL_ENTITY_MOVE_LOOK); + super(CustomNameplates.plugin, ListenerPriority.HIGHEST, PacketType.Play.Server.REL_ENTITY_MOVE_LOOK); this.handler = handler; } diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityMountListener.java b/src/main/java/net/momirealms/customnameplates/listener/packet/EntityMountListener.java similarity index 84% rename from src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityMountListener.java rename to src/main/java/net/momirealms/customnameplates/listener/packet/EntityMountListener.java index fd9c1d0..d5118ee 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityMountListener.java +++ b/src/main/java/net/momirealms/customnameplates/listener/packet/EntityMountListener.java @@ -15,21 +15,21 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.listener; +package net.momirealms.customnameplates.listener.packet; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.ListenerPriority; import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketEvent; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.mode.PacketsHandler; +import net.momirealms.customnameplates.objects.nameplates.mode.PacketsHandler; public class EntityMountListener extends PacketAdapter { private final PacketsHandler handler; public EntityMountListener(PacketsHandler handler) { - super(CustomNameplates.instance, ListenerPriority.HIGHEST, PacketType.Play.Server.MOUNT); + super(CustomNameplates.plugin, ListenerPriority.HIGHEST, PacketType.Play.Server.MOUNT); this.handler = handler; } diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityMoveListener.java b/src/main/java/net/momirealms/customnameplates/listener/packet/EntityMoveListener.java similarity index 85% rename from src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityMoveListener.java rename to src/main/java/net/momirealms/customnameplates/listener/packet/EntityMoveListener.java index a3ef06a..d6a934a 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityMoveListener.java +++ b/src/main/java/net/momirealms/customnameplates/listener/packet/EntityMoveListener.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.listener; +package net.momirealms.customnameplates.listener.packet; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.ListenerPriority; @@ -23,14 +23,14 @@ import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketEvent; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.mode.PacketsHandler; +import net.momirealms.customnameplates.objects.nameplates.mode.PacketsHandler; public class EntityMoveListener extends PacketAdapter { private final PacketsHandler handler; public EntityMoveListener(PacketsHandler handler) { - super(CustomNameplates.instance, ListenerPriority.NORMAL, PacketType.Play.Server.REL_ENTITY_MOVE); + super(CustomNameplates.plugin, ListenerPriority.NORMAL, PacketType.Play.Server.REL_ENTITY_MOVE); this.handler = handler; } diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/listener/EntitySpawnListener.java b/src/main/java/net/momirealms/customnameplates/listener/packet/EntitySpawnListener.java similarity index 84% rename from src/main/java/net/momirealms/customnameplates/nameplates/listener/EntitySpawnListener.java rename to src/main/java/net/momirealms/customnameplates/listener/packet/EntitySpawnListener.java index 26e2859..c33eacb 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/listener/EntitySpawnListener.java +++ b/src/main/java/net/momirealms/customnameplates/listener/packet/EntitySpawnListener.java @@ -15,21 +15,21 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.listener; +package net.momirealms.customnameplates.listener.packet; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.ListenerPriority; import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketEvent; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.mode.PacketsHandler; +import net.momirealms.customnameplates.objects.nameplates.mode.PacketsHandler; public class EntitySpawnListener extends PacketAdapter { private final PacketsHandler handler; public EntitySpawnListener(PacketsHandler handler) { - super(CustomNameplates.instance, ListenerPriority.HIGHEST, PacketType.Play.Server.NAMED_ENTITY_SPAWN); + super(CustomNameplates.plugin, ListenerPriority.HIGHEST, PacketType.Play.Server.NAMED_ENTITY_SPAWN); this.handler = handler; } diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityTeleportListener.java b/src/main/java/net/momirealms/customnameplates/listener/packet/EntityTeleportListener.java similarity index 85% rename from src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityTeleportListener.java rename to src/main/java/net/momirealms/customnameplates/listener/packet/EntityTeleportListener.java index 847d42b..4edf0c7 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/listener/EntityTeleportListener.java +++ b/src/main/java/net/momirealms/customnameplates/listener/packet/EntityTeleportListener.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.listener; +package net.momirealms.customnameplates.listener.packet; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.ListenerPriority; @@ -23,14 +23,14 @@ import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketEvent; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.mode.PacketsHandler; +import net.momirealms.customnameplates.objects.nameplates.mode.PacketsHandler; public class EntityTeleportListener extends PacketAdapter { private final PacketsHandler handler; public EntityTeleportListener(PacketsHandler handler) { - super(CustomNameplates.instance, ListenerPriority.HIGHEST, PacketType.Play.Server.ENTITY_TELEPORT); + super(CustomNameplates.plugin, ListenerPriority.HIGHEST, PacketType.Play.Server.ENTITY_TELEPORT); this.handler = handler; } diff --git a/src/main/java/net/momirealms/customnameplates/manager/ActionBarManager.java b/src/main/java/net/momirealms/customnameplates/manager/ActionBarManager.java new file mode 100644 index 0000000..2b0cea0 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/manager/ActionBarManager.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.manager; + +import net.momirealms.customnameplates.objects.Function; +import net.momirealms.customnameplates.objects.actionbar.ActionBarConfig; +import net.momirealms.customnameplates.objects.actionbar.ActionBarTask; +import net.momirealms.customnameplates.objects.requirements.*; +import net.momirealms.customnameplates.utils.AdventureUtil; +import net.momirealms.customnameplates.utils.ConfigUtil; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + +public class ActionBarManager extends Function { + + private final HashSet tasks; + public HashMap actionBars; + + public ActionBarManager() { + this.tasks = new HashSet<>(); + this.actionBars = new HashMap<>(); + } + + @Override + public void load() { + if (!ConfigUtil.isModuleEnabled("actionbar")) return; + loadConfig(); + for (ActionBarConfig config : actionBars.values()) { + tasks.add(new ActionBarTask(config)); + } + } + + @Override + public void unload() { + for (ActionBarTask task : tasks) { + task.stop(); + } + tasks.clear(); + } + + private void loadConfig() { + actionBars.clear(); + YamlConfiguration config = ConfigUtil.getConfig("actionbar.yml"); + if (config.contains("actionbar")) { + for (String key : config.getConfigurationSection("actionbar").getKeys(false)) { + String[] texts; + String text = config.getString("actionbar." + key + ".text"); + if (text != null) { + texts = new String[]{text}; + } + else { + List strings = config.getStringList("actionbar." + key + ".dynamic-text"); + texts = strings.toArray(new String[0]); + } + List requirements = new ArrayList<>(); + if (config.contains("actionbar." + key + ".conditions")){ + config.getConfigurationSection("actionbar." + key + ".conditions").getKeys(false).forEach(requirement -> { + switch (requirement){ + case "weather" -> requirements.add(new Weather(config.getStringList("actionbar." + key + ".conditions.weather"))); + case "ypos" -> requirements.add(new YPos(config.getStringList("actionbar." + key + ".conditions.ypos"))); + case "world" -> requirements.add(new World(config.getStringList("actionbar." + key + ".conditions.world"))); + case "biome" -> requirements.add(new Biome(config.getStringList("actionbar." + key + ".conditions.biome"))); + case "permission" -> requirements.add(new Permission(config.getString("actionbar." + key + ".conditions.permission"))); + case "time" -> requirements.add(new Time(config.getStringList("actionbar." + key + ".conditions.time"))); + case "papi-condition" -> requirements.add(new CustomPapi(config.getConfigurationSection("actionbar." + key + ".conditions.papi-condition").getValues(false))); + } + }); + } + ActionBarConfig actionBarConfig = new ActionBarConfig( + config.getInt("actionbar." + key + ".refresh-rate", 5) - 1, + config.getInt("actionbar." + key + ".switch-interval", 15) * 20, + texts, + requirements + ); + actionBars.put(key, actionBarConfig); + } + AdventureUtil.consoleMessage("[CustomNameplates] Loaded " + actionBars.size() + " actionbars"); + } + } +} diff --git a/src/main/java/net/momirealms/customnameplates/manager/BossBarManager.java b/src/main/java/net/momirealms/customnameplates/manager/BossBarManager.java new file mode 100644 index 0000000..53c6a12 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/manager/BossBarManager.java @@ -0,0 +1,125 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.manager; + +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.listener.SimpleListener; +import net.momirealms.customnameplates.objects.Function; +import net.momirealms.customnameplates.objects.bossbar.BossBarConfig; +import net.momirealms.customnameplates.objects.bossbar.Overlay; +import net.momirealms.customnameplates.objects.bossbar.TimerTaskP; +import net.momirealms.customnameplates.objects.requirements.*; +import net.momirealms.customnameplates.utils.AdventureUtil; +import net.momirealms.customnameplates.utils.ConfigUtil; +import org.bukkit.Bukkit; +import org.bukkit.boss.BarColor; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.TreeMap; + +public class BossBarManager extends Function { + + private final SimpleListener simpleListener; + private final TreeMap bossBars; + private final HashMap taskCache; + + public BossBarManager() { + this.simpleListener = new SimpleListener(this); + this.taskCache = new HashMap<>(); + this.bossBars = new TreeMap<>(); + } + + @Override + public void load() { + if (!ConfigUtil.isModuleEnabled("bossbar")) return; + loadConfig(); + for (Player player : Bukkit.getOnlinePlayers()) { + taskCache.put(player, new TimerTaskP(player)); + } + Bukkit.getPluginManager().registerEvents(simpleListener, CustomNameplates.plugin); + } + + @Override + public void unload() { + for (TimerTaskP timerTask : taskCache.values()) { + timerTask.stopTimer(); + } + taskCache.clear(); + HandlerList.unregisterAll(simpleListener); + } + + public void onJoin(Player player) { + taskCache.put(player, new TimerTaskP(player)); + } + + public void onQuit(Player player) { + TimerTaskP timerTask = taskCache.remove(player); + if (timerTask != null){ + timerTask.stopTimer(); + } + } + + private void loadConfig() { + bossBars.clear(); + YamlConfiguration config = ConfigUtil.getConfig("bossbar.yml"); + config.getConfigurationSection("bossbar").getKeys(false).forEach(key -> { + String[] texts; + String text = config.getString("bossbar." + key + ".text"); + if (text != null) { + texts = new String[]{text}; + } + else { + List strings = config.getStringList("bossbar." + key + ".dynamic-text"); + texts = strings.toArray(new String[0]); + } + List requirements = new ArrayList<>(); + if (config.contains("bossbar." + key + ".conditions")){ + config.getConfigurationSection("bossbar." + key + ".conditions").getKeys(false).forEach(requirement -> { + switch (requirement){ + case "weather" -> requirements.add(new Weather(config.getStringList("bossbar." + key + ".conditions.weather"))); + case "ypos" -> requirements.add(new YPos(config.getStringList("bossbar." + key + ".conditions.ypos"))); + case "world" -> requirements.add(new World(config.getStringList("bossbar." + key + ".conditions.world"))); + case "biome" -> requirements.add(new Biome(config.getStringList("bossbar." + key + ".conditions.biome"))); + case "permission" -> requirements.add(new Permission(config.getString("bossbar." + key + ".conditions.permission"))); + case "time" -> requirements.add(new Time(config.getStringList("bossbar." + key + ".conditions.time"))); + case "papi-condition" -> requirements.add(new CustomPapi(config.getConfigurationSection("bossbar." + key + ".conditions.papi-condition").getValues(false))); + } + }); + } + BossBarConfig bossBarConfig = new BossBarConfig( + texts, + Overlay.valueOf(config.getString("bossbar."+key+".overlay","progress").toUpperCase()), + BarColor.valueOf(config.getString("bossbar."+key+".color","white").toUpperCase()), + config.getInt("bossbar." + key + ".refresh-rate", 15) - 1, + config.getInt("bossbar." + key + ".switch-interval", 5) * 20, + requirements + ); + bossBars.put(key, bossBarConfig); + }); + AdventureUtil.consoleMessage("[CustomNameplates] Loaded " + bossBars.size() + " bossbars"); + } + + public TreeMap getBossBars() { + return bossBars; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/manager/ChatBubblesManager.java b/src/main/java/net/momirealms/customnameplates/manager/ChatBubblesManager.java new file mode 100644 index 0000000..6e33158 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/manager/ChatBubblesManager.java @@ -0,0 +1,195 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.manager; + +import com.comphenix.protocol.wrappers.WrappedChatComponent; +import net.kyori.adventure.key.Key; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.api.events.BubblesEvent; +import net.momirealms.customnameplates.hook.IAImageHook; +import net.momirealms.customnameplates.hook.ImageParser; +import net.momirealms.customnameplates.hook.OXImageHook; +import net.momirealms.customnameplates.listener.ChatListener; +import net.momirealms.customnameplates.listener.TrChatListener; +import net.momirealms.customnameplates.objects.nameplates.ArmorStandManager; +import net.momirealms.customnameplates.objects.nameplates.BubbleConfig; +import net.momirealms.customnameplates.objects.nameplates.FakeArmorStand; +import net.momirealms.customnameplates.objects.nameplates.mode.EntityTag; +import net.momirealms.customnameplates.objects.nameplates.mode.bubbles.BBPacketsHandle; +import net.momirealms.customnameplates.utils.ConfigUtil; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +import java.util.HashMap; +import java.util.UUID; + +public class ChatBubblesManager extends EntityTag { + + private final BBPacketsHandle packetsHandle; + private ChatListener chatListener; + private TrChatListener trChatListener; + private ImageParser imageParser; + public static String defaultBubble; + public static String defaultFormat; + public static String prefix; + public static String suffix; + public static double lineSpace; + public static double yOffset; + public static int stayTime; + public static int coolDown; + public static int maxChar; + public static String[] channels; + + private final HashMap coolDownCache = new HashMap<>(); + + public ChatBubblesManager() { + super(null); + this.packetsHandle = new BBPacketsHandle(this); + } + + @Override + public void load() { + ConfigUtil.update("bubble.yml"); + YamlConfiguration config = ConfigUtil.getConfig("bubble.yml"); + defaultBubble = config.getString("bubble.default-bubbles", "none"); + + if (!ConfigUtil.isModuleEnabled("bubbles")) return; + + prefix = config.getString("bubble.text-prefix", ""); + suffix = config.getString("bubble.text-suffix", ""); + lineSpace = config.getDouble("bubble.line-spacing"); + defaultFormat = config.getString("bubble.default-format", ""); + yOffset = config.getDouble("bubble.bottom-line-Y-offset"); + stayTime = config.getInt("bubble.stay-time", 5); + coolDown = config.getInt("bubble.cool-down", 1) * 1000; + maxChar = config.getInt("bubble.max-char-length", 35); + channels = config.getStringList("blacklist-channels").toArray(new String[0]); + + this.packetsHandle.load(); + + if (ConfigManager.trChat_Hook) { + this.trChatListener = new TrChatListener(this); + Bukkit.getPluginManager().registerEvents(trChatListener, CustomNameplates.plugin); + } + else { + this.chatListener = new ChatListener(this); + Bukkit.getPluginManager().registerEvents(chatListener, CustomNameplates.plugin); + } + + if (Bukkit.getPluginManager().getPlugin("Oraxen") != null) { + this.imageParser = new OXImageHook(); + } + if (Bukkit.getPluginManager().getPlugin("ItemsAdder") != null) { + this.imageParser = new IAImageHook(); + } + + for (Player all : Bukkit.getOnlinePlayers()) { + armorStandManagerMap.put(all, new ArmorStandManager(all)); + for (Player player : Bukkit.getOnlinePlayers()) + spawnArmorStands(player, all, false); + } + } + + @Override + public void unload() { + super.unload(); + this.packetsHandle.unload(); + this.imageParser = null; + if (chatListener != null) { + HandlerList.unregisterAll(chatListener); + chatListener = null; + } + if (trChatListener != null) { + HandlerList.unregisterAll(trChatListener); + trChatListener = null; + } + } + + public ArmorStandManager getArmorStandManager(Player player) { + return armorStandManagerMap.get(player); + } + + @Override + public void onJoin(Player player) { + super.onJoin(player); + } + + @Override + public void addDefaultText(ArmorStandManager asm) { + //empty + } + + @Override + public void onQuit(Player player) { + super.onQuit(player); + coolDownCache.remove(player); + } + + public void onChat(Player player, String text) { + + if (player.getGameMode() == GameMode.SPECTATOR || !player.hasPermission("bubbles.use")) return; + + long time = System.currentTimeMillis(); + if (time - (coolDownCache.getOrDefault(player, time - coolDown)) < coolDown) return; + coolDownCache.put(player, time); + + String bubbles = CustomNameplates.plugin.getDataManager().getPlayerData(player).getBubbles(); + if (imageParser != null) text = imageParser.parse(player, text); + + BubblesEvent bubblesEvent = new BubblesEvent(player, bubbles, text); + Bukkit.getPluginManager().callEvent(bubblesEvent); + if (bubblesEvent.isCancelled()) { + return; + } + + BubbleConfig bubbleConfig = ResourceManager.BUBBLES.get(bubblesEvent.getBubble()); + WrappedChatComponent wrappedChatComponent; + + if (bubbleConfig == null || bubblesEvent.getBubble().equals("none")) { + text = MiniMessage.miniMessage().stripTags(text); + text = CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(player, ChatBubblesManager.prefix) + ChatBubblesManager.defaultFormat + text + CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(player, ChatBubblesManager.suffix); + if (text.length() > ChatBubblesManager.maxChar) return; + wrappedChatComponent = WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize(text))); + } + else { + text = CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(player, ChatBubblesManager.prefix) + bubbleConfig.format() + text + CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(player, ChatBubblesManager.suffix); + String stripped = MiniMessage.miniMessage().stripTags(text); + if (stripped.length() > ChatBubblesManager.maxChar) return; + + String bubble = CustomNameplates.plugin.getNameplateManager().makeCustomBubble("", stripped, "", bubbleConfig); + String suffix = CustomNameplates.plugin.getNameplateManager().getSuffixChar(stripped); + Component armorStand_Name = Component.text(bubble).font(ConfigManager.key) + .append(MiniMessage.miniMessage().deserialize(text).font(Key.key("minecraft:default"))) + .append(Component.text(suffix).font(ConfigManager.key)); + wrappedChatComponent = WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(armorStand_Name)); + } + + ArmorStandManager asm = getArmorStandManager(player); + asm.ascent(); + String name = UUID.randomUUID().toString(); + FakeArmorStand fakeArmorStand = new FakeArmorStand(asm, player, wrappedChatComponent); + asm.addArmorStand(name, fakeArmorStand); + asm.countdown(name, fakeArmorStand); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/manager/ConfigManager.java b/src/main/java/net/momirealms/customnameplates/manager/ConfigManager.java new file mode 100644 index 0000000..886e86f --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/manager/ConfigManager.java @@ -0,0 +1,73 @@ +package net.momirealms.customnameplates.manager; + +import net.kyori.adventure.key.Key; +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.objects.Function; +import net.momirealms.customnameplates.utils.ConfigUtil; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.util.List; + +public class ConfigManager extends Function { + + public static String namespace; + public static String fontName; + public static String start_char; + public static String lang; + public static String np_folder_path; + public static String bg_folder_path; + public static String ss_folder_path; + public static String bb_folder_path; + public static String font; + public static boolean itemsAdderHook; + public static boolean thin_font; + public static boolean tab_hook; + public static boolean tab_BC_hook; + public static boolean oraxenHook; + public static boolean extract; + public static boolean trChat_Hook; + public static List offsets; + public static char start; + public static Key key; + + public ConfigManager() { + load(); + } + + public void load(){ + ConfigUtil.update("config.yml"); + YamlConfiguration config = ConfigUtil.getConfig("config.yml"); + lang = config.getString("config.lang"); + namespace = config.getString("config.namespace"); + font = config.getString("config.font"); + fontName = namespace + ":" + font; + start_char = config.getString("config.start-char"); + assert start_char != null; + start = start_char.charAt(0); + np_folder_path = config.getString("config.nameplate-folder-path","font\\nameplates\\"); + bb_folder_path = config.getString("config.bubble-folder-path","font\\bubbles\\"); + bg_folder_path = config.getString("config.background-folder-path","font\\backgrounds\\"); + ss_folder_path = config.getString("config.space-split-folder-path","font\\"); + key = Key.key(fontName); + thin_font = config.getBoolean("config.use-thin-font",false); + itemsAdderHook = config.getBoolean("config.integrations.ItemsAdder",false); + if (itemsAdderHook && Bukkit.getPluginManager().getPlugin("ItemsAdder") == null) itemsAdderHook = false; + tab_hook = config.getBoolean("config.integrations.TAB",false); + tab_BC_hook = config.getBoolean("config.integrations.TAB-BC",false); + oraxenHook = config.getBoolean("config.integrations.Oraxen",false); + if (oraxenHook && Bukkit.getPluginManager().getPlugin("Oraxen") == null) oraxenHook = false; + trChat_Hook = config.getBoolean("config.integrations.TrChat",false); + offsets = config.getIntegerList("config.ascii-y-offset.offset"); + extract = config.getBoolean("config.extract-shader",true); + + if (tab_hook && Bukkit.getPluginManager().getPlugin("TAB") == null) { + tab_hook = false; + } + + if (trChat_Hook && CustomNameplates.plugin.getServer().getPluginManager().getPlugin("TrChat") == null){ + CustomNameplates.plugin.getLogger().warning("Failed to initialize TrChat!"); + trChat_Hook = false; + } + } +} diff --git a/src/main/java/net/momirealms/customnameplates/manager/DataManager.java b/src/main/java/net/momirealms/customnameplates/manager/DataManager.java new file mode 100644 index 0000000..d9793a3 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/manager/DataManager.java @@ -0,0 +1,80 @@ +package net.momirealms.customnameplates.manager; + +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.listener.SimpleListener; +import net.momirealms.customnameplates.objects.Function; +import net.momirealms.customnameplates.objects.data.DataStorageInterface; +import net.momirealms.customnameplates.objects.data.FileStorageImpl; +import net.momirealms.customnameplates.objects.data.MySQLStorageImpl; +import net.momirealms.customnameplates.objects.data.PlayerData; +import net.momirealms.customnameplates.utils.AdventureUtil; +import net.momirealms.customnameplates.utils.ConfigUtil; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class DataManager extends Function { + + private final ConcurrentHashMap playerDataCache; + private final SimpleListener simpleListener; + private final DataStorageInterface dataStorageInterface; + + public DataManager() { + this.playerDataCache = new ConcurrentHashMap<>(); + this.simpleListener = new SimpleListener(this); + ConfigUtil.update("database.yml"); + YamlConfiguration config = ConfigUtil.getConfig("database.yml"); + if (config.getString("data-storage-method","YAML").equalsIgnoreCase("YAML")) { + this.dataStorageInterface = new FileStorageImpl(); + AdventureUtil.consoleMessage("[CustomNameplates] Storage Mode: YAML"); + } else this.dataStorageInterface = new MySQLStorageImpl(); + this.dataStorageInterface.initialize(); + } + + @NotNull + public PlayerData getPlayerData(OfflinePlayer player) { + PlayerData playerData = playerDataCache.get(player.getUniqueId()); + if (playerData != null) { + return playerData; + } + return new PlayerData(player, NameplateManager.defaultNameplate, ChatBubblesManager.defaultBubble); + } + + @Override + public void load() { + Bukkit.getPluginManager().registerEvents(simpleListener, CustomNameplates.plugin); + } + + @Override + public void unload() { + HandlerList.unregisterAll(simpleListener); + } + + public void disable() { + unload(); + this.playerDataCache.clear(); + this.dataStorageInterface.disable(); + } + + @Override + public void onJoin(Player player) { + Bukkit.getScheduler().runTaskAsynchronously(CustomNameplates.plugin, () -> { + PlayerData playerData = dataStorageInterface.loadData(player); + playerDataCache.put(player.getUniqueId(), playerData); + //wait + if (ConfigUtil.isModuleEnabled("nameplate")) { + CustomNameplates.plugin.getNameplateManager().getTeamManager().createTeam(player); + } + }); + } + + public void saveData(Player player) { + this.dataStorageInterface.saveData(getPlayerData(player)); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/manager/MessageManager.java b/src/main/java/net/momirealms/customnameplates/manager/MessageManager.java new file mode 100644 index 0000000..f61538a --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/manager/MessageManager.java @@ -0,0 +1,78 @@ +package net.momirealms.customnameplates.manager; + +import net.momirealms.customnameplates.objects.Function; +import net.momirealms.customnameplates.utils.ConfigUtil; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; + +public class MessageManager extends Function { + + public static String noPerm; + public static String prefix; + public static String lackArgs; + public static String reload; + public static String not_online; + public static String no_console; + public static String coolDown; + public static String preview; + public static String generate; + public static String noNameplate; + public static String generateDone; + + public static String np_equip; + public static String np_unEquip; + public static String np_force_equip; + public static String np_force_unEquip; + public static String np_not_exist; + public static String np_notAvailable; + public static String np_available; + public static String np_haveNone; + + public static String bb_equip; + public static String bb_unEquip; + public static String bb_force_equip; + public static String bb_force_unEquip; + public static String bb_not_exist; + public static String bb_notAvailable; + public static String bb_available; + public static String bb_haveNone; + public static String nonArgs; + public static String unavailableArgs; + + @Override + public void load(){ + YamlConfiguration config = ConfigUtil.getConfig("messages" + File.separator + ConfigManager.lang +".yml"); + noPerm = config.getString("messages.no-perm"); + prefix = config.getString("messages.prefix"); + lackArgs = config.getString("messages.lack-args"); + reload = config.getString("messages.reload"); + coolDown = config.getString("messages.cooldown"); + preview = config.getString("messages.preview"); + generate = config.getString("messages.generate"); + generateDone = config.getString("messages.generate-done"); + noNameplate = config.getString("messages.no-nameplate"); + not_online = config.getString("messages.not-online"); + no_console = config.getString("messages.no-console"); + nonArgs = config.getString("messages.none-args"); + unavailableArgs = config.getString("messages.invalid-args"); + + np_equip = config.getString("messages.equip-nameplates"); + np_unEquip = config.getString("messages.unequip-nameplates"); + np_force_equip = config.getString("messages.force-equip-nameplates"); + np_force_unEquip = config.getString("messages.force-unequip-nameplates"); + np_not_exist = config.getString("messages.not-exist-nameplates"); + np_notAvailable = config.getString("messages.not-available-nameplates"); + np_available = config.getString("messages.available-nameplates"); + np_haveNone = config.getString("messages.have-no-nameplates"); + + bb_equip = config.getString("messages.equip-bubbles"); + bb_unEquip = config.getString("messages.unequip-bubbles"); + bb_force_equip = config.getString("messages.force-equip-bubbles"); + bb_force_unEquip = config.getString("messages.force-unequip-bubbles"); + bb_not_exist = config.getString("messages.not-exist-bubbles"); + bb_notAvailable = config.getString("messages.not-available-bubbles"); + bb_available = config.getString("messages.available-bubbles"); + bb_haveNone = config.getString("messages.have-no-bubbles"); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/manager/NameplateManager.java b/src/main/java/net/momirealms/customnameplates/manager/NameplateManager.java new file mode 100644 index 0000000..5b89f9c --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/manager/NameplateManager.java @@ -0,0 +1,174 @@ +package net.momirealms.customnameplates.manager; + +import codecrafter47.bungeetablistplus.config.MainConfig; +import net.momirealms.customnameplates.objects.Function; +import net.momirealms.customnameplates.objects.SimpleChar; +import net.momirealms.customnameplates.objects.font.FontOffset; +import net.momirealms.customnameplates.objects.font.FontUtil; +import net.momirealms.customnameplates.objects.nameplates.BubbleConfig; +import net.momirealms.customnameplates.objects.nameplates.NameplateConfig; +import net.momirealms.customnameplates.objects.nameplates.NameplateMode; +import net.momirealms.customnameplates.objects.nameplates.mode.rd.RidingTag; +import net.momirealms.customnameplates.objects.nameplates.mode.tm.TeamTag; +import net.momirealms.customnameplates.objects.nameplates.mode.tp.TeleportingTag; +import net.momirealms.customnameplates.utils.ConfigUtil; +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; + +import java.util.HashMap; +import java.util.List; + +public class NameplateManager extends Function { + + public static String defaultNameplate; + public static String player_prefix; + public static String player_suffix; + public static String player_name; + public static long preview; + public static boolean update; + public static int refresh; + public static String mode; + public static boolean hidePrefix; + public static boolean hideSuffix; + public static boolean tryHook; + public static boolean removeTag; + public static boolean smallSize; + public static boolean fakeTeam; + private final HashMap textMap = new HashMap<>(); + private NameplateMode nameplateMode; + private final TeamManager teamManager; + + public NameplateManager() { + this.teamManager = new TeamManager(); + } + + @Override + public void load() { + YamlConfiguration config = ConfigUtil.getConfig("nameplate.yml"); + defaultNameplate = config.getString("nameplate.default-nameplate"); + + if (!ConfigUtil.isModuleEnabled("nameplate")) return; + + player_name = config.getString("nameplate.player-name", "%player_name%"); + preview = config.getLong("nameplate.preview-duration"); + mode = config.getString("nameplate.mode","team"); + update = config.getBoolean("nameplate.update.enable",true); + fakeTeam = config.getBoolean("nameplate.create-fake-team",true); + refresh = config.getInt("nameplate.update.ticks",20); + player_prefix = config.getString("nameplate.prefix",""); + player_suffix = config.getString("nameplate.suffix",""); + hidePrefix = config.getBoolean("nameplate.team.hide-prefix-when-equipped",true); + hideSuffix = config.getBoolean("nameplate.team.hide-suffix-when-equipped",true); + + if (ConfigManager.tab_hook || ConfigManager.tab_BC_hook) fakeTeam = true; + teamManager.load(); + + if (mode.equalsIgnoreCase("team")) { + removeTag = false; + nameplateMode = new TeamTag(teamManager); + } + else if (mode.equalsIgnoreCase("riding")) { + tryHook = config.getBoolean("nameplate.riding.try-to-hook-cosmetics-plugin", false); + List texts = config.getStringList("nameplate.riding.text"); + textMap.clear(); + for (String text : texts) { + textMap.put(text, -0.1); + } + smallSize = config.getBoolean("nameplate.riding.small-height", true); + removeTag = config.getBoolean("nameplate.riding.remove-nametag"); + nameplateMode = new RidingTag(teamManager); + } + else if (mode.equalsIgnoreCase("teleporting")) { + removeTag = config.getBoolean("nameplate.teleporting.remove-nametag"); + smallSize = config.getBoolean("nameplate.teleporting.small-height", true); + textMap.clear(); + for (String key : config.getConfigurationSection("nameplate.teleporting.text").getKeys(false)) { + textMap.put(config.getString("nameplate.teleporting.text." + key + ".content"), config.getDouble("nameplate.teleporting.text." + key + ".offset")); + } + nameplateMode = new TeleportingTag(teamManager); + } + nameplateMode.load(); + } + + @Override + public void unload() { + if (nameplateMode != null) nameplateMode.unload(); + teamManager.unload(); + } + + public HashMap getTextMap() { + return textMap; + } + + public TeamManager getTeamManager() { + return teamManager; + } + + + public String makeCustomNameplate(String prefix, String name, String suffix, NameplateConfig nameplate) { + int totalWidth = FontUtil.getTotalWidth(ChatColor.stripColor(prefix + name + suffix)); + char middle = nameplate.middle().getChars(); + char neg_1 = FontOffset.NEG_1.getCharacter(); + int offset_2 = nameplate.right().getWidth() - nameplate.middle().getWidth(); + int left_offset = totalWidth + (nameplate.left().getWidth() + nameplate.right().getWidth())/2 + 1; + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(FontOffset.getShortestNegChars(totalWidth % 2 == 0 ? left_offset : left_offset + 1 )); + stringBuilder.append(nameplate.left().getChars()).append(neg_1); + int mid_amount = (totalWidth + 1 + offset_2) / (nameplate.middle().getWidth()); + if (mid_amount == 0) { + stringBuilder.append(middle).append(neg_1); + } + else { + for (int i = 0; i < mid_amount; i++) { + stringBuilder.append(middle).append(neg_1); + } + } + return getString(totalWidth, middle, neg_1, offset_2, left_offset, stringBuilder, nameplate.right(), nameplate.middle()); + } + + public String getSuffixChar(String name) { + int totalWidth = FontUtil.getTotalWidth(ChatColor.stripColor(name)); + return FontOffset.getShortestNegChars(totalWidth + totalWidth % 2 + 1); + } + + public String makeCustomBubble(String prefix, String name, String suffix, BubbleConfig bubble) { + int totalWidth = FontUtil.getTotalWidth(ChatColor.stripColor(prefix + name + suffix)); + char middle = bubble.middle().getChars(); + char tail = bubble.tail().getChars(); + char neg_1 = FontOffset.NEG_1.getCharacter(); + int offset = bubble.middle().getWidth() - bubble.tail().getWidth(); + int left_offset = totalWidth + bubble.left().getWidth() + 1; + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(FontOffset.getShortestNegChars(totalWidth % 2 == 0 ? left_offset - offset : left_offset + 1 - offset)); + stringBuilder.append(bubble.left().getChars()).append(neg_1); + int mid_amount = (totalWidth + 1 - bubble.tail().getWidth()) / (bubble.middle().getWidth()); + if (mid_amount == 0) { + stringBuilder.append(tail).append(neg_1); + } + else { + for (int i = 0; i <= mid_amount; i++) { + if (i == mid_amount/2) { + stringBuilder.append(tail).append(neg_1); + } + else { + stringBuilder.append(middle).append(neg_1); + } + } + } + return getString(totalWidth, middle, neg_1, offset, left_offset, stringBuilder, bubble.right(), bubble.middle()); + } + + @NotNull + protected String getString(int totalWidth, char middle, char neg_1, int offset, int left_offset, StringBuilder stringBuilder, SimpleChar right, SimpleChar middle2) { + stringBuilder.append(FontOffset.getShortestNegChars(right.getWidth() - ((totalWidth + 1 + offset) % middle2.getWidth() + (totalWidth % 2 == 0 ? 0 : -1)))); + stringBuilder.append(middle).append(neg_1); + stringBuilder.append(right.getChars()).append(neg_1); + stringBuilder.append(FontOffset.getShortestNegChars(left_offset - 1)); + return stringBuilder.toString(); + } + + public NameplateMode getNameplateMode() { + return nameplateMode; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/manager/PlaceholderManager.java b/src/main/java/net/momirealms/customnameplates/manager/PlaceholderManager.java new file mode 100644 index 0000000..8ebcc4c --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/manager/PlaceholderManager.java @@ -0,0 +1,109 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.manager; + +import me.clip.placeholderapi.PlaceholderAPI; +import net.momirealms.customnameplates.hook.NameplatePlaceholders; +import net.momirealms.customnameplates.hook.OffsetPlaceholders; +import net.momirealms.customnameplates.objects.Function; +import net.momirealms.customnameplates.objects.StaticText; +import net.momirealms.customnameplates.objects.background.BackGroundText; +import net.momirealms.customnameplates.objects.nameplates.NameplateText; +import net.momirealms.customnameplates.utils.ConfigUtil; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class PlaceholderManager extends Function { + + private final NameplatePlaceholders nameplatePlaceholders; + private final OffsetPlaceholders offsetPlaceholders; + + private final HashMap papiBG; + private final HashMap papiNP; + private final HashMap papiST; + + public PlaceholderManager() { + this.papiBG = new HashMap<>(); + this.papiNP = new HashMap<>(); + this.papiST = new HashMap<>(); + this.nameplatePlaceholders = new NameplatePlaceholders(this); + this.offsetPlaceholders = new OffsetPlaceholders(); + } + + @Override + public void load() { + loadPapi(); + this.nameplatePlaceholders.register(); + this.offsetPlaceholders.register(); + } + + @Override + public void unload() { + this.nameplatePlaceholders.unregister(); + this.offsetPlaceholders.unregister(); + } + + public String parsePlaceholders(Player player, String papi) { + if (papi == null || papi.equals("")) return ""; + return PlaceholderAPI.setPlaceholders(player, papi); + } + + private final Pattern placeholderPattern = Pattern.compile("%([^%]*)%"); + + public List detectPlaceholders(String text){ + if (text == null || !text.contains("%")) return Collections.emptyList(); + List placeholders = new ArrayList<>(); + Matcher matcher = placeholderPattern.matcher(text); + while (matcher.find()) placeholders.add(matcher.group()); + return placeholders; + } + + public void loadPapi() { + papiBG.clear(); + papiNP.clear(); + papiST.clear(); + YamlConfiguration papiInfo = ConfigUtil.getConfig("custom-papi.yml"); + papiInfo.getConfigurationSection("papi").getKeys(false).forEach(key -> { + if (papiInfo.contains("papi." + key + ".background")) + papiBG.put(key, new BackGroundText(papiInfo.getString("papi." + key + ".text"), papiInfo.getString("papi." + key + ".background"))); + if (papiInfo.contains("papi." + key + ".nameplate")) + papiNP.put(key, new NameplateText(papiInfo.getString("papi." + key + ".text"), papiInfo.getString("papi." + key + ".nameplate"))); + if (papiInfo.contains("papi." + key + ".static")) + papiST.put(key, new StaticText(papiInfo.getString("papi." + key + ".text"), papiInfo.getInt("papi." + key + ".static"))); + }); + } + + public HashMap getPapiBG() { + return papiBG; + } + + public HashMap getPapiNP() { + return papiNP; + } + + public HashMap getPapiST() { + return papiST; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/manager/ResourceManager.java b/src/main/java/net/momirealms/customnameplates/manager/ResourceManager.java new file mode 100644 index 0000000..68d1fe1 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/manager/ResourceManager.java @@ -0,0 +1,479 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.manager; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.objects.SimpleChar; +import net.momirealms.customnameplates.objects.background.BackGround; +import net.momirealms.customnameplates.objects.font.FontOffset; +import net.momirealms.customnameplates.objects.nameplates.BubbleConfig; +import net.momirealms.customnameplates.objects.nameplates.NameplateConfig; +import net.momirealms.customnameplates.utils.AdventureUtil; +import net.momirealms.customnameplates.utils.ConfigUtil; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.*; + +public class ResourceManager { + + public static HashMap NAMEPLATES; + public static HashMap BUBBLES; + public static HashMap BACKGROUNDS; + + public void generateResourcePack() { + File gd_file = new File(CustomNameplates.plugin.getDataFolder() + File.separator + "ResourcePack"); + deleteDirectory(gd_file); + File font_file = new File(CustomNameplates.plugin.getDataFolder() + File.separator + "ResourcePack" + File.separatorChar + ConfigManager.namespace + File.separatorChar + "font"); + File textures_file = new File(CustomNameplates.plugin.getDataFolder() + File.separator + "ResourcePack" + File.separatorChar + ConfigManager.namespace + File.separatorChar + "textures"); + if (!font_file.mkdirs() || !textures_file.mkdirs()) { + AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to generate resource pack folders..."); + return; + } + saveSplit(textures_file.getPath()); + JsonObject jsonObject_default = new JsonObject(); + JsonArray jsonArray_default = new JsonArray(); + jsonObject_default.add("providers", jsonArray_default); + getOffsetFontEnums().forEach(jsonArray_default::add); + loadNameplates(jsonArray_default, textures_file); + loadBubbles(jsonArray_default, textures_file); + loadBackgrounds(jsonArray_default, textures_file); + extractShaders(); + saveOffsets(); + try (FileWriter fileWriter = new FileWriter( + CustomNameplates.plugin.getDataFolder() + + File.separator + "ResourcePack" + + File.separator + ConfigManager.namespace + + File.separator + "font" + + File.separator + ConfigManager.font + ".json")) + { + fileWriter.write(jsonObject_default.toString().replace("\\\\", "\\")); + } + catch (IOException e) { + AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to generate font json..."); + } + if (NAMEPLATES != null) AdventureUtil.consoleMessage("[CustomNameplates] Loaded " + (NAMEPLATES.size() -1) + " nameplates"); + if (BUBBLES != null) AdventureUtil.consoleMessage("[CustomNameplates] Loaded " + BUBBLES.size() + " bubbles"); + if (BACKGROUNDS != null) AdventureUtil.consoleMessage("[CustomNameplates] Loaded " + BACKGROUNDS.size() + " backgrounds"); + hookCopy(gd_file); + } + + private void loadNameplates(JsonArray jsonArray_default, File textures_file) { + if (!ConfigUtil.isModuleEnabled("nameplate")) return; + File np_file = new File(CustomNameplates.plugin.getDataFolder() + File.separator + "nameplates"); + if (!np_file.exists()) { + if (!np_file.mkdir()) return; + saveDefaultNameplates(); + } + File[] np_config_files = np_file.listFiles(file -> file.getName().endsWith(".yml")); + if (np_config_files == null) return; + Arrays.sort(np_config_files); + NAMEPLATES = new HashMap<>(); + NAMEPLATES.put("none", NameplateConfig.EMPTY); + for (File np_config_file : np_config_files) { + char left = ConfigManager.start; + char middle; + char right; + ConfigManager.start = (char) ((right = (char) ((middle = (char) (ConfigManager.start + '\u0001')) + '\u0001')) + '\u0001'); + try { + String key = np_config_file.getName().substring(0, np_config_file.getName().length() - 4); + YamlConfiguration config = YamlConfiguration.loadConfiguration(np_config_file); + if (!config.contains("display-name")) config.set("display-name", key); + if (!config.contains("name-color")) config.set("name-color", "white"); + if (!config.contains("left.image")) config.set("left.image", key + "_left"); + if (!config.contains("left.height")) config.set("left.height", 16); + if (!config.contains("left.ascent")) config.set("left.ascent", 12); + if (!config.contains("left.width")) config.set("left.width", 16); + if (!config.contains("middle.image")) config.set("middle.image", key + "_middle"); + if (!config.contains("middle.height")) config.set("middle.height", 16); + if (!config.contains("middle.ascent")) config.set("middle.ascent", 12); + if (!config.contains("middle.width")) config.set("middle.width", 16); + if (!config.contains("right.image")) config.set("right.image", key + "_right"); + if (!config.contains("right.height")) config.set("right.height", 16); + if (!config.contains("right.ascent")) config.set("right.ascent", 12); + if (!config.contains("right.width")) config.set("right.width", 16); + SimpleChar leftChar = new SimpleChar(config.getInt("left.height"), config.getInt("left.ascent"), config.getInt("left.width"), left, config.getString("left.image") + ".png"); + SimpleChar middleChar = new SimpleChar(config.getInt("middle.height"), config.getInt("middle.ascent"), config.getInt("middle.width"), middle, config.getString("middle.image") + ".png"); + SimpleChar rightChar = new SimpleChar(config.getInt("right.height"), config.getInt("right.ascent"), config.getInt("right.width"), right, config.getString("right.image") + ".png"); + ChatColor color = ChatColor.valueOf(Objects.requireNonNull(config.getString("color", "WHITE")).toUpperCase()); + config.save(np_config_file); + NameplateConfig nameplateConfig = new NameplateConfig(color, config.getString("display-name"), leftChar, middleChar, rightChar); + NAMEPLATES.put(key, nameplateConfig); + SimpleChar[] simpleChars = new SimpleChar[]{leftChar, middleChar, rightChar}; + for (SimpleChar simpleChar : simpleChars) { + JsonObject jo_np = new JsonObject(); + jo_np.add("type", new JsonPrimitive("bitmap")); + jo_np.add("file", new JsonPrimitive(ConfigManager.namespace + ":" + ConfigManager.np_folder_path.replaceAll("\\\\", "/") + simpleChar.getFile())); + jo_np.add("ascent", new JsonPrimitive(simpleChar.getAscent())); + jo_np.add("height", new JsonPrimitive(simpleChar.getHeight())); + JsonArray ja_simple = new JsonArray(); + ja_simple.add(native2ascii(simpleChar.getChars())); + jo_np.add("chars", ja_simple); + jsonArray_default.add(jo_np); + try { + FileUtils.copyFile(new File(np_config_file.getParent() + File.separator + simpleChar.getFile()), new File(textures_file.getPath() + File.separatorChar + StringUtils.replace(ConfigManager.np_folder_path, "\\", File.separator) + simpleChar.getFile())); + } catch (IOException e) { + AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to copy nameplate " + key + " png files to resource pack..."); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + private void loadBubbles(JsonArray jsonArray_default, File textures_file) { + if (!ConfigUtil.isModuleEnabled("bubbles")) return; + File bb_file = new File(CustomNameplates.plugin.getDataFolder() + File.separator + "bubbles"); + if (!bb_file.exists()) { + if (!bb_file.mkdir()) return; + saveDefaultBubbles(); + } + BUBBLES = new HashMap<>(); + File[] bb_config_files = bb_file.listFiles(file -> file.getName().endsWith(".yml")); + if (bb_config_files == null) return; + Arrays.sort(bb_config_files); + for (File bb_config_file : bb_config_files) { + char left = ConfigManager.start; + char middle; + char right; + char tail; + ConfigManager.start = (char) ((tail = (char)((right = (char)((middle = (char)(ConfigManager.start + '\u0001')) + '\u0001')) + '\u0001')) + '\u0001'); + try { + String key = bb_config_file.getName().substring(0, bb_config_file.getName().length() - 4); + YamlConfiguration config = YamlConfiguration.loadConfiguration(bb_config_file); + if (!config.contains("display-name")) config.set("display-name", key); + if (!config.contains("text-format")) config.set("text-format", ""); + if (!config.contains("left.image")) config.set("left.image", key + "_left"); + if (!config.contains("left.height")) config.set("left.height", 16); + if (!config.contains("left.width")) config.set("left.width", 16); + if (!config.contains("left.ascent")) config.set("left.ascent", 12); + if (!config.contains("middle.image")) config.set("middle.image", key + "_middle"); + if (!config.contains("middle.height")) config.set("middle.height", 16); + if (!config.contains("middle.width")) config.set("middle.width", 16); + if (!config.contains("middle.ascent")) config.set("middle.ascent", 12); + if (!config.contains("right.image")) config.set("right.image", key + "_right"); + if (!config.contains("right.height")) config.set("right.height", 16); + if (!config.contains("right.width")) config.set("right.width", 16); + if (!config.contains("right.ascent")) config.set("right.ascent", 12); + if (!config.contains("tail.image")) config.set("tail.image", key + "_tail"); + if (!config.contains("tail.height")) config.set("tail.height", 16); + if (!config.contains("tail.width")) config.set("tail.width", 16); + if (!config.contains("tail.ascent")) config.set("tail.ascent", 12); + SimpleChar leftChar = new SimpleChar(config.getInt("left.height"), config.getInt("left.ascent"), config.getInt("left.width"), left, config.getString("left.image") + ".png"); + SimpleChar middleChar = new SimpleChar(config.getInt("middle.height"), config.getInt("middle.ascent"), config.getInt("middle.width"), middle, config.getString("middle.image") + ".png"); + SimpleChar rightChar = new SimpleChar(config.getInt("right.height"), config.getInt("right.ascent"), config.getInt("right.width"), right, config.getString("right.image") + ".png"); + SimpleChar tailChar = new SimpleChar(config.getInt("tail.height"), config.getInt("tail.ascent"), config.getInt("tail.width"), tail, config.getString("tail.image") + ".png"); + config.save(bb_config_file); + BubbleConfig bubbleConfig = new BubbleConfig(config.getString("text-format"), config.getString("display-name"), + leftChar, middleChar, + rightChar, tailChar); + BUBBLES.put(key, bubbleConfig); + SimpleChar[] simpleChars = new SimpleChar[]{leftChar, middleChar, rightChar, tailChar}; + for (SimpleChar simpleChar : simpleChars) { + JsonObject jo_bb = new JsonObject(); + jo_bb.add("type", new JsonPrimitive("bitmap")); + jo_bb.add("file", new JsonPrimitive(ConfigManager.namespace + ":" + ConfigManager.bb_folder_path.replaceAll("\\\\","/") + simpleChar.getFile())); + jo_bb.add("ascent", new JsonPrimitive(simpleChar.getAscent())); + jo_bb.add("height", new JsonPrimitive(simpleChar.getHeight())); + JsonArray ja_simple = new JsonArray(); + ja_simple.add(native2ascii(simpleChar.getChars())); + jo_bb.add("chars", ja_simple); + jsonArray_default.add(jo_bb); + try { + FileUtils.copyFile(new File(bb_config_file.getParent() + File.separator + simpleChar.getFile()), new File(textures_file.getPath() + File.separatorChar + StringUtils.replace(ConfigManager.bb_folder_path, "\\", File.separator) + simpleChar.getFile())); + } + catch (IOException e){ + AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to copy bubble " + key + " png files to resource pack..."); + } + } + } + catch (Exception e) { + e.printStackTrace(); + } + } + } + + private void loadBackgrounds(JsonArray jsonArray_default, File textures_file) { + if (!ConfigUtil.isModuleEnabled("background")) return; + File bg_file = new File(CustomNameplates.plugin.getDataFolder() + File.separator + "backgrounds"); + if (!bg_file.exists()) { + if (!bg_file.mkdir()) { + AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to create resources folder..."); + return; + } + saveDefaultBackgrounds(); + } + BACKGROUNDS = new HashMap<>(); + File[] bg_config_files = bg_file.listFiles(file -> file.getName().endsWith(".yml")); + if (bg_config_files == null) return; + Arrays.sort(bg_config_files); + for (File bg_config_file : bg_config_files) { + try { + String key = bg_config_file.getName().substring(0, bg_config_file.getName().length() - 4); + YamlConfiguration config = YamlConfiguration.loadConfiguration(bg_config_file); + char oStart = ConfigManager.start; + char o1 = (char) (oStart + '\u0001'); + char o2 = (char) (o1 + '\u0001'); + char o4 = (char) (o2 + '\u0001'); + char o8 = (char) (o4 + '\u0001'); + char o16 = (char) (o8 + '\u0001'); + char o32 = (char) (o16 + '\u0001'); + char o64 = (char) (o32 + '\u0001'); + char o128 = (char) (o64 + '\u0001'); + char oEnd = (char) (o128 + '\u0001'); + ConfigManager.start = (char) (oEnd + '\u0001'); + int height = config.getInt("middle.height", 14); + int ascent = config.getInt("middle.ascent", 8); + SimpleChar startChar = new SimpleChar(config.getInt("left.height"), config.getInt("left.ascent"),1 ,oStart, config.getString("left.image") + ".png"); + SimpleChar offset_1 = new SimpleChar(height, ascent,1, o1, config.getString("middle.1") + ".png"); + SimpleChar offset_2 = new SimpleChar(height, ascent,1, o2, config.getString("middle.2") + ".png"); + SimpleChar offset_4 = new SimpleChar(height, ascent,1, o4, config.getString("middle.4") + ".png"); + SimpleChar offset_8 = new SimpleChar(height, ascent,1, o8, config.getString("middle.8") + ".png"); + SimpleChar offset_16 = new SimpleChar(height, ascent,1, o16, config.getString("middle.16") + ".png"); + SimpleChar offset_32 = new SimpleChar(height, ascent,1, o32, config.getString("middle.32") + ".png"); + SimpleChar offset_64 = new SimpleChar(height, ascent,1, o64, config.getString("middle.64") + ".png"); + SimpleChar offset_128 = new SimpleChar(height, ascent,1, o128, config.getString("middle.128") + ".png"); + SimpleChar endChar = new SimpleChar(config.getInt("right.height"),config.getInt("right.ascent"),1, oEnd, config.getString("right.image") + ".png"); + BackGround backGround = new BackGround(startChar, offset_1, + offset_2, offset_4, + offset_8, offset_16, + offset_32, offset_64, + offset_128, endChar, + config.getInt("start-width", 1), config.getInt("end-width", 1)); + BACKGROUNDS.put(key, backGround); + SimpleChar[] simpleChars = new SimpleChar[]{startChar, offset_1, + offset_2, offset_4, + offset_8, offset_16, + offset_32, offset_64, + offset_128, endChar}; + for (SimpleChar simpleChar : simpleChars) { + JsonObject jo_bg = new JsonObject(); + jo_bg.add("type", new JsonPrimitive("bitmap")); + jo_bg.add("file", new JsonPrimitive(ConfigManager.namespace + ":" + ConfigManager.bg_folder_path.replaceAll("\\\\","/") + simpleChar.getFile())); + jo_bg.add("ascent", new JsonPrimitive(simpleChar.getAscent())); + jo_bg.add("height", new JsonPrimitive(simpleChar.getHeight())); + JsonArray ja_simple = new JsonArray(); + ja_simple.add(native2ascii(simpleChar.getChars())); + jo_bg.add("chars", ja_simple); + jsonArray_default.add(jo_bg); + try { + FileUtils.copyFile(new File(bg_config_file.getParent() + File.separator + simpleChar.getFile()), new File(textures_file.getPath() + File.separatorChar + StringUtils.replace(ConfigManager.bg_folder_path, "\\", File.separator) + simpleChar.getFile())); + } + catch (IOException e){ + AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to copy background " + key + " png files to resource pack..."); + } + } + } + catch (Exception e) { + e.printStackTrace(); + } + } + } + + private void extractShaders() { + if (ConfigManager.extract) { + String path = "ResourcePack" + File.separator + "minecraft" + File.separator + "shaders" + File.separator + "core" + File.separator; + CustomNameplates.plugin.saveResource(path + "rendertype_text.fsh", true); + CustomNameplates.plugin.saveResource(path + "rendertype_text.json", true); + CustomNameplates.plugin.saveResource(path + "rendertype_text.vsh", true); + CustomNameplates.plugin.saveResource(path + "rendertype_text_see_through.fsh", true); + CustomNameplates.plugin.saveResource(path + "rendertype_text_see_through.json", true); + CustomNameplates.plugin.saveResource(path + "rendertype_text_see_through.vsh", true); + } + } + + private void saveOffsets() { + if (ConfigManager.offsets.size() != 0){ + for (int offset : ConfigManager.offsets) { + JsonObject jsonObject_offset = new JsonObject(); + JsonArray jsonArray_offset = new JsonArray(); + jsonObject_offset.add("providers", jsonArray_offset); + JsonObject jo_providers = new JsonObject(); + jo_providers.add("type", new JsonPrimitive("space")); + JsonObject jo_space = new JsonObject(); + jo_space.add(" ", new JsonPrimitive(4)); + jo_space.add("\\u200c", new JsonPrimitive(0)); + jo_providers.add("advances", jo_space); + jsonArray_offset.add(jo_providers); + JsonObject jo_ascii = new JsonObject(); + jo_ascii.add("type", new JsonPrimitive("bitmap")); + jo_ascii.add("file", new JsonPrimitive("minecraft:font/ascii.png")); + jo_ascii.add("ascent", new JsonPrimitive(offset)); + jo_ascii.add("height", new JsonPrimitive(8)); + JsonArray ja_ascii = new JsonArray(); + ja_ascii.add("\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000"); + ja_ascii.add("\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000"); + ja_ascii.add("\\u0020\\u0021\\u0022\\u0023\\u0024\\u0025\\u0026\\u0027\\u0028\\u0029\\u002a\\u002b\\u002c\\u002d\\u002e\\u002f"); + ja_ascii.add("\\u0030\\u0031\\u0032\\u0033\\u0034\\u0035\\u0036\\u0037\\u0038\\u0039\\u003a\\u003b\\u003c\\u003d\\u003e\\u003f"); + ja_ascii.add("\\u0040\\u0041\\u0042\\u0043\\u0044\\u0045\\u0046\\u0047\\u0048\\u0049\\u004a\\u004b\\u004c\\u004d\\u004e\\u004f"); + ja_ascii.add("\\u0050\\u0051\\u0052\\u0053\\u0054\\u0055\\u0056\\u0057\\u0058\\u0059\\u005a\\u005b\\u005c\\u005d\\u005e\\u005f"); + ja_ascii.add("\\u0060\\u0061\\u0062\\u0063\\u0064\\u0065\\u0066\\u0067\\u0068\\u0069\\u006a\\u006b\\u006c\\u006d\\u006e\\u006f"); + ja_ascii.add("\\u0070\\u0071\\u0072\\u0073\\u0074\\u0075\\u0076\\u0077\\u0078\\u0079\\u007a\\u007b\\u007c\\u007d\\u007e\\u0000"); + ja_ascii.add("\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000"); + ja_ascii.add("\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u00a3\\u0000\\u0000\\u0192"); + ja_ascii.add("\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u00aa\\u00ba\\u0000\\u0000\\u00ac\\u0000\\u0000\\u0000\\u00ab\\u00bb"); + ja_ascii.add("\\u2591\\u2592\\u2593\\u2502\\u2524\\u2561\\u2562\\u2556\\u2555\\u2563\\u2551\\u2557\\u255d\\u255c\\u255b\\u2510"); + ja_ascii.add("\\u2514\\u2534\\u252c\\u251c\\u2500\\u253c\\u255e\\u255f\\u255a\\u2554\\u2569\\u2566\\u2560\\u2550\\u256c\\u2567"); + ja_ascii.add("\\u2568\\u2564\\u2565\\u2559\\u2558\\u2552\\u2553\\u256b\\u256a\\u2518\\u250c\\u2588\\u2584\\u258c\\u2590\\u2580"); + ja_ascii.add("\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u2205\\u2208\\u0000"); + ja_ascii.add("\\u2261\\u00b1\\u2265\\u2264\\u2320\\u2321\\u00f7\\u2248\\u00b0\\u2219\\u0000\\u221a\\u207f\\u00b2\\u25a0\\u0000"); + jo_ascii.add("chars", ja_ascii); + jsonArray_offset.add(jo_ascii); + try (FileWriter fileWriter = new FileWriter( + CustomNameplates.plugin.getDataFolder() + + File.separator + "ResourcePack" + + File.separator + ConfigManager.namespace + + File.separator + "font" + + File.separator + "offset_" + offset + ".json")) { + fileWriter.write(jsonObject_offset.toString().replace("\\\\", "\\")); + } + catch (IOException e) { + AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to generate offset font json..."); + } + } + } + } + + private void saveDefaultNameplates() { + String[] png_list = new String[]{"cat", "egg", "cheems", "wither", "xmas", "halloween", "hutao", "starsky", "trident", "rabbit"}; + String[] part_list = new String[]{"_left.png", "_middle.png", "_right.png", ".yml"}; + for (String name : png_list) { + for (String part : part_list) { + CustomNameplates.plugin.saveResource("nameplates" + File.separatorChar + name + part, false); + } + } + } + + private void saveDefaultBubbles() { + String[] png_list = new String[]{"chat"}; + String[] part_list = new String[]{"_left.png", "_middle.png", "_right.png", "_tail.png", ".yml"}; + for (String name : png_list) { + for (String part : part_list) { + CustomNameplates.plugin.saveResource("bubbles" + File.separatorChar + name + part, false); + } + } + } + + private void saveDefaultBackgrounds() { + String[] bg_list = new String[]{"b0", "b1", "b2", "b4", "b8", "b16","b32","b64","b128"}; + for (String bg : bg_list) { + CustomNameplates.plugin.saveResource("backgrounds" + File.separatorChar + bg + ".png", false); + } + String[] config_list = new String[]{"bedrock_1", "bedrock_2", "bedrock_3"}; + for (String config : config_list) { + CustomNameplates.plugin.saveResource("backgrounds" + File.separatorChar + config + ".yml", false); + } + } + + private void deleteDirectory(File file){ + if(file.exists()){ + try{ + FileUtils.deleteDirectory(file); + } + catch (IOException e){ + e.printStackTrace(); + AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to delete generated folder..." ); + } + } + } + + private List getOffsetFontEnums() { + ArrayList list = new ArrayList<>(); + for (FontOffset offsetFont : FontOffset.values()) { + list.add(this.getOffsetFontChar(offsetFont.getHeight(), offsetFont.getCharacter())); + } + return list; + } + + private JsonObject getOffsetFontChar(int height, char character) { + JsonObject jsonObject = new JsonObject(); + jsonObject.add("type", new JsonPrimitive("bitmap")); + jsonObject.add("file", new JsonPrimitive(ConfigManager.namespace + ":" + ConfigManager.ss_folder_path.replaceAll("\\\\","/") + "space_split.png")); + jsonObject.add("ascent", new JsonPrimitive(-5000)); + jsonObject.add("height", new JsonPrimitive(height)); + final JsonArray jsonArray = new JsonArray(); + jsonArray.add(native2ascii(character)); + jsonObject.add("chars", jsonArray); + return jsonObject; + } + + private String native2ascii(char ch) { + if (ch > '\u007f') { + StringBuilder stringBuilder_1 = new StringBuilder("\\u"); + StringBuilder stringBuilder_2 = new StringBuilder(Integer.toHexString(ch)); + stringBuilder_2.reverse(); + for (int n = 4 - stringBuilder_2.length(), i = 0; i < n; i++) stringBuilder_2.append('0'); + for (int j = 0; j < 4; j++) stringBuilder_1.append(stringBuilder_2.charAt(3 - j)); + return stringBuilder_1.toString(); + } + return Character.toString(ch); + } + + private void saveSplit(String path) { + try{ + CustomNameplates.plugin.saveResource("space_split.png", false); + FileUtils.copyFile(new File(CustomNameplates.plugin.getDataFolder(),"space_split.png"), new File(path + File.separator + StringUtils.replace(ConfigManager.ss_folder_path, "\\", File.separator) + "space_split.png")); + new File(CustomNameplates.plugin.getDataFolder(),"space_split.png").delete(); + }catch (IOException e){ + AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to copy space_split.png to resource pack..."); + } + } + + private void hookCopy(File generated) { + if (ConfigManager.itemsAdderHook){ + try { + FileUtils.copyDirectory(generated, new File(Bukkit.getPluginManager().getPlugin("ItemsAdder").getDataFolder() + File.separator + "data"+ File.separator + "resource_pack" + File.separator + "assets") ); + } + catch (IOException e){ + e.printStackTrace(); + AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to copy files to ItemsAdder..."); + } + } + if (ConfigManager.oraxenHook){ + try { + FileUtils.copyDirectory(new File(generated, File.separator + ConfigManager.namespace), new File(Bukkit.getPluginManager().getPlugin("Oraxen").getDataFolder() + File.separator + "pack"+ File.separator + "assets" + File.separator + ConfigManager.namespace)); + } + catch (IOException e){ + e.printStackTrace(); + AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to copy files to Oraxen..."); + } + } + } + + public NameplateConfig getNameplateConfig(String nameplate) { + return NAMEPLATES.get(nameplate); + } + + public BubbleConfig getBubbleConfig(String bubble) { + return BUBBLES.get(bubble); + } + + public BackGround getBackground(String background) { + return BACKGROUNDS.get(background); + } +} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/manager/TeamManager.java b/src/main/java/net/momirealms/customnameplates/manager/TeamManager.java new file mode 100644 index 0000000..356688c --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/manager/TeamManager.java @@ -0,0 +1,112 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.manager; + +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.objects.Function; +import net.momirealms.customnameplates.objects.nameplates.NameplatesTeam; +import net.momirealms.customnameplates.objects.team.*; +import net.momirealms.customnameplates.utils.TeamManagePacketUtil; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.Nullable; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class TeamManager extends Function { + + private final ConcurrentHashMap teams ; + private TeamPacketInterface teamPacketInterface; + private TeamNameInterface teamNameInterface; + private final TeamManagePacketUtil teamManagePacketUtil; + + public TeamManager() { + teams = new ConcurrentHashMap<>(); + this.teamManagePacketUtil = new TeamManagePacketUtil(this); + } + + @Override + public void load() { + if (NameplateManager.mode.equalsIgnoreCase("Team")) { + teamPacketInterface = new TeamPrefixSuffix(this); + } + if (NameplateManager.mode.equalsIgnoreCase("Teleporting") || NameplateManager.mode.equalsIgnoreCase("Riding")) { + teamPacketInterface = new SimpleTeamVisibility(this); + } + + if (ConfigManager.tab_BC_hook) { + teamNameInterface = new TABbcHook(); + } + else if (ConfigManager.tab_hook) { + teamNameInterface = new TABTeamHook(); + } + else { + teamNameInterface = new SimpleTeam(); + } + } + + @Override + public void unload() { + if (teamNameInterface != null) teamNameInterface.unload(); + } + + public void sendUpdateToOne(Player player) { + if (teamPacketInterface != null) teamPacketInterface.sendUpdateToOne(player); + } + + public void sendUpdateToAll(Player player, boolean force) { + if (teamPacketInterface != null) teamPacketInterface.sendUpdateToAll(player, force); + } + + public void createTeam(Player player) { + String teamName = getTeamName(player); + if (teamName != null) { + if (!teams.containsKey(teamName)) teams.put(teamName, new NameplatesTeam(player, this)); + teamPacketInterface.sendUpdateToAll(player, false); + teamPacketInterface.sendUpdateToOne(player); + } + else { + if (player == null || !player.isOnline()) return; + Bukkit.getScheduler().runTaskLater(CustomNameplates.plugin, () -> { + createTeam(player); + },20); + } + } + + public Map getTeams() { + return teams; + } + + public String getTeamName(Player player) { + return teamNameInterface.getTeamName(player); + } + + public void removePlayerFromTeamCache(Player player) { + teams.remove(getTeamName(player)); + } + + @Nullable + public NameplatesTeam getNameplatesTeam(Player player) { + return teams.get(getTeamName(player)); + } + + public TeamManagePacketUtil getTeamManagePacketUtil() { + return teamManagePacketUtil; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/manager/WidthManager.java b/src/main/java/net/momirealms/customnameplates/manager/WidthManager.java new file mode 100644 index 0000000..4fe6de4 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/manager/WidthManager.java @@ -0,0 +1,48 @@ +package net.momirealms.customnameplates.manager; + +import net.momirealms.customnameplates.objects.Function; +import net.momirealms.customnameplates.objects.font.FontOffset; +import net.momirealms.customnameplates.objects.font.FontWidthNormal; +import net.momirealms.customnameplates.objects.font.FontWidthThin; +import net.momirealms.customnameplates.utils.AdventureUtil; +import net.momirealms.customnameplates.utils.ConfigUtil; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.util.HashMap; + +public class WidthManager extends Function { + + public static HashMap fontWidth = new HashMap<>(); + + @Override + public void load() { + loadWidth(); + } + + @Override + public void unload() { + super.unload(); + } + + public void loadWidth() { + fontWidth.clear(); + YamlConfiguration config = ConfigUtil.getConfig("char-width.yml"); + for (String key : config.getKeys(false)) { + if (key.length() == 1) { + fontWidth.put(key.charAt(0), config.getInt(key)); + } + else { + AdventureUtil.consoleMessage("[CustomNameplates] " + key + " in custom char-width.yml is in wrong format or not supported"); + } + } + AdventureUtil.consoleMessage("[CustomNameplates] Loaded " + fontWidth.size() + " custom char-width"); + if (ConfigManager.thin_font) + for (int i = 0; i < FontWidthThin.values().length; i++) + fontWidth.put(FontWidthThin.values()[i].getCharacter(), FontWidthThin.values()[i].getLength()); + else + for (int i = 0; i < FontWidthNormal.values().length; i++) + fontWidth.put(FontWidthNormal.values()[i].getCharacter(), FontWidthNormal.values()[i].getLength()); + for (int i = 0; i < FontOffset.values().length; i++) + fontWidth.put(FontOffset.values()[i].getCharacter(), FontOffset.values()[i].getSpace() - 1); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/NameplateUtil.java b/src/main/java/net/momirealms/customnameplates/nameplates/NameplateUtil.java deleted file mode 100644 index 661e03e..0000000 --- a/src/main/java/net/momirealms/customnameplates/nameplates/NameplateUtil.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.nameplates; - -import net.momirealms.customnameplates.font.FontOffset; -import net.momirealms.customnameplates.font.FontUtil; -import net.momirealms.customnameplates.helper.Log; -import org.bukkit.ChatColor; - -public class NameplateUtil { - - public static String makeCustomNameplate(String prefix, String name, String suffix, NameplateConfig nameplate) { - int totalWidth = FontUtil.getTotalWidth(ChatColor.stripColor(prefix + name + suffix)); - boolean isEven = totalWidth % 2 == 0; - char left = nameplate.left().getChars(); - char middle = nameplate.middle().getChars(); - char right = nameplate.right().getChars(); - char neg_1 = FontOffset.NEG_1.getCharacter(); - int offset_2 = nameplate.right().getWidth() - nameplate.middle().getWidth(); - int left_offset = totalWidth + (nameplate.left().getWidth() + nameplate.right().getWidth())/2 + 1; - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(FontOffset.getShortestNegChars(isEven ? left_offset : left_offset + 1 )); - stringBuilder.append(left).append(neg_1); - int mid_amount = (totalWidth + 1 + offset_2) / (nameplate.middle().getWidth()); - if (mid_amount == 0) { - stringBuilder.append(middle).append(neg_1); - } - else { - for (int i = 0; i < mid_amount; i++) { - stringBuilder.append(middle).append(neg_1); - } - } - stringBuilder.append(FontOffset.getShortestNegChars(nameplate.right().getWidth() - ((totalWidth + 1 + offset_2) % nameplate.middle().getWidth() + (isEven ? 0 : -1)))); -// stringBuilder.append(FontOffset.getShortestNegChars(nameplate.right().getWidth() - ((totalWidth + 1) % nameplate.middle().getWidth() + (isEven ? 0 : -1)))); - stringBuilder.append(middle).append(neg_1); - stringBuilder.append(right).append(neg_1); - stringBuilder.append(FontOffset.getShortestNegChars(left_offset - 1)); - return stringBuilder.toString(); - } - - public static String getSuffixChar(String name) { - int totalWidth = FontUtil.getTotalWidth(ChatColor.stripColor(name)); - return FontOffset.getShortestNegChars(totalWidth + totalWidth % 2 + 1); - } - - public static String makeCustomBubble(String prefix, String name, String suffix, BubbleConfig bubble) { - int totalWidth = FontUtil.getTotalWidth(ChatColor.stripColor(prefix + name + suffix)); - boolean isEven = totalWidth % 2 == 0; - char left = bubble.left().getChars(); - char middle = bubble.middle().getChars(); - char right = bubble.right().getChars(); - char tail = bubble.tail().getChars(); - char neg_1 = FontOffset.NEG_1.getCharacter(); - int offset = bubble.middle().getWidth() - bubble.tail().getWidth(); - int left_offset = totalWidth + bubble.left().getWidth() + 1; - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(FontOffset.getShortestNegChars(isEven ? left_offset - offset : left_offset + 1 - offset)); - stringBuilder.append(left).append(neg_1); - int mid_amount = (totalWidth + 1 - bubble.tail().getWidth()) / (bubble.middle().getWidth()); - if (mid_amount == 0) { - stringBuilder.append(tail).append(neg_1); - } - else { - for (int i = 0; i <= mid_amount; i++) { - if (i == mid_amount/2) { - stringBuilder.append(tail).append(neg_1); - } - else { - stringBuilder.append(middle).append(neg_1); - } - } - } - stringBuilder.append(FontOffset.getShortestNegChars(bubble.right().getWidth() - ((totalWidth + 1 + offset) % bubble.middle().getWidth() + (isEven ? 0 : -1)))); - stringBuilder.append(middle).append(neg_1); - stringBuilder.append(right).append(neg_1); - stringBuilder.append(FontOffset.getShortestNegChars(left_offset - 1)); - return stringBuilder.toString(); - } -} diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/NameplatesTeam.java b/src/main/java/net/momirealms/customnameplates/nameplates/NameplatesTeam.java deleted file mode 100644 index 2e7de7f..0000000 --- a/src/main/java/net/momirealms/customnameplates/nameplates/NameplatesTeam.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.nameplates; - -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; -import net.momirealms.customnameplates.ConfigManager; -import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.data.PlayerData; -import net.momirealms.customnameplates.nameplates.mode.tmpackets.TeamPacketUtil; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.Team; - -import java.util.Optional; - -public class NameplatesTeam { - - private final Player player; - private Component prefix; - private Component suffix; - private String prefixText; - private String suffixText; - private ChatColor color; - private String dynamic; - - 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 getDynamic() {return dynamic;} - - public NameplatesTeam(Player player) { - - this.color = ChatColor.WHITE; - this.player = player; - - updateNameplates(); - - if (!ConfigManager.Main.tab && !ConfigManager.Main.tab_bc) { - if (ConfigManager.Nameplate.fakeTeam) { - TeamPacketUtil.createTeamToAll(player); - } - else { - Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard(); - Team teamTemp = scoreboard.getTeam(player.getName()); - if (teamTemp == null) { - teamTemp = scoreboard.registerNewTeam(player.getName()); - } - teamTemp.addEntry(player.getName()); - } - } - } - - public void updateNameplates() { - - Optional playerData = Optional.ofNullable(CustomNameplates.instance.getDataManager().getOrCreate(this.player.getUniqueId())); - String nameplate; - - if (playerData.isPresent()) nameplate = playerData.get().getEquippedNameplate(); - else nameplate = "none"; - - if (nameplate.equals("none")) { - if (ConfigManager.Main.placeholderAPI) { - this.prefix = MiniMessage.miniMessage().deserialize(CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(this.player, ConfigManager.Nameplate.player_prefix)); - this.suffix = MiniMessage.miniMessage().deserialize(CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(this.player, ConfigManager.Nameplate.player_suffix)); - } - else { - this.prefix = MiniMessage.miniMessage().deserialize(ConfigManager.Nameplate.player_prefix); - this.suffix = MiniMessage.miniMessage().deserialize(ConfigManager.Nameplate.player_suffix); - } - if (ConfigManager.Main.placeholderAPI) { - this.prefixText = CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(this.player, ConfigManager.Nameplate.player_prefix); - this.suffixText = CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(this.player, ConfigManager.Nameplate.player_suffix); - } - else { - this.prefixText = ConfigManager.Nameplate.player_prefix; - this.suffixText = ConfigManager.Nameplate.player_suffix; - } - - this.color = ChatColor.WHITE; - return; - } - - NameplateConfig nameplateConfig = CustomNameplates.instance.getResourceManager().getNameplateConfig(nameplate); - - if (nameplateConfig == null){ - this.prefix = Component.text(""); - this.suffix = Component.text(""); - this.prefixText = ""; - this.suffixText = ""; - this.color = ChatColor.WHITE; - CustomNameplates.instance.getDataManager().getCache().get(player.getUniqueId()).equipNameplate("none"); - return; - } - - String playerPrefix; - String playerSuffix; - - if (ConfigManager.Main.placeholderAPI) { - if (!ConfigManager.Nameplate.hidePrefix) playerPrefix = CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(this.player, ConfigManager.Nameplate.player_prefix); - else playerPrefix = ""; - if (!ConfigManager.Nameplate.hideSuffix) playerSuffix = CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(this.player, ConfigManager.Nameplate.player_suffix); - else playerSuffix = ""; - } - else { - if (!ConfigManager.Nameplate.hidePrefix) playerPrefix = ConfigManager.Nameplate.player_prefix; - else playerPrefix = ""; - if (!ConfigManager.Nameplate.hideSuffix) playerSuffix = ConfigManager.Nameplate.player_suffix; - else playerSuffix = ""; - } - - this.dynamic = playerPrefix + playerSuffix; - - String name; - if (ConfigManager.Nameplate.player_name.equals("%player_name%")) { - name = this.player.getName(); - } - else if (ConfigManager.Main.placeholderAPI) { - name = CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(player, ConfigManager.Nameplate.player_name); - } - else { - name = this.player.getName(); - } - - this.prefixText = NameplateUtil.makeCustomNameplate( - MiniMessage.miniMessage().stripTags(playerPrefix), - name, - MiniMessage.miniMessage().stripTags(playerSuffix), - nameplateConfig - ); - - this.suffixText = NameplateUtil.getSuffixChar( - MiniMessage.miniMessage().stripTags(playerPrefix) + - name + - MiniMessage.miniMessage().stripTags(playerSuffix) - ); - - this.prefix = Component.text(this.prefixText) - .font(ConfigManager.Main.key) - .append(MiniMessage.miniMessage().deserialize(playerPrefix)); - - this.suffix = MiniMessage.miniMessage().deserialize(playerSuffix) - .append(Component.text(this.suffixText) - .font(ConfigManager.Main.key)); - - this.color = nameplateConfig.color(); - } -} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/TeamManager.java b/src/main/java/net/momirealms/customnameplates/nameplates/TeamManager.java deleted file mode 100644 index 269c213..0000000 --- a/src/main/java/net/momirealms/customnameplates/nameplates/TeamManager.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.nameplates; - -import com.google.common.io.ByteArrayDataOutput; -import com.google.common.io.ByteStreams; -import net.momirealms.customnameplates.ConfigManager; -import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.hook.TABTeamHook; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.Nullable; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -public class TeamManager { - - private final ConcurrentHashMap teams = new ConcurrentHashMap<>(); - - public static ConcurrentHashMap teamNames = new ConcurrentHashMap<>(); - - public void createTeam(Player player) { - String teamName = getTeamName(player); - if (teamName != null) { - if (!teams.containsKey(teamName)) teams.put(teamName, new NameplatesTeam(player)); - CustomNameplates.instance.getTeamPacketManager().sendUpdateToAll(player, false); - CustomNameplates.instance.getTeamPacketManager().sendUpdateToOne(player); - } - else { - if (player == null || !player.isOnline()) return; - Bukkit.getScheduler().runTaskLater(CustomNameplates.instance, () -> { - createTeam(player); - },20); - } - } - - public Map getTeams() { - return teams; - } - - @Nullable - public static String getTeamName(Player player) { - String teamName; - if (ConfigManager.Main.tab) { - return TABTeamHook.getTABTeam(player.getName()); - } - if (ConfigManager.Main.tab_bc) { - teamName = teamNames.get(player.getName()); - if (teamName == null) { - sendRequest(player); - return null; - } - else { - return teamName; - } - } - return player.getName(); - } - - private static void sendRequest(Player player) { - ByteArrayDataOutput dataOutput = ByteStreams.newDataOutput(); - dataOutput.writeUTF(player.getName()); - player.sendPluginMessage(CustomNameplates.instance, "customnameplates:cnp", dataOutput.toByteArray()); - } -} diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/EntityTag.java b/src/main/java/net/momirealms/customnameplates/nameplates/mode/EntityTag.java deleted file mode 100644 index d61f02e..0000000 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/EntityTag.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.nameplates.mode; - -import net.momirealms.customnameplates.nameplates.ArmorStandManager; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import java.util.concurrent.ConcurrentHashMap; - -public abstract class EntityTag extends NameplateManager { - - protected final ConcurrentHashMap armorStandManagerMap = new ConcurrentHashMap<>(); - - protected EntityTag(String name) { - super(name); - } - - @Override - public void load(){ - } - - @Override - public void unload(){ - for (Player all : Bukkit.getOnlinePlayers()) { - getArmorStandManager(all).destroy(); - } - armorStandManagerMap.clear(); - } - - @Override - public void onJoin(Player player) { - super.onJoin(player); - } - - @Override - public void onQuit(Player player) { - super.onQuit(player); - } - - public void onSneak(Player player, boolean isSneaking) { - } - - public void onRespawn(Player player) { - } - - public ArmorStandManager getArmorStandManager(Player player) { - return armorStandManagerMap.get(player); - } - - public void refresh(Player refreshed, boolean force) { - getArmorStandManager(refreshed).refresh(force); - } -} diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/EventListener.java b/src/main/java/net/momirealms/customnameplates/nameplates/mode/EventListener.java deleted file mode 100644 index 8e455bc..0000000 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/EventListener.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.nameplates.mode; - -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerLoginEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.spigotmc.event.player.PlayerSpawnLocationEvent; - -public record EventListener(NameplateManager nameplateManager) implements Listener { - - @EventHandler - public void onJoin(PlayerJoinEvent event) { - nameplateManager.onJoin(event.getPlayer()); - } - - @EventHandler - public void onQuit(PlayerQuitEvent event) { - nameplateManager.onQuit(event.getPlayer()); - } - -} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/NameplateManager.java b/src/main/java/net/momirealms/customnameplates/nameplates/mode/NameplateManager.java deleted file mode 100644 index f7ffb78..0000000 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/NameplateManager.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.nameplates.mode; - -import net.momirealms.customnameplates.ConfigManager; -import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.Function; -import net.momirealms.customnameplates.nameplates.TeamManager; -import net.momirealms.customnameplates.nameplates.mode.tmpackets.TeamPacketUtil; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.Team; - -public abstract class NameplateManager extends Function { - - protected NameplateManager(String name) { - super(name); - } - - @Override - public void load() { - } - - @Override - public void unload(){ - } - - public void onJoin(Player player) { - CustomNameplates.instance.getDataManager().loadData(player); - } - - public void onQuit(Player player) { - - CustomNameplates.instance.getDataManager().unloadPlayer(player.getUniqueId()); - if (ConfigManager.Module.nameplate) { - String teamName; - if (ConfigManager.Main.tab_bc) { - teamName = TeamManager.getTeamName(player); - CustomNameplates.instance.getTeamManager().getTeams().remove(teamName); - TeamManager.teamNames.remove(player.getName()); - return; - } - if (ConfigManager.Main.tab) { - teamName = TeamManager.getTeamName(player); - CustomNameplates.instance.getTeamManager().getTeams().remove(teamName); - return; - } - if (ConfigManager.Nameplate.fakeTeam) { - TeamPacketUtil.destroyTeamToAll(player); - teamName = TeamManager.getTeamName(player); - } - else { - Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard(); - teamName = player.getName(); - Team team = scoreboard.getTeam(teamName); - if (team != null) team.unregister(); - } - CustomNameplates.instance.getTeamManager().getTeams().remove(teamName); - } - } -} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/bubbles/ChatBubblesManager.java b/src/main/java/net/momirealms/customnameplates/nameplates/mode/bubbles/ChatBubblesManager.java deleted file mode 100644 index a1462ad..0000000 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/bubbles/ChatBubblesManager.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.nameplates.mode.bubbles; - -import com.comphenix.protocol.wrappers.WrappedChatComponent; -import net.kyori.adventure.key.Key; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; -import net.momirealms.customnameplates.ConfigManager; -import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.api.events.BubblesEvent; -import net.momirealms.customnameplates.data.PlayerData; -import net.momirealms.customnameplates.nameplates.ArmorStandManager; -import net.momirealms.customnameplates.nameplates.BubbleConfig; -import net.momirealms.customnameplates.nameplates.FakeArmorStand; -import net.momirealms.customnameplates.nameplates.NameplateUtil; -import net.momirealms.customnameplates.nameplates.mode.EntityTag; -import net.momirealms.customnameplates.nameplates.mode.EventListener; -import net.momirealms.customnameplates.resource.ResourceManager; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -import java.util.HashMap; -import java.util.UUID; - -public class ChatBubblesManager extends EntityTag { - - private BBPacketsHandle packetsHandle; - - private ChatListener chatListener; - private TrChatListener trChatListener; - private EventListener jqListener; - - private final HashMap coolDown = new HashMap<>(); - - public ChatBubblesManager(String name) { - super(name); - } - - @Override - public void load() { - - this.packetsHandle = new BBPacketsHandle("BUBBLES", this); - this.packetsHandle.load(); - - if (ConfigManager.Main.trChat) { - this.trChatListener = new TrChatListener(this); - Bukkit.getPluginManager().registerEvents(trChatListener, CustomNameplates.instance); - } - else { - this.chatListener = new ChatListener(this); - Bukkit.getPluginManager().registerEvents(chatListener, CustomNameplates.instance); - } - - if (!ConfigManager.Module.nameplate) { - this.jqListener = new EventListener(this); - Bukkit.getPluginManager().registerEvents(jqListener, CustomNameplates.instance); - } - - for (Player all : Bukkit.getOnlinePlayers()) { - armorStandManagerMap.put(all, new ArmorStandManager(all)); - for (Player player : Bukkit.getOnlinePlayers()) - spawnArmorStands(player, all); - } - } - - @Override - public void unload() { - this.packetsHandle.unload(); - if (chatListener != null) HandlerList.unregisterAll(chatListener); - if (trChatListener != null) HandlerList.unregisterAll(trChatListener); - if (jqListener != null) HandlerList.unregisterAll(jqListener); - super.unload(); - } - - private void spawnArmorStands(Player viewer, Player target) { - if (target == viewer) return; - if (viewer.getWorld() != target.getWorld()) return; - if (getDistance(target, viewer) < 48 && viewer.canSee(target)) - getArmorStandManager(target).spawn(viewer); - } - - private double getDistance(Player player1, Player player2) { - Location loc1 = player1.getLocation(); - Location loc2 = player2.getLocation(); - return Math.sqrt(Math.pow(loc1.getX()-loc2.getX(), 2) + Math.pow(loc1.getZ()-loc2.getZ(), 2)); - } - - public ArmorStandManager getArmorStandManager(Player player) { - return armorStandManagerMap.get(player); - } - - @Override - public void onJoin(Player player) { - super.onJoin(player); - armorStandManagerMap.put(player, new ArmorStandManager(player)); - for (Player viewer : Bukkit.getOnlinePlayers()) { - spawnArmorStands(viewer, player); - spawnArmorStands(player, viewer); - } - } - - @Override - public void onQuit(Player player) { - super.onQuit(player); - ArmorStandManager asm = armorStandManagerMap.remove(player); - if (asm != null) { - asm.destroy(); - } - coolDown.remove(player); - } - - public void onChat(Player player, String text) { - - if (player.getGameMode() == GameMode.SPECTATOR) return; - if (!player.hasPermission("bubbles.use")) return; - - long time = System.currentTimeMillis(); - if (time - (coolDown.getOrDefault(player, time - ConfigManager.Bubbles.coolDown)) < ConfigManager.Bubbles.coolDown) return; - coolDown.put(player, time); - - PlayerData playerData = CustomNameplates.instance.getDataManager().getOrEmpty(player); - String bubbles = playerData.getBubbles(); - - BubblesEvent bubblesEvent = new BubblesEvent(player, bubbles, text); - Bukkit.getPluginManager().callEvent(bubblesEvent); - if (bubblesEvent.isCancelled()) { - return; - } - text = bubblesEvent.getText(); - BubbleConfig bubbleConfig = ResourceManager.BUBBLES.get(bubblesEvent.getBubble()); - WrappedChatComponent wrappedChatComponent; - if (CustomNameplates.instance.getImageParser() != null) { - text = CustomNameplates.instance.getImageParser().parse(player, text); - } - if (bubbleConfig == null || bubbles.equals("none")) { - text = ConfigManager.Main.placeholderAPI ? - CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(player, ConfigManager.Bubbles.prefix) + ConfigManager.Bubbles.defaultFormat + text + CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(player, ConfigManager.Bubbles.suffix) - : - ConfigManager.Bubbles.prefix + text + ConfigManager.Bubbles.suffix; - if (text.length() > ConfigManager.Bubbles.maxChar) return; - wrappedChatComponent = WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize(text))); - } - else { - text = ConfigManager.Main.placeholderAPI ? - CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(player, ConfigManager.Bubbles.prefix) + bubbleConfig.format() + text + CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(player, ConfigManager.Bubbles.suffix) - : - ConfigManager.Bubbles.prefix + text + ConfigManager.Bubbles.suffix; - String stripped = MiniMessage.miniMessage().stripTags(text); - if (stripped.length() > ConfigManager.Bubbles.maxChar) return; - String bubble = NameplateUtil.makeCustomBubble("", stripped, "", bubbleConfig); - String suffix = NameplateUtil.getSuffixChar(stripped); - Component armorStand_Name = Component.text(bubble).font(ConfigManager.Main.key) - .append(MiniMessage.miniMessage().deserialize(text).font(Key.key("minecraft:default"))) - .append(Component.text(suffix).font(ConfigManager.Main.key)); - wrappedChatComponent = WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(armorStand_Name)); - } - ArmorStandManager asm = getArmorStandManager(player); - asm.ascent(); - String name = UUID.randomUUID().toString(); - FakeArmorStand fakeArmorStand = new FakeArmorStand(asm, player, wrappedChatComponent); - asm.addArmorStand(name, fakeArmorStand); - asm.countdown(name, fakeArmorStand); - } -} diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/rd/RidingTag.java b/src/main/java/net/momirealms/customnameplates/nameplates/mode/rd/RidingTag.java deleted file mode 100644 index 03dd261..0000000 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/rd/RidingTag.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.nameplates.mode.rd; - -import net.momirealms.customnameplates.ConfigManager; -import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.ArmorStandManager; -import net.momirealms.customnameplates.nameplates.mode.EntityTag; -import net.momirealms.customnameplates.nameplates.mode.EventListenerE; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; -import org.bukkit.scheduler.BukkitTask; - -public class RidingTag extends EntityTag { - - private RdPacketsHandler handler; - - private EventListenerE listener; - - private BukkitTask refreshTask; - - public RidingTag(String name) { - super(name); - } - - @Override - public void load() { - for (Player all : Bukkit.getOnlinePlayers()) { - ArmorStandManager asm = new ArmorStandManager(all); - asm.addDefault(); - armorStandManagerMap.put(all, asm); - CustomNameplates.instance.getTeamPacketManager().sendUpdateToOne(all); - CustomNameplates.instance.getTeamPacketManager().sendUpdateToAll(all, true); - for (Player player : Bukkit.getOnlinePlayers()) - ridingArmorStands(player, all); - } - this.handler = new RdPacketsHandler("RdHandler", this); - this.handler.load(); - listener = new EventListenerE(this); - Bukkit.getPluginManager().registerEvents(listener, CustomNameplates.instance); - if (ConfigManager.Nameplate.update) { - refreshTask = Bukkit.getScheduler().runTaskTimerAsynchronously(CustomNameplates.instance, () -> { - for (ArmorStandManager asm : armorStandManagerMap.values()) { - asm.refresh(false); - } - }, 20, ConfigManager.Nameplate.refresh); - } - else { - Bukkit.getScheduler().runTaskLaterAsynchronously(CustomNameplates.instance, () -> { - for (ArmorStandManager asm : armorStandManagerMap.values()) { - asm.refresh(false); - } - }, 20); - } - } - - @Override - public void unload() { - if (refreshTask != null) { - refreshTask.cancel(); - } - this.handler.unload(); - HandlerList.unregisterAll(listener); - super.unload(); - } - - -// @Override -// public void onRP(Player player, PlayerResourcePackStatusEvent.Status status) { -// super.onRP(player, status); -// } - - @Override - public ArmorStandManager getArmorStandManager(Player player) { - return super.getArmorStandManager(player); - } - - @Override - public void onSneak(Player player, boolean isSneaking) { - getArmorStandManager(player).setSneak(isSneaking, false); - } - - @Override - public void onRespawn(Player player) { - //getArmorStandManager(player).teleport(); - } - - private void ridingArmorStands(Player viewer, Player target) { - if (target == viewer) return; - if (viewer.getWorld() != target.getWorld()) return; - if (getDistance(target, viewer) < 48 && viewer.canSee(target)) { - ArmorStandManager asm = getArmorStandManager(target); - asm.spawn(viewer); - Bukkit.getScheduler().runTaskAsynchronously(CustomNameplates.instance, () -> { - asm.mount(viewer); - }); - } - } - - private double getDistance(Player player1, Player player2) { - Location loc1 = player1.getLocation(); - Location loc2 = player2.getLocation(); - return Math.sqrt(Math.pow(loc1.getX()-loc2.getX(), 2) + Math.pow(loc1.getZ()-loc2.getZ(), 2)); - } - - @Override - public void onJoin(Player player) { - ArmorStandManager asm = new ArmorStandManager(player); - asm.addDefault(); - armorStandManagerMap.put(player, asm); - for (Player viewer : Bukkit.getOnlinePlayers()) { - spawnArmorStands(viewer, player); - spawnArmorStands(player, viewer); - } - super.onJoin(player); - } - - private void spawnArmorStands(Player viewer, Player target) { - if (target == viewer) return; - if (viewer.getWorld() != target.getWorld()) return; - if (getDistance(target, viewer) < 48 && viewer.canSee(target)) - getArmorStandManager(target).spawn(viewer); - } - - @Override - public void onQuit(Player player) { -// for (Player all : Bukkit.getOnlinePlayers()) { -// if (getArmorStandManager(all) == null) continue; -// getArmorStandManager(all) .unregisterPlayer(player); -// } - ArmorStandManager asm = armorStandManagerMap.remove(player); - if (asm != null) { - asm.destroy(); - } - super.onQuit(player); - } -} diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/tm/TeamTag.java b/src/main/java/net/momirealms/customnameplates/nameplates/mode/tm/TeamTag.java deleted file mode 100644 index db1d1a0..0000000 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/tm/TeamTag.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.nameplates.mode.tm; - -import net.momirealms.customnameplates.ConfigManager; -import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.NameplatesTeam; -import net.momirealms.customnameplates.nameplates.TeamManager; -import net.momirealms.customnameplates.nameplates.mode.EventListener; -import net.momirealms.customnameplates.nameplates.mode.NameplateManager; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; -import org.bukkit.scheduler.BukkitTask; - -import java.util.HashMap; - -public class TeamTag extends NameplateManager { - - private EventListener listener; - - private BukkitTask task; - - private final TeamManager teamManager; - - private final HashMap taskCache = new HashMap<>(); - - public TeamTag(String name, TeamManager teamManager) { - super(name); - this.teamManager = teamManager; - } - - @Override - public void load() { - listener = new EventListener(this); - - Bukkit.getPluginManager().registerEvents(listener, CustomNameplates.instance); - - for (Player player : Bukkit.getOnlinePlayers()) { - CustomNameplates.instance.getTeamPacketManager().sendUpdateToAll(player, true); - CustomNameplates.instance.getTeamPacketManager().sendUpdateToOne(player); - } - - if (!ConfigManager.Nameplate.update) return; - - task = Bukkit.getScheduler().runTaskTimerAsynchronously(CustomNameplates.instance, () -> { - for (Player player : Bukkit.getOnlinePlayers()) { - String teamName = TeamManager.getTeamName(player); - NameplatesTeam nameplatesTeam = teamManager.getTeams().get(teamName); - if (nameplatesTeam != null) { - nameplatesTeam.updateNameplates(); - CustomNameplates.instance.getTeamPacketManager().sendUpdateToAll(player, false); - } - } - }, 20, ConfigManager.Nameplate.refresh); - } - - @Override - public void unload() { - HandlerList.unregisterAll(listener); - taskCache.clear(); - if (task != null) task.cancel(); - } - - @Override - public void onJoin(Player player) { - super.onJoin(player); - } - - @Override - public void onQuit(Player player) { - BukkitTask bukkitTask = taskCache.remove(player); - if (bukkitTask != null) bukkitTask.cancel(); - super.onQuit(player); - } - -// @Override -// public void onRP(Player player, PlayerResourcePackStatusEvent.Status status) { -// super.onRP(player, status); -// } -} diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/tmpackets/TeamPacketUtil.java b/src/main/java/net/momirealms/customnameplates/nameplates/mode/tmpackets/TeamPacketUtil.java deleted file mode 100644 index ec58b40..0000000 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/tmpackets/TeamPacketUtil.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.nameplates.mode.tmpackets; - -import com.comphenix.protocol.PacketType; -import com.comphenix.protocol.events.InternalStructure; -import com.comphenix.protocol.events.PacketContainer; -import com.comphenix.protocol.utility.MinecraftReflection; -import com.comphenix.protocol.wrappers.WrappedChatComponent; -import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; -import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.TeamManager; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; - -import java.lang.reflect.InvocationTargetException; -import java.util.Collections; -import java.util.Optional; - -public class TeamPacketUtil { - - public static void clearTeamInfo() { - for (Player all : Bukkit.getOnlinePlayers()) { - for (Player player : Bukkit.getOnlinePlayers()) { - PacketContainer packet = new PacketContainer(PacketType.Play.Server.SCOREBOARD_TEAM); - packet.getIntegers().write(0,2); - String teamName = TeamManager.getTeamName(all); - packet.getStrings().write(0, teamName); - Optional optional = packet.getOptionalStructures().read(0); - if (optional.isEmpty()) return; - InternalStructure internalStructure = optional.get(); - internalStructure.getStrings().write(0, "always"); - internalStructure.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0,ChatColor.WHITE); - try { - CustomNameplates.protocolManager.sendServerPacket(player, packet); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } - } - } - } - - public static void createTeamToAll(Player joinPlayer) { - PacketContainer packetToAll = new PacketContainer(PacketType.Play.Server.SCOREBOARD_TEAM); - packetToAll.getIntegers().write(0,0); - packetToAll.getStrings().write(0, joinPlayer.getName()); - packetToAll.getModifier().write(2, Collections.singletonList(joinPlayer.getName())); - Optional optional = packetToAll.getOptionalStructures().read(0); - if (optional.isEmpty()) return; - InternalStructure internalStructure = optional.get(); - internalStructure.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0,ChatColor.WHITE); - for (Player all : Bukkit.getOnlinePlayers()) { - PacketContainer packetToNew = new PacketContainer(PacketType.Play.Server.SCOREBOARD_TEAM); - packetToNew.getIntegers().write(0,0); - packetToNew.getStrings().write(0, all.getName()); - packetToNew.getModifier().write(2, Collections.singletonList(all.getName())); - Optional optional2 = packetToNew.getOptionalStructures().read(0); - if (optional2.isEmpty()) return; - InternalStructure internalStructure2 = optional.get(); - internalStructure2.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0,ChatColor.WHITE); - try { - Bukkit.getScheduler().runTaskLaterAsynchronously(CustomNameplates.instance, () -> { - CustomNameplates.instance.getTeamPacketManager().sendUpdateToOne(joinPlayer); - },100); - CustomNameplates.protocolManager.sendServerPacket(joinPlayer, packetToNew); - if (joinPlayer != all) CustomNameplates.protocolManager.sendServerPacket(all, packetToAll); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } - } - } - - public static void destroyTeamToAll(Player quitPlayer) { - PacketContainer packetToAll = new PacketContainer(PacketType.Play.Server.SCOREBOARD_TEAM); - packetToAll.getIntegers().write(0,1); - packetToAll.getStrings().write(0, quitPlayer.getName()); - for (Player all : Bukkit.getOnlinePlayers()) { - try { - CustomNameplates.protocolManager.sendServerPacket(all, packetToAll); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } - } - } -} diff --git a/src/main/java/net/momirealms/customnameplates/Function.java b/src/main/java/net/momirealms/customnameplates/objects/Function.java similarity index 81% rename from src/main/java/net/momirealms/customnameplates/Function.java rename to src/main/java/net/momirealms/customnameplates/objects/Function.java index 6e6f695..3a06aa8 100644 --- a/src/main/java/net/momirealms/customnameplates/Function.java +++ b/src/main/java/net/momirealms/customnameplates/objects/Function.java @@ -15,23 +15,21 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates; +package net.momirealms.customnameplates.objects; + +import org.bukkit.entity.Player; public abstract class Function { - private final String name; - - protected Function(String name) { - this.name = name; - } - public void load() { } public void unload() { } - public String getName() { - return name; + public void onJoin(Player player) { + } + + public void onQuit(Player player) { } } diff --git a/src/main/java/net/momirealms/customnameplates/objects/TextCache.java b/src/main/java/net/momirealms/customnameplates/objects/TextCache.java index df35159..53c016e 100644 --- a/src/main/java/net/momirealms/customnameplates/objects/TextCache.java +++ b/src/main/java/net/momirealms/customnameplates/objects/TextCache.java @@ -17,7 +17,6 @@ package net.momirealms.customnameplates.objects; -import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; import org.bukkit.entity.Player; @@ -26,25 +25,18 @@ import java.util.List; public class TextCache { - //所属玩家 private final Player owner; - //初始值 - private final String rawValue; - //原始文字加工后的值 private String originalValue; - //最近一次替换值 private String latestValue; - //持有者占位符 private String[] ownerPlaceholders; public TextCache(Player owner, String rawValue) { this.owner = owner; - this.rawValue = rawValue; - analyze(this.rawValue); + analyze(rawValue); } private void analyze(String value) { - List placeholdersOwner = new ArrayList<>(CustomNameplates.instance.getPlaceholderManager().detectPlaceholders(value)); + List placeholdersOwner = new ArrayList<>(CustomNameplates.plugin.getPlaceholderManager().detectPlaceholders(value)); String origin = value; for (String placeholder : placeholdersOwner) { origin = origin.replace(placeholder, "%s"); @@ -55,31 +47,20 @@ public class TextCache { update(); } - public String getRawValue() { - return rawValue; - } - - public String updateAndGet() { - update(); - return getLatestValue(); - } - public String getLatestValue() { return latestValue; } - //返回更新结果是否不一致 public boolean update() { if (ownerPlaceholders.length == 0) return false; - if (!ConfigManager.Main.placeholderAPI) return false; String string; if ("%s".equals(originalValue)) { - string = CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(owner, ownerPlaceholders[0]); + string = CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(owner, ownerPlaceholders[0]); } else { Object[] values = new String[ownerPlaceholders.length]; for (int i = 0; i < ownerPlaceholders.length; i++) { - values[i] = CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(owner, ownerPlaceholders[i]); + values[i] = CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(owner, ownerPlaceholders[i]); } string = String.format(originalValue, values); } @@ -90,8 +71,7 @@ public class TextCache { return false; } - public String getViewerText(Player viewer) { - //还没写完 + public String getLatestText() { return latestValue; } } diff --git a/src/main/java/net/momirealms/customnameplates/actionbar/ActionBarConfig.java b/src/main/java/net/momirealms/customnameplates/objects/actionbar/ActionBarConfig.java similarity index 91% rename from src/main/java/net/momirealms/customnameplates/actionbar/ActionBarConfig.java rename to src/main/java/net/momirealms/customnameplates/objects/actionbar/ActionBarConfig.java index d27815b..0d56e39 100644 --- a/src/main/java/net/momirealms/customnameplates/actionbar/ActionBarConfig.java +++ b/src/main/java/net/momirealms/customnameplates/objects/actionbar/ActionBarConfig.java @@ -15,9 +15,9 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.actionbar; +package net.momirealms.customnameplates.objects.actionbar; -import net.momirealms.customnameplates.requirements.Requirement; +import net.momirealms.customnameplates.objects.requirements.Requirement; import java.util.List; diff --git a/src/main/java/net/momirealms/customnameplates/actionbar/ActionBarTask.java b/src/main/java/net/momirealms/customnameplates/objects/actionbar/ActionBarTask.java similarity index 84% rename from src/main/java/net/momirealms/customnameplates/actionbar/ActionBarTask.java rename to src/main/java/net/momirealms/customnameplates/objects/actionbar/ActionBarTask.java index 37e9389..4573eab 100644 --- a/src/main/java/net/momirealms/customnameplates/actionbar/ActionBarTask.java +++ b/src/main/java/net/momirealms/customnameplates/objects/actionbar/ActionBarTask.java @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.actionbar; +package net.momirealms.customnameplates.objects.actionbar; -import net.momirealms.customnameplates.ConfigManager; +import me.clip.placeholderapi.PlaceholderAPI; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.requirements.PlayerCondition; -import net.momirealms.customnameplates.requirements.Requirement; +import net.momirealms.customnameplates.objects.requirements.PlayerCondition; +import net.momirealms.customnameplates.objects.requirements.Requirement; import net.momirealms.customnameplates.utils.AdventureUtil; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -79,11 +79,11 @@ public class ActionBarTask { } } - AdventureUtil.playerActionbar(player, ConfigManager.Main.placeholderAPI ? CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(player, text) : text); + AdventureUtil.playerActionbar(player, PlaceholderAPI.setPlaceholders(player, text)); } } } - }.runTaskTimerAsynchronously(CustomNameplates.instance, 1, 1); + }.runTaskTimerAsynchronously(CustomNameplates.plugin, 1, 1); } public void stop() { diff --git a/src/main/java/net/momirealms/customnameplates/objects/BackGround.java b/src/main/java/net/momirealms/customnameplates/objects/background/BackGround.java similarity index 93% rename from src/main/java/net/momirealms/customnameplates/objects/BackGround.java rename to src/main/java/net/momirealms/customnameplates/objects/background/BackGround.java index 991bcc7..ffca79e 100644 --- a/src/main/java/net/momirealms/customnameplates/objects/BackGround.java +++ b/src/main/java/net/momirealms/customnameplates/objects/background/BackGround.java @@ -15,12 +15,10 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.objects; +package net.momirealms.customnameplates.objects.background; -import net.momirealms.customnameplates.font.FontOffset; -import net.momirealms.customnameplates.resource.ResourceManager; - -import java.util.HashMap; +import net.momirealms.customnameplates.objects.SimpleChar; +import net.momirealms.customnameplates.objects.font.FontOffset; public record BackGround(SimpleChar start, SimpleChar offset_1, SimpleChar offset_2, SimpleChar offset_4, diff --git a/src/main/java/net/momirealms/customnameplates/objects/BackGroundText.java b/src/main/java/net/momirealms/customnameplates/objects/background/BackGroundText.java similarity index 93% rename from src/main/java/net/momirealms/customnameplates/objects/BackGroundText.java rename to src/main/java/net/momirealms/customnameplates/objects/background/BackGroundText.java index 6c9b719..fe02de3 100644 --- a/src/main/java/net/momirealms/customnameplates/objects/BackGroundText.java +++ b/src/main/java/net/momirealms/customnameplates/objects/background/BackGroundText.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.objects; +package net.momirealms.customnameplates.objects.background; public record BackGroundText(String text, String background) { diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/BossBarConfig.java b/src/main/java/net/momirealms/customnameplates/objects/bossbar/BossBarConfig.java similarity index 93% rename from src/main/java/net/momirealms/customnameplates/bossbar/BossBarConfig.java rename to src/main/java/net/momirealms/customnameplates/objects/bossbar/BossBarConfig.java index 9e8d804..3561b96 100644 --- a/src/main/java/net/momirealms/customnameplates/bossbar/BossBarConfig.java +++ b/src/main/java/net/momirealms/customnameplates/objects/bossbar/BossBarConfig.java @@ -15,9 +15,9 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.bossbar; +package net.momirealms.customnameplates.objects.bossbar; -import net.momirealms.customnameplates.requirements.Requirement; +import net.momirealms.customnameplates.objects.requirements.Requirement; import org.bukkit.boss.BarColor; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/Sender.java b/src/main/java/net/momirealms/customnameplates/objects/bossbar/BossBarSender.java similarity index 96% rename from src/main/java/net/momirealms/customnameplates/bossbar/Sender.java rename to src/main/java/net/momirealms/customnameplates/objects/bossbar/BossBarSender.java index 16f4f05..a5866f5 100644 --- a/src/main/java/net/momirealms/customnameplates/bossbar/Sender.java +++ b/src/main/java/net/momirealms/customnameplates/objects/bossbar/BossBarSender.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.bossbar; +package net.momirealms.customnameplates.objects.bossbar; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.InternalStructure; @@ -23,9 +23,9 @@ import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.WrappedChatComponent; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import net.momirealms.customnameplates.CustomNameplates; import net.momirealms.customnameplates.objects.TextCache; import net.momirealms.customnameplates.utils.AdventureUtil; -import net.momirealms.customnameplates.CustomNameplates; import net.momirealms.customnameplates.utils.Reflection; import org.bukkit.boss.BarColor; import org.bukkit.entity.Player; @@ -35,7 +35,7 @@ import org.bukkit.scheduler.BukkitTask; import java.lang.reflect.InvocationTargetException; import java.util.UUID; -public class Sender { +public class BossBarSender { private final Player player; private int timer_1; @@ -55,7 +55,7 @@ public class Sender { this.force = true; } - public Sender(Player player, BossBarConfig config){ + public BossBarSender(Player player, BossBarConfig config){ String[] str = config.getText(); this.size = str.length; texts = new TextCache[str.length]; @@ -108,7 +108,7 @@ public class Sender { } } } - }.runTaskTimerAsynchronously(CustomNameplates.instance,1,1); + }.runTaskTimerAsynchronously(CustomNameplates.plugin,1,1); } private PacketContainer getPacket() { diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/Overlay.java b/src/main/java/net/momirealms/customnameplates/objects/bossbar/Overlay.java similarity index 93% rename from src/main/java/net/momirealms/customnameplates/bossbar/Overlay.java rename to src/main/java/net/momirealms/customnameplates/objects/bossbar/Overlay.java index 8e3a754..9af2c26 100644 --- a/src/main/java/net/momirealms/customnameplates/bossbar/Overlay.java +++ b/src/main/java/net/momirealms/customnameplates/objects/bossbar/Overlay.java @@ -15,12 +15,14 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.bossbar; +package net.momirealms.customnameplates.objects.bossbar; public enum Overlay { + NOTCHED_6, NOTCHED_10, NOTCHED_12, NOTCHED_20, PROGRESS + } diff --git a/src/main/java/net/momirealms/customnameplates/bossbar/TimerTaskP.java b/src/main/java/net/momirealms/customnameplates/objects/bossbar/TimerTaskP.java similarity index 61% rename from src/main/java/net/momirealms/customnameplates/bossbar/TimerTaskP.java rename to src/main/java/net/momirealms/customnameplates/objects/bossbar/TimerTaskP.java index d57b4bb..9bf256d 100644 --- a/src/main/java/net/momirealms/customnameplates/bossbar/TimerTaskP.java +++ b/src/main/java/net/momirealms/customnameplates/objects/bossbar/TimerTaskP.java @@ -15,12 +15,11 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.bossbar; +package net.momirealms.customnameplates.objects.bossbar; -import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.requirements.PlayerCondition; -import net.momirealms.customnameplates.requirements.Requirement; +import net.momirealms.customnameplates.objects.requirements.PlayerCondition; +import net.momirealms.customnameplates.objects.requirements.Requirement; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; @@ -30,15 +29,15 @@ import java.util.List; public class TimerTaskP { - private final List bossBarCache = new ArrayList<>(); + private final List bossBarCache = new ArrayList<>(); private final BukkitTask conditionTask; public TimerTaskP(Player player){ - for (BossBarConfig config : ConfigManager.bossBars.values()) { - Sender sender = new Sender(player, config); - bossBarCache.add(sender); + for (BossBarConfig config : CustomNameplates.plugin.getBossBarManager().getBossBars().values()) { + BossBarSender bossBarSender = new BossBarSender(player, config); + bossBarCache.add(bossBarSender); } this.conditionTask = new BukkitRunnable() { @@ -48,29 +47,31 @@ public class TimerTaskP { PlayerCondition playerCondition = new PlayerCondition(player.getLocation(), player); outer: - for (Sender sender : bossBarCache) { - for (Requirement requirement : sender.getConfig().getConditions()) { + for (BossBarSender bossBarSender : bossBarCache) { + for (Requirement requirement : bossBarSender.getConfig().getConditions()) { if (!requirement.isConditionMet(playerCondition)) { - if (sender.getStatus()) { - sender.hide(); + if (bossBarSender.getStatus()) { + bossBarSender.hide(); } continue outer; } } - if (!sender.getStatus()) { - sender.show(); + if (!bossBarSender.getStatus()) { + bossBarSender.show(); } } } - }.runTaskTimerAsynchronously(CustomNameplates.instance, 1, 20); + }.runTaskTimerAsynchronously(CustomNameplates.plugin, 1, 20); } public void stopTimer(){ if (this.conditionTask != null) { this.conditionTask.cancel(); } - bossBarCache.forEach(Sender::hide); + for (BossBarSender bossBarSender : bossBarCache) { + bossBarSender.hide(); + } bossBarCache.clear(); } } diff --git a/src/main/java/net/momirealms/customnameplates/objects/data/DataStorageInterface.java b/src/main/java/net/momirealms/customnameplates/objects/data/DataStorageInterface.java new file mode 100644 index 0000000..5dd7640 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/objects/data/DataStorageInterface.java @@ -0,0 +1,12 @@ +package net.momirealms.customnameplates.objects.data; + +import org.bukkit.OfflinePlayer; + +public interface DataStorageInterface { + + void initialize(); + void disable(); + PlayerData loadData(OfflinePlayer player); + void saveData(PlayerData playerData); + +} diff --git a/src/main/java/net/momirealms/customnameplates/objects/data/FileStorageImpl.java b/src/main/java/net/momirealms/customnameplates/objects/data/FileStorageImpl.java new file mode 100644 index 0000000..dd0aaec --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/objects/data/FileStorageImpl.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.objects.data; + +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.manager.ChatBubblesManager; +import net.momirealms.customnameplates.manager.NameplateManager; +import net.momirealms.customnameplates.utils.ConfigUtil; +import org.bukkit.OfflinePlayer; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.io.IOException; + +public class FileStorageImpl implements DataStorageInterface { + + @Override + public void initialize() { + + } + + @Override + public void disable() { + + } + + @Override + public PlayerData loadData(OfflinePlayer player) { + YamlConfiguration data = ConfigUtil.readData(new File(CustomNameplates.plugin.getDataFolder(), "player_data" + File.separator + player.getUniqueId() + ".yml")); + String bubbles = data.getString("bubbles", ChatBubblesManager.defaultBubble); + String nameplate = data.getString("nameplate", NameplateManager.defaultNameplate); + PlayerData playerData = new PlayerData(player, nameplate, bubbles); + saveData(playerData); + return playerData; + } + + @Override + public void saveData(PlayerData playerData) { + YamlConfiguration data = new YamlConfiguration(); + data.set("bubbles", playerData.getBubbles()); + data.set("nameplate", playerData.getEquippedNameplate()); + try { + data.save(new File(CustomNameplates.plugin.getDataFolder(), "player_data" + File.separator + playerData.getPlayer().getUniqueId() + ".yml")); + } + catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/net/momirealms/customnameplates/objects/data/MySQLStorageImpl.java b/src/main/java/net/momirealms/customnameplates/objects/data/MySQLStorageImpl.java new file mode 100644 index 0000000..8ef89bb --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/objects/data/MySQLStorageImpl.java @@ -0,0 +1,126 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.objects.data; + +import net.momirealms.customnameplates.manager.ChatBubblesManager; +import net.momirealms.customnameplates.manager.NameplateManager; +import net.momirealms.customnameplates.utils.AdventureUtil; +import org.bukkit.OfflinePlayer; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.UUID; + +public class MySQLStorageImpl implements DataStorageInterface { + + public static SqlConnection sqlConnection = new SqlConnection(); + + @Override + public void initialize() { + sqlConnection.createNewHikariConfiguration(); + createTableIfNotExist(sqlConnection.getTable_name()); + } + + @Override + public void disable() { + sqlConnection.close(); + } + + @Override + public PlayerData loadData(OfflinePlayer player) { + PlayerData playerData = null; + try { + Connection connection = sqlConnection.getConnectionAndCheck(); + String sql = String.format(SqlConstants.SQL_SELECT_BY_UUID, sqlConnection.getTable_name()); + PreparedStatement statement = connection.prepareStatement(sql); + statement.setString(1, player.getUniqueId().toString()); + ResultSet rs = statement.executeQuery(); + if (rs.next()) { + String nameplate = rs.getString(2); + String bubbles = rs.getString(3); + playerData = new PlayerData(player, nameplate, bubbles); + } + else { + playerData = new PlayerData(player, NameplateManager.defaultNameplate, ChatBubblesManager.defaultBubble); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return playerData; + } + + @Override + public void saveData(PlayerData playerData) { + UUID uuid = playerData.getPlayer().getUniqueId(); + if (exists(uuid)) { + updateData(uuid, playerData.getEquippedNameplate(), playerData.getBubbles()); + } + else { + insertData(uuid, playerData.getEquippedNameplate(), playerData.getBubbles()); + } + } + + private void createTableIfNotExist(String table) { + String sql = String.format(SqlConstants.SQL_CREATE_TABLE, table); + try (Connection connection = sqlConnection.getConnection(); PreparedStatement statement = connection.prepareStatement(sql)) { + statement.executeUpdate(); + } catch (SQLException ex) { + AdventureUtil.consoleMessage("[CustomNameplates] Failed to create table"); + } + } + + private void insertData(UUID uuid, String nameplate, String bubbles) { + String sql = String.format(SqlConstants.SQL_INSERT, sqlConnection.getTable_name()); + try (Connection connection = sqlConnection.getConnection(); PreparedStatement statement = connection.prepareStatement(sql)) { + statement.setString(1, uuid.toString()); + statement.setString(2, nameplate); + statement.setString(3, bubbles); + statement.executeUpdate(); + } catch (SQLException ex) { + AdventureUtil.consoleMessage("[CustomNameplates] Failed to insert data for " + uuid); + } + } + + private void updateData(UUID uuid, String nameplate, String bubbles) { + String sql = String.format(SqlConstants.SQL_UPDATE_BY_UUID, sqlConnection.getTable_name()); + try (Connection connection = sqlConnection.getConnection(); PreparedStatement statement = connection.prepareStatement(sql)) { + statement.setString(1, nameplate); + statement.setString(2, bubbles); + statement.setString(3, uuid.toString()); + statement.executeUpdate(); + } catch (SQLException ex) { + AdventureUtil.consoleMessage("[CustomNameplates] Failed to update data for " + uuid); + } + } + + public boolean exists(UUID uuid) { + String sql = String.format(SqlConstants.SQL_SELECT_BY_UUID, sqlConnection.getTable_name()); + boolean exist; + try (Connection connection = sqlConnection.getConnection(); PreparedStatement statement = connection.prepareStatement(sql)) { + statement.setString(1, uuid.toString()); + ResultSet rs = statement.executeQuery(); + exist = rs.next(); + } catch (SQLException ex) { + AdventureUtil.consoleMessage("[CustomNameplates] Failed to select data for " + uuid); + return false; + } + return exist; + } +} diff --git a/src/main/java/net/momirealms/customnameplates/data/PlayerData.java b/src/main/java/net/momirealms/customnameplates/objects/data/PlayerData.java similarity index 74% rename from src/main/java/net/momirealms/customnameplates/data/PlayerData.java rename to src/main/java/net/momirealms/customnameplates/objects/data/PlayerData.java index 48102b6..cc79cf1 100644 --- a/src/main/java/net/momirealms/customnameplates/data/PlayerData.java +++ b/src/main/java/net/momirealms/customnameplates/objects/data/PlayerData.java @@ -15,30 +15,21 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.data; +package net.momirealms.customnameplates.objects.data; + +import org.bukkit.OfflinePlayer; public class PlayerData { - - public static PlayerData EMPTY = new PlayerData("none","none"); - private String equipped; private String bubbles; -// private boolean accepted; + private final OfflinePlayer player; - public PlayerData(String equipped, String bubbles) { + public PlayerData(OfflinePlayer player, String equipped, String bubbles) { this.equipped = equipped; this.bubbles = bubbles; -// this.accepted = accepted; + this.player = player; } -// public boolean getAccepted(){ -// return this.accepted; -// } -// -// public void setAccepted(boolean accepted){ -// this.accepted = accepted; -// } - public String getEquippedNameplate() { return this.equipped; } @@ -54,4 +45,8 @@ public class PlayerData { public void setBubbles(String bubbles) { this.bubbles = bubbles; } + + public OfflinePlayer getPlayer() { + return player; + } } diff --git a/src/main/java/net/momirealms/customnameplates/objects/data/SqlConnection.java b/src/main/java/net/momirealms/customnameplates/objects/data/SqlConnection.java new file mode 100644 index 0000000..e480c33 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/objects/data/SqlConnection.java @@ -0,0 +1,137 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.objects.data; + +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import com.zaxxer.hikari.pool.HikariPool; +import net.momirealms.customnameplates.utils.AdventureUtil; +import net.momirealms.customnameplates.utils.ConfigUtil; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.sql.Connection; +import java.sql.SQLException; + +public class SqlConnection { + + private boolean secondTry = false; + private boolean firstTry = false; + private HikariDataSource hikariDataSource; + private String table_name; + + public void createNewHikariConfiguration() { + + YamlConfiguration config = ConfigUtil.getConfig("database.yml"); + String storageMode = config.getString("data-storage-method", "MySQL"); + + HikariConfig hikariConfig = new HikariConfig(); + String sql = "mysql"; + if (storageMode.equalsIgnoreCase("MariaDB")) { + hikariConfig.setDriverClassName("org.mariadb.jdbc.Driver"); + sql = "mariadb"; + } + table_name = config.getString(storageMode + ".table"); + hikariConfig.setPoolName("[CustomNameplates]"); + hikariConfig.setJdbcUrl(String.format("jdbc:%s://%s/%s", sql, config.getString(storageMode + ".host") + ":" + config.getString(storageMode + ".port"), config.getString(storageMode + ".database"))); + hikariConfig.setUsername(config.getString(storageMode + ".user")); + hikariConfig.setPassword(config.getString(storageMode + ".password")); + hikariConfig.setMaximumPoolSize(config.getInt(storageMode + ".Pool-Settings.maximum-pool-size")); + hikariConfig.setMinimumIdle(config.getInt(storageMode + ".Pool-Settings.minimum-idle")); + hikariConfig.setMaxLifetime(config.getInt(storageMode + ".Pool-Settings.maximum-lifetime")); + for (String property : config.getConfigurationSection(storageMode + ".properties").getKeys(false)) { + hikariConfig.addDataSourceProperty(property, config.getString(storageMode + ".properties." + property)); + } + if (hikariConfig.getMinimumIdle() < hikariConfig.getMaximumPoolSize()) { + hikariConfig.setIdleTimeout(config.getInt(storageMode + ".Pool-Settings.idle-timeout")); + } else { + hikariConfig.setIdleTimeout(0); + } + + try { + hikariDataSource = new HikariDataSource(hikariConfig); + + } catch (HikariPool.PoolInitializationException e) { + AdventureUtil.consoleMessage("[CustomNameplates] Failed to create sql connection"); + } + AdventureUtil.consoleMessage("[CustomNameplates] Storage Mode: " + storageMode); + } + + public boolean setGlobalConnection() { + try { + createNewHikariConfiguration(); + Connection connection = getConnection(); + connection.close(); + if (secondTry) { + AdventureUtil.consoleMessage("[CustomNameplates] Successfully reconnect to SQL!"); + } else { + secondTry = true; + } + return true; + } catch (SQLException e) { + AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to connect to SQL!"); + e.printStackTrace(); + close(); + return false; + } + } + + public Connection getConnection() throws SQLException { + return hikariDataSource.getConnection(); + } + + public boolean canConnect() { + if (hikariDataSource == null) { + return setGlobalConnection(); + } + if (hikariDataSource.isClosed()) { + return setGlobalConnection(); + } + return true; + } + + public void close() { + if (hikariDataSource != null && hikariDataSource.isRunning()) { + hikariDataSource.close(); + } + } + + public String getTable_name() { + return table_name; + } + + public Connection getConnectionAndCheck() { + if (!canConnect()) { + return null; + } + try { + return getConnection(); + } catch (SQLException e) { + if (firstTry) { + firstTry = false; + close(); + return getConnectionAndCheck(); + } else { + firstTry = true; + AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to connect to SQL!"); + close(); + e.printStackTrace(); + return null; + } + } + } +} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/objects/data/SqlConstants.java b/src/main/java/net/momirealms/customnameplates/objects/data/SqlConstants.java new file mode 100644 index 0000000..6a238e7 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/objects/data/SqlConstants.java @@ -0,0 +1,9 @@ +package net.momirealms.customnameplates.objects.data; + +public class SqlConstants { + + public static final String SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS `%s` ( `uuid` VARCHAR(36) NOT NULL , `equipped` VARCHAR(32) NOT NULL , `bubble` VARCHAR(32) NOT NULL , PRIMARY KEY (`uuid`) )"; + public static final String SQL_INSERT = "INSERT INTO `%s`(`uuid`, `equipped`, `bubble`) VALUES (?, ?, ?)"; + public static final String SQL_UPDATE_BY_UUID = "UPDATE `%s` SET `equipped` = ?, `bubble` = ? WHERE `uuid` = ?"; + public static final String SQL_SELECT_BY_UUID = "SELECT * FROM `%s` WHERE `uuid` = ?"; +} diff --git a/src/main/java/net/momirealms/customnameplates/font/FontChar.java b/src/main/java/net/momirealms/customnameplates/objects/font/FontChar.java similarity index 96% rename from src/main/java/net/momirealms/customnameplates/font/FontChar.java rename to src/main/java/net/momirealms/customnameplates/objects/font/FontChar.java index c893ef2..05ea320 100644 --- a/src/main/java/net/momirealms/customnameplates/font/FontChar.java +++ b/src/main/java/net/momirealms/customnameplates/objects/font/FontChar.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.font; +package net.momirealms.customnameplates.objects.font; public record FontChar(char left, char middle, char right) { diff --git a/src/main/java/net/momirealms/customnameplates/font/FontOffset.java b/src/main/java/net/momirealms/customnameplates/objects/font/FontOffset.java similarity index 98% rename from src/main/java/net/momirealms/customnameplates/font/FontOffset.java rename to src/main/java/net/momirealms/customnameplates/objects/font/FontOffset.java index 069751c..c25b49c 100644 --- a/src/main/java/net/momirealms/customnameplates/font/FontOffset.java +++ b/src/main/java/net/momirealms/customnameplates/objects/font/FontOffset.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.font; +package net.momirealms.customnameplates.objects.font; public enum FontOffset { diff --git a/src/main/java/net/momirealms/customnameplates/font/FontUtil.java b/src/main/java/net/momirealms/customnameplates/objects/font/FontUtil.java similarity index 78% rename from src/main/java/net/momirealms/customnameplates/font/FontUtil.java rename to src/main/java/net/momirealms/customnameplates/objects/font/FontUtil.java index 02262b0..36fc345 100644 --- a/src/main/java/net/momirealms/customnameplates/font/FontUtil.java +++ b/src/main/java/net/momirealms/customnameplates/objects/font/FontUtil.java @@ -15,31 +15,25 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.font; +package net.momirealms.customnameplates.objects.font; -import net.momirealms.customnameplates.ConfigManager; +import net.momirealms.customnameplates.manager.WidthManager; import java.util.Objects; public class FontUtil { - /* - 获取每个字符的像素宽度 - */ public static int getInfo(char c) { - return Objects.requireNonNullElse(ConfigManager.fontWidth.get(c), 8); + return Objects.requireNonNullElse(WidthManager.fontWidth.get(c), 8); } - /* - 计算一个字符串的总宽度 - */ public static int getTotalWidth(String s) { int length = s.length(); int n = 0; for (int i = 0; i < length; i++) { n += getInfo(s.charAt(i)); } - return n + length; //总长还需加上字符间距 + return n + length; } public static String getOffset(int offset) { diff --git a/src/main/java/net/momirealms/customnameplates/font/FontWidthNormal.java b/src/main/java/net/momirealms/customnameplates/objects/font/FontWidthNormal.java similarity index 97% rename from src/main/java/net/momirealms/customnameplates/font/FontWidthNormal.java rename to src/main/java/net/momirealms/customnameplates/objects/font/FontWidthNormal.java index dccf362..fd9f1ab 100644 --- a/src/main/java/net/momirealms/customnameplates/font/FontWidthNormal.java +++ b/src/main/java/net/momirealms/customnameplates/objects/font/FontWidthNormal.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.font; +package net.momirealms.customnameplates.objects.font; public enum FontWidthNormal { diff --git a/src/main/java/net/momirealms/customnameplates/font/FontWidthThin.java b/src/main/java/net/momirealms/customnameplates/objects/font/FontWidthThin.java similarity index 97% rename from src/main/java/net/momirealms/customnameplates/font/FontWidthThin.java rename to src/main/java/net/momirealms/customnameplates/objects/font/FontWidthThin.java index ada4f12..5440885 100644 --- a/src/main/java/net/momirealms/customnameplates/font/FontWidthThin.java +++ b/src/main/java/net/momirealms/customnameplates/objects/font/FontWidthThin.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.font; +package net.momirealms.customnameplates.objects.font; public enum FontWidthThin { diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/ArmorStand.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/ArmorStand.java similarity index 95% rename from src/main/java/net/momirealms/customnameplates/nameplates/ArmorStand.java rename to src/main/java/net/momirealms/customnameplates/objects/nameplates/ArmorStand.java index 9b807be..5a466ec 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/ArmorStand.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/ArmorStand.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates; +package net.momirealms.customnameplates.objects.nameplates; import net.momirealms.customnameplates.objects.TextCache; import org.bukkit.entity.Player; diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/ArmorStandManager.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/ArmorStandManager.java similarity index 89% rename from src/main/java/net/momirealms/customnameplates/nameplates/ArmorStandManager.java rename to src/main/java/net/momirealms/customnameplates/objects/nameplates/ArmorStandManager.java index 49a667d..3b067d5 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/ArmorStandManager.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/ArmorStandManager.java @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates; +package net.momirealms.customnameplates.objects.nameplates; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; -import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.manager.ChatBubblesManager; import net.momirealms.customnameplates.objects.TextCache; import net.momirealms.customnameplates.utils.AdventureUtil; import org.bukkit.entity.Player; @@ -41,16 +41,13 @@ public class ArmorStandManager { private Player[] nearbyPlayerArray = new Player[0]; private final Player owner; - public ArmorStandManager(Player owner) { this.owner = owner; } public void addDefault() { - Set> entries = ConfigManager.Nameplate.textMap.entrySet(); - entries.forEach(map -> { - addArmorStand(map.getKey(), new FakeArmorStand(this, owner, new TextCache(owner, map.getKey()), map.getValue())); - }); + Set> entries = CustomNameplates.plugin.getNameplateManager().getTextMap().entrySet(); + entries.forEach(map -> addArmorStand(map.getKey(), new FakeArmorStand(this, owner, new TextCache(owner, map.getKey()), map.getValue()))); } public void addArmorStand(String name, ArmorStand as) { @@ -100,7 +97,7 @@ public class ArmorStandManager { public void ascent() { for (ArmorStand a : armorStandArray) { - a.setOffset(a.getOffset() + ConfigManager.Bubbles.lineSpace); + a.setOffset(a.getOffset() + ChatBubblesManager.lineSpace); a.teleport(); } } @@ -156,6 +153,6 @@ public class ArmorStandManager { armorStands.remove(random); armorStandArray = armorStands.values().toArray(new ArmorStand[0]); } - }.runTaskLater(CustomNameplates.instance, ConfigManager.Bubbles.stayTime * 20L); + }.runTaskLater(CustomNameplates.plugin, ChatBubblesManager.stayTime * 20L); } } \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/BubbleConfig.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/BubbleConfig.java similarity index 95% rename from src/main/java/net/momirealms/customnameplates/nameplates/BubbleConfig.java rename to src/main/java/net/momirealms/customnameplates/objects/nameplates/BubbleConfig.java index 0a830e6..b7c79ef 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/BubbleConfig.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/BubbleConfig.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates; +package net.momirealms.customnameplates.objects.nameplates; import net.momirealms.customnameplates.objects.SimpleChar; diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/FakeArmorStand.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/FakeArmorStand.java similarity index 96% rename from src/main/java/net/momirealms/customnameplates/nameplates/FakeArmorStand.java rename to src/main/java/net/momirealms/customnameplates/objects/nameplates/FakeArmorStand.java index 9d923f7..69c24e5 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/FakeArmorStand.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/FakeArmorStand.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates; +package net.momirealms.customnameplates.objects.nameplates; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; @@ -23,8 +23,9 @@ import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedDataWatcher; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; -import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.manager.ChatBubblesManager; +import net.momirealms.customnameplates.manager.NameplateManager; import net.momirealms.customnameplates.objects.TextCache; import org.bukkit.Location; import org.bukkit.entity.Entity; @@ -64,7 +65,7 @@ public class FakeArmorStand implements ArmorStand { public FakeArmorStand(ArmorStandManager asm, Player owner, WrappedChatComponent wrappedChatComponent) { this.asm = asm; this.owner = owner; - this.yOffset = ConfigManager.Bubbles.yOffset; + this.yOffset = ChatBubblesManager.yOffset; this.wrappedChatComponent = wrappedChatComponent; sneaking = owner.isSneaking(); destroyPacket = new PacketContainer(PacketType.Play.Server.ENTITY_DESTROY); @@ -203,7 +204,7 @@ public class FakeArmorStand implements ArmorStand { for (Player viewer : asm.getNearbyPlayers()) { PacketContainer metaPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA); metaPacket.getIntegers().write(0, entityId); - metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher(getText().getViewerText(viewer), true).getWatchableObjects()); + metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher(getText().getLatestText(), true).getWatchableObjects()); try { CustomNameplates.protocolManager.sendServerPacket(viewer, metaPacket); } @@ -266,7 +267,7 @@ public class FakeArmorStand implements ArmorStand { byte flag = 0x20; //隐身 if (sneaking) flag += (byte) 0x02; wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(0, serializer2), flag); - if (ConfigManager.Nameplate.smallSize) { + if (NameplateManager.smallSize) { wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(15, serializer2), (byte) 0x01); } //设置名字可见 @@ -289,7 +290,7 @@ public class FakeArmorStand implements ArmorStand { PacketContainer metaPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA); metaPacket.getIntegers().write(0, entityId); if (this.wrappedChatComponent == null) { - metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher(getText().getViewerText(viewer), true).getWatchableObjects()); + metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher(getText().getLatestText(), true).getWatchableObjects()); } else { metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher("", false).getWatchableObjects()); diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/NameplateConfig.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplateConfig.java similarity index 95% rename from src/main/java/net/momirealms/customnameplates/nameplates/NameplateConfig.java rename to src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplateConfig.java index aabd794..6c897e5 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/NameplateConfig.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplateConfig.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates; +package net.momirealms.customnameplates.objects.nameplates; import net.momirealms.customnameplates.objects.SimpleChar; import org.bukkit.ChatColor; diff --git a/src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplateMode.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplateMode.java new file mode 100644 index 0000000..2871d10 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplateMode.java @@ -0,0 +1,59 @@ +package net.momirealms.customnameplates.objects.nameplates; + +import net.momirealms.customnameplates.manager.ConfigManager; +import net.momirealms.customnameplates.manager.NameplateManager; +import net.momirealms.customnameplates.manager.TeamManager; +import net.momirealms.customnameplates.objects.Function; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitTask; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +public abstract class NameplateMode extends Function { + + protected BukkitTask refreshTask; + protected TeamManager teamManager; + + public NameplateMode(TeamManager teamManager) { + this.teamManager = teamManager; + } + + @Override + public void load() { + loadToAllPlayers(); + arrangeRefreshTask(); + } + + @Override + public void unload() { + if (refreshTask != null) refreshTask.cancel(); + } + + public void onJoin(Player player) { + + } + + public void onQuit(Player player) { + if (teamManager != null) { + teamManager.removePlayerFromTeamCache(player); + if (NameplateManager.fakeTeam) { + if (ConfigManager.tab_BC_hook || ConfigManager.tab_hook) return; + teamManager.getTeamManagePacketUtil().destroyTeamToAll(player); + } + else { + Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard(); + Team team = scoreboard.getTeam(player.getName()); + if (team != null) team.unregister(); + } + } + } + + public void arrangeRefreshTask() { + //empty + } + + public void loadToAllPlayers() { + //empty + } +} diff --git a/src/main/java/net/momirealms/customnameplates/objects/NameplateText.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplateText.java similarity index 93% rename from src/main/java/net/momirealms/customnameplates/objects/NameplateText.java rename to src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplateText.java index af57bff..fb49d95 100644 --- a/src/main/java/net/momirealms/customnameplates/objects/NameplateText.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplateText.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.objects; +package net.momirealms.customnameplates.objects.nameplates; public record NameplateText(String text, String nameplate) { diff --git a/src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplatesTeam.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplatesTeam.java new file mode 100644 index 0000000..c426b05 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplatesTeam.java @@ -0,0 +1,156 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.objects.nameplates; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.manager.ConfigManager; +import net.momirealms.customnameplates.manager.NameplateManager; +import net.momirealms.customnameplates.manager.TeamManager; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +public class NameplatesTeam { + + private final Player player; + private Component prefix; + private Component suffix; + private String prefixText; + private String suffixText; + private ChatColor color; + private String dynamic; + + public NameplatesTeam(Player player, TeamManager teamManager) { + + this.color = ChatColor.WHITE; + this.player = player; + + updateNameplates(); + + if (!ConfigManager.tab_hook && !ConfigManager.tab_BC_hook) { + if (NameplateManager.fakeTeam) { + teamManager.getTeamManagePacketUtil().createTeamToAll(player); + } + else { + Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard(); + Team teamTemp = scoreboard.getTeam(player.getName()); + if (teamTemp == null) { + teamTemp = scoreboard.registerNewTeam(player.getName()); + } + teamTemp.addEntry(player.getName()); + } + } + } + + public void updateNameplates() { + + String nameplate = CustomNameplates.plugin.getDataManager().getPlayerData(this.player).getEquippedNameplate(); + + if (nameplate.equals("none")) { + this.prefix = MiniMessage.miniMessage().deserialize(CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_prefix)); + this.suffix = MiniMessage.miniMessage().deserialize(CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_suffix)); + + this.prefixText = CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_prefix); + this.suffixText = CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_suffix); + + this.color = ChatColor.WHITE; + return; + } + + NameplateConfig nameplateConfig = CustomNameplates.plugin.getResourceManager().getNameplateConfig(nameplate); + + if (nameplateConfig == null){ + this.prefix = Component.text(""); + this.suffix = Component.text(""); + this.prefixText = ""; + this.suffixText = ""; + this.color = ChatColor.WHITE; + CustomNameplates.plugin.getDataManager().getPlayerData(player).equipNameplate("none"); + return; + } + + String playerPrefix; + String playerSuffix; + + if (!NameplateManager.hidePrefix) playerPrefix = CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_prefix); + else playerPrefix = ""; + if (!NameplateManager.hideSuffix) playerSuffix = CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_suffix); + else playerSuffix = ""; + + this.dynamic = playerPrefix + playerSuffix; + + String name; + if (NameplateManager.player_name.equals("%player_name%")) { + name = this.player.getName(); + } + else { + name = CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(player, NameplateManager.player_name); + } + + this.prefixText = CustomNameplates.plugin.getNameplateManager().makeCustomNameplate( + MiniMessage.miniMessage().stripTags(playerPrefix), + name, + MiniMessage.miniMessage().stripTags(playerSuffix), + nameplateConfig + ); + + this.suffixText = CustomNameplates.plugin.getNameplateManager().getSuffixChar( + MiniMessage.miniMessage().stripTags(playerPrefix) + + name + + MiniMessage.miniMessage().stripTags(playerSuffix) + ); + + this.prefix = Component.text(this.prefixText) + .font(ConfigManager.key) + .append(MiniMessage.miniMessage().deserialize(playerPrefix)); + + this.suffix = MiniMessage.miniMessage().deserialize(playerSuffix) + .append(Component.text(this.suffixText) + .font(ConfigManager.key)); + + this.color = nameplateConfig.color(); + } + + 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 getDynamic() { + return dynamic; + } +} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/tp/TeleportingTag.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/EntityTag.java similarity index 51% rename from src/main/java/net/momirealms/customnameplates/nameplates/mode/tp/TeleportingTag.java rename to src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/EntityTag.java index d31ff67..67fc338 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/tp/TeleportingTag.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/EntityTag.java @@ -15,66 +15,93 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.mode.tp; +package net.momirealms.customnameplates.objects.nameplates.mode; -import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.ArmorStandManager; -import net.momirealms.customnameplates.nameplates.mode.EntityTag; -import net.momirealms.customnameplates.nameplates.mode.EventListenerE; +import net.momirealms.customnameplates.listener.EntityTagListener; +import net.momirealms.customnameplates.manager.NameplateManager; +import net.momirealms.customnameplates.manager.TeamManager; +import net.momirealms.customnameplates.objects.nameplates.ArmorStandManager; +import net.momirealms.customnameplates.objects.nameplates.NameplateMode; import org.bukkit.Bukkit; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; -import org.bukkit.scheduler.BukkitTask; -public class TeleportingTag extends EntityTag { +import java.util.concurrent.ConcurrentHashMap; - private EventListenerE listener; +public abstract class EntityTag extends NameplateMode { - private VehicleChecker vehicleChecker; + protected final ConcurrentHashMap armorStandManagerMap = new ConcurrentHashMap<>(); - private TpPacketsHandler handler; + protected EntityTagListener listener; - private BukkitTask vehicleTask; - - private BukkitTask refreshTask; - - public TeleportingTag(String name) { - super(name); + protected EntityTag(TeamManager teamManager) { + super(teamManager); + this.listener = new EntityTagListener(this); } @Override - public void load() { - for (Player all : Bukkit.getOnlinePlayers()) { - ArmorStandManager asm = new ArmorStandManager(all); - asm.addDefault(); - armorStandManagerMap.put(all, asm); - CustomNameplates.instance.getTeamPacketManager().sendUpdateToOne(all); - CustomNameplates.instance.getTeamPacketManager().sendUpdateToAll(all, true); - for (Player player : Bukkit.getOnlinePlayers()) - spawnArmorStands(player, all); + public void load(){ + super.load(); + Bukkit.getPluginManager().registerEvents(listener, CustomNameplates.plugin); + } + + @Override + public void unload(){ + super.unload(); + for (ArmorStandManager asm : armorStandManagerMap.values()) { + asm.destroy(); } - listener = new EventListenerE(this); - Bukkit.getPluginManager().registerEvents(listener, CustomNameplates.instance); - this.handler = new TpPacketsHandler("TpHandler", this); - this.handler.load(); - this.vehicleChecker = new VehicleChecker(this); - this.vehicleChecker.load(); - this.vehicleTask = Bukkit.getScheduler().runTaskTimerAsynchronously(CustomNameplates.instance, () -> { - for (Player player : Bukkit.getOnlinePlayers()) { - this.vehicleChecker.refresh(player); - } - },10,20); - if (ConfigManager.Nameplate.update) { - refreshTask = Bukkit.getScheduler().runTaskTimerAsynchronously(CustomNameplates.instance, () -> { + armorStandManagerMap.clear(); + HandlerList.unregisterAll(listener); + } + + @Override + public void onJoin(Player player) { + super.onJoin(player); + ArmorStandManager asm = new ArmorStandManager(player); + addDefaultText(asm); + armorStandManagerMap.put(player, asm); + for (Player viewer : Bukkit.getOnlinePlayers()) { + spawnArmorStands(viewer, player, false); + spawnArmorStands(player, viewer, false); + } + } + + @Override + public void onQuit(Player player) { + super.onQuit(player); + ArmorStandManager asm = armorStandManagerMap.remove(player); + if (asm != null) { + asm.destroy(); + } + } + + public void onSneak(Player player, boolean isSneaking) { + //child + } + + public void onRespawn(Player player) { + //child + } + + public void addDefaultText(ArmorStandManager asm) { + asm.addDefault(); + } + + @Override + public void arrangeRefreshTask() { + if (NameplateManager.update) { + refreshTask = Bukkit.getScheduler().runTaskTimerAsynchronously(CustomNameplates.plugin, () -> { for (ArmorStandManager asm : armorStandManagerMap.values()) { asm.refresh(false); } - }, 20, ConfigManager.Nameplate.refresh); + }, 20, NameplateManager.refresh); } else { - Bukkit.getScheduler().runTaskLaterAsynchronously(CustomNameplates.instance, () -> { + Bukkit.getScheduler().runTaskLaterAsynchronously(CustomNameplates.plugin, () -> { for (ArmorStandManager asm : armorStandManagerMap.values()) { asm.refresh(false); } @@ -82,59 +109,33 @@ public class TeleportingTag extends EntityTag { } } - @Override - public void unload() { - HandlerList.unregisterAll(listener); - super.unload(); - this.handler.unload(); - this.vehicleChecker.unload(); - this.vehicleTask.cancel(); - if (refreshTask != null) { - refreshTask.cancel(); + public ArmorStandManager getArmorStandManager(Player player) { + return armorStandManagerMap.get(player); + } + + public void refresh(Player refreshed, boolean force) { + getArmorStandManager(refreshed).refresh(force); + } + + protected void spawnArmorStands(Player viewer, Player target, boolean ride) { + if (target == viewer) return; + if (target.getGameMode() == GameMode.SPECTATOR) return; + if (viewer.getWorld() != target.getWorld()) return; + if (getDistance(target, viewer) < 48 && viewer.canSee(target)) { + ArmorStandManager asm = getArmorStandManager(target); + asm.spawn(viewer); + if (ride) { + //just for a delay + Bukkit.getScheduler().runTaskAsynchronously(CustomNameplates.plugin, () -> { + asm.mount(viewer); + }); + } } } - @Override - public void onSneak(Player player, boolean isSneaking) { - getArmorStandManager(player).setSneak(isSneaking, true); - } - - @Override - public void onRespawn(Player player) { - getArmorStandManager(player).teleport(); - } - - private void spawnArmorStands(Player viewer, Player target) { - if (target == viewer) return; - if (viewer.getWorld() != target.getWorld()) return; - if (getDistance(target, viewer) < 48 && viewer.canSee(target)) - getArmorStandManager(target).spawn(viewer); - } - - private double getDistance(Player player1, Player player2) { + protected double getDistance(Player player1, Player player2) { Location loc1 = player1.getLocation(); Location loc2 = player2.getLocation(); return Math.sqrt(Math.pow(loc1.getX()-loc2.getX(), 2) + Math.pow(loc1.getZ()-loc2.getZ(), 2)); } - - @Override - public void onJoin(Player player) { - ArmorStandManager asm = new ArmorStandManager(player); - asm.addDefault(); - armorStandManagerMap.put(player, asm); - for (Player viewer : Bukkit.getOnlinePlayers()) { - spawnArmorStands(viewer, player); - spawnArmorStands(player, viewer); - } - super.onJoin(player); - } - - @Override - public void onQuit(Player player) { - ArmorStandManager asm = armorStandManagerMap.remove(player); - if (asm != null) { - asm.destroy(); - } - super.onQuit(player); - } } diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/PacketsHandler.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/PacketsHandler.java similarity index 81% rename from src/main/java/net/momirealms/customnameplates/nameplates/mode/PacketsHandler.java rename to src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/PacketsHandler.java index b84a540..5fe71a7 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/PacketsHandler.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/PacketsHandler.java @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.mode; +package net.momirealms.customnameplates.objects.nameplates.mode; import com.comphenix.protocol.events.PacketContainer; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.Function; -import net.momirealms.customnameplates.nameplates.listener.BukkitListener; +import net.momirealms.customnameplates.listener.SimpleListener; +import net.momirealms.customnameplates.objects.Function; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; @@ -32,18 +32,17 @@ import java.util.concurrent.ConcurrentHashMap; public abstract class PacketsHandler extends Function { protected Map entityIdMap = new ConcurrentHashMap<>(); - private BukkitListener bukkitListener; + private final SimpleListener simpleListener; private final EntityTag entityTag; - protected PacketsHandler(String name, EntityTag entityTag) { - super(name); + protected PacketsHandler(EntityTag entityTag) { this.entityTag = entityTag; + this.simpleListener = new SimpleListener(this); } @Override public void load() { - this.bukkitListener = new BukkitListener(this); - Bukkit.getPluginManager().registerEvents(bukkitListener, CustomNameplates.instance); + Bukkit.getPluginManager().registerEvents(simpleListener, CustomNameplates.plugin); for (Player player : Bukkit.getOnlinePlayers()) { entityIdMap.put(player.getEntityId(), player); } @@ -51,7 +50,7 @@ public abstract class PacketsHandler extends Function { @Override public void unload() { - HandlerList.unregisterAll(bukkitListener); + HandlerList.unregisterAll(simpleListener); entityIdMap.clear(); } diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/bubbles/BBPacketsHandle.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/bubbles/BBPacketsHandle.java similarity index 90% rename from src/main/java/net/momirealms/customnameplates/nameplates/mode/bubbles/BBPacketsHandle.java rename to src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/bubbles/BBPacketsHandle.java index 556cecc..fb0868c 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/bubbles/BBPacketsHandle.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/bubbles/BBPacketsHandle.java @@ -15,11 +15,12 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.mode.bubbles; +package net.momirealms.customnameplates.objects.nameplates.mode.bubbles; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.listener.*; -import net.momirealms.customnameplates.nameplates.mode.PacketsHandler; +import net.momirealms.customnameplates.listener.packet.*; +import net.momirealms.customnameplates.manager.ChatBubblesManager; +import net.momirealms.customnameplates.objects.nameplates.mode.PacketsHandler; import org.bukkit.entity.Player; import java.util.List; @@ -27,15 +28,14 @@ import java.util.List; public class BBPacketsHandle extends PacketsHandler { private final ChatBubblesManager chatBubblesManager; - private EntityDestroyListener entityDestroyListener; private EntityMoveListener entityMoveListener; private EntitySpawnListener entitySpawnListener; private EntityTeleportListener entityTeleportListener; private EntityLookListener entityLookListener; - protected BBPacketsHandle(String name, ChatBubblesManager chatBubblesManager) { - super(name, chatBubblesManager); + public BBPacketsHandle(ChatBubblesManager chatBubblesManager) { + super(chatBubblesManager); this.chatBubblesManager = chatBubblesManager; } diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/rd/RdPacketsHandler.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/rd/RdPacketsHandler.java similarity index 78% rename from src/main/java/net/momirealms/customnameplates/nameplates/mode/rd/RdPacketsHandler.java rename to src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/rd/RdPacketsHandler.java index 3ea1a1c..ebafc28 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/rd/RdPacketsHandler.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/rd/RdPacketsHandler.java @@ -15,16 +15,16 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.mode.rd; +package net.momirealms.customnameplates.objects.nameplates.mode.rd; import com.comphenix.protocol.events.PacketContainer; -import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.ArmorStandManager; -import net.momirealms.customnameplates.nameplates.listener.EntityDestroyListener; -import net.momirealms.customnameplates.nameplates.listener.EntityMountListener; -import net.momirealms.customnameplates.nameplates.listener.EntitySpawnListener; -import net.momirealms.customnameplates.nameplates.mode.PacketsHandler; +import net.momirealms.customnameplates.listener.packet.EntityDestroyListener; +import net.momirealms.customnameplates.listener.packet.EntityMountListener; +import net.momirealms.customnameplates.listener.packet.EntitySpawnListener; +import net.momirealms.customnameplates.manager.NameplateManager; +import net.momirealms.customnameplates.objects.nameplates.ArmorStandManager; +import net.momirealms.customnameplates.objects.nameplates.mode.PacketsHandler; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -34,24 +34,26 @@ public class RdPacketsHandler extends PacketsHandler { private final RidingTag ridingTag; - private EntityDestroyListener entityDestroyListener; - private EntitySpawnListener entitySpawnListener; - private EntityMountListener entityMountListener; + private final EntityDestroyListener entityDestroyListener; + private final EntitySpawnListener entitySpawnListener; + private final EntityMountListener entityMountListener; - protected RdPacketsHandler(String name, RidingTag ridingTag) { - super(name, ridingTag); + protected RdPacketsHandler(RidingTag ridingTag) { + super(ridingTag); this.ridingTag = ridingTag; + this.entityDestroyListener = new EntityDestroyListener(this); + this.entitySpawnListener = new EntitySpawnListener(this); + if (NameplateManager.tryHook) { + this.entityMountListener = new EntityMountListener(this); + } else entityMountListener = null; } @Override public void load() { super.load(); - this.entityDestroyListener = new EntityDestroyListener(this); - this.entitySpawnListener = new EntitySpawnListener(this); CustomNameplates.protocolManager.addPacketListener(entityDestroyListener); CustomNameplates.protocolManager.addPacketListener(entitySpawnListener); - if (ConfigManager.Nameplate.tryHook) { - this.entityMountListener = new EntityMountListener(this); + if (entityMountListener != null) { CustomNameplates.protocolManager.addPacketListener(entityMountListener); } } @@ -72,7 +74,7 @@ public class RdPacketsHandler extends PacketsHandler { if (spawnedPlayer != null) { ArmorStandManager asm = ridingTag.getArmorStandManager(spawnedPlayer); asm.spawn(receiver); - Bukkit.getScheduler().runTaskAsynchronously(CustomNameplates.instance, ()-> asm.mount(receiver)); + Bukkit.getScheduler().runTaskAsynchronously(CustomNameplates.plugin, ()-> asm.mount(receiver)); } } diff --git a/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/rd/RidingTag.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/rd/RidingTag.java new file mode 100644 index 0000000..f86fa55 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/rd/RidingTag.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.objects.nameplates.mode.rd; + +import net.momirealms.customnameplates.manager.TeamManager; +import net.momirealms.customnameplates.objects.nameplates.ArmorStandManager; +import net.momirealms.customnameplates.objects.nameplates.mode.EntityTag; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +public class RidingTag extends EntityTag { + + private final RdPacketsHandler handler; + + public RidingTag(TeamManager teamManager) { + super(teamManager); + this.handler = new RdPacketsHandler(this); + } + + @Override + public void load() { + super.load(); + this.handler.load(); + } + + @Override + public void unload() { + super.unload(); + this.handler.unload(); + } + + @Override + public void loadToAllPlayers() { + for (Player all : Bukkit.getOnlinePlayers()) { + ArmorStandManager asm = new ArmorStandManager(all); + asm.addDefault(); + armorStandManagerMap.put(all, asm); + teamManager.sendUpdateToOne(all); + teamManager.sendUpdateToAll(all, true); + for (Player player : Bukkit.getOnlinePlayers()) + spawnArmorStands(player, all, true); + } + } + + @Override + public void onSneak(Player player, boolean isSneaking) { + getArmorStandManager(player).setSneak(isSneaking, false); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/tm/TeamTag.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/tm/TeamTag.java new file mode 100644 index 0000000..8ea2d6d --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/tm/TeamTag.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.objects.nameplates.mode.tm; + +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.listener.SimpleListener; +import net.momirealms.customnameplates.manager.NameplateManager; +import net.momirealms.customnameplates.manager.TeamManager; +import net.momirealms.customnameplates.objects.nameplates.NameplateMode; +import net.momirealms.customnameplates.objects.nameplates.NameplatesTeam; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public class TeamTag extends NameplateMode { + + private final SimpleListener listener; + + public TeamTag(TeamManager teamManager) { + super(teamManager); + this.listener = new SimpleListener(this); + } + + @Override + public void load() { + super.load(); + Bukkit.getPluginManager().registerEvents(listener, CustomNameplates.plugin); + } + + @Override + public void loadToAllPlayers() { + for (Player player : Bukkit.getOnlinePlayers()) { + teamManager.sendUpdateToAll(player, true); + teamManager.sendUpdateToOne(player); + } + } + + @Override + public void arrangeRefreshTask() { + if (!NameplateManager.update) return; + refreshTask = Bukkit.getScheduler().runTaskTimerAsynchronously(CustomNameplates.plugin, () -> { + for (Player player : Bukkit.getOnlinePlayers()) { + String teamName = teamManager.getTeamName(player); + NameplatesTeam nameplatesTeam = teamManager.getTeams().get(teamName); + if (nameplatesTeam != null) { + nameplatesTeam.updateNameplates(); + teamManager.sendUpdateToAll(player, false); + } + } + }, 20, NameplateManager.refresh); + } + + @Override + public void unload() { + super.unload(); + HandlerList.unregisterAll(listener); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/tp/TeleportingTag.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/tp/TeleportingTag.java new file mode 100644 index 0000000..a4f2fd0 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/tp/TeleportingTag.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.objects.nameplates.mode.tp; + +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.manager.TeamManager; +import net.momirealms.customnameplates.objects.nameplates.ArmorStandManager; +import net.momirealms.customnameplates.objects.nameplates.mode.EntityTag; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitTask; + +public class TeleportingTag extends EntityTag { + + private VehicleChecker vehicleChecker; + private TpPacketsHandler handler; + private BukkitTask vehicleTask; + + public TeleportingTag(TeamManager teamManager) { + super(teamManager); + } + + @Override + public void load() { + super.load(); + this.handler = new TpPacketsHandler(this); + this.handler.load(); + this.vehicleChecker = new VehicleChecker(this); + this.vehicleChecker.load(); + this.vehicleTask = Bukkit.getScheduler().runTaskTimerAsynchronously(CustomNameplates.plugin, () -> { + for (Player player : Bukkit.getOnlinePlayers()) { + this.vehicleChecker.refresh(player); + } + },20,20); + } + + @Override + public void unload() { + super.unload(); + this.handler.unload(); + this.vehicleChecker.unload(); + this.vehicleTask.cancel(); + } + + @Override + public void loadToAllPlayers() { + for (Player all : Bukkit.getOnlinePlayers()) { + ArmorStandManager asm = new ArmorStandManager(all); + asm.addDefault(); + armorStandManagerMap.put(all, asm); + teamManager.sendUpdateToOne(all); + teamManager.sendUpdateToAll(all, true); + for (Player player : Bukkit.getOnlinePlayers()) + spawnArmorStands(player, all, false); + } + } + + @Override + public void onSneak(Player player, boolean isSneaking) { + getArmorStandManager(player).setSneak(isSneaking, true); + } + + @Override + public void onRespawn(Player player) { + getArmorStandManager(player).teleport(); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/tp/TpPacketsHandler.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/tp/TpPacketsHandler.java similarity index 92% rename from src/main/java/net/momirealms/customnameplates/nameplates/mode/tp/TpPacketsHandler.java rename to src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/tp/TpPacketsHandler.java index e6fd43f..cbb0dd2 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/tp/TpPacketsHandler.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/tp/TpPacketsHandler.java @@ -15,11 +15,11 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.mode.tp; +package net.momirealms.customnameplates.objects.nameplates.mode.tp; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.listener.*; -import net.momirealms.customnameplates.nameplates.mode.PacketsHandler; +import net.momirealms.customnameplates.listener.packet.*; +import net.momirealms.customnameplates.objects.nameplates.mode.PacketsHandler; import org.bukkit.entity.Player; import java.util.List; @@ -34,8 +34,8 @@ public class TpPacketsHandler extends PacketsHandler { private EntityTeleportListener entityTeleportListener; private EntityLookListener entityLookListener; - protected TpPacketsHandler(String name, TeleportingTag teleportingTag) { - super(name, teleportingTag); + protected TpPacketsHandler(TeleportingTag teleportingTag) { + super(teleportingTag); this.teleportingTag = teleportingTag; } diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/tp/VehicleChecker.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/tp/VehicleChecker.java similarity index 93% rename from src/main/java/net/momirealms/customnameplates/nameplates/mode/tp/VehicleChecker.java rename to src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/tp/VehicleChecker.java index 2344a6e..ce58663 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/tp/VehicleChecker.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/mode/tp/VehicleChecker.java @@ -15,10 +15,10 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.mode.tp; +package net.momirealms.customnameplates.objects.nameplates.mode.tp; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.Function; +import net.momirealms.customnameplates.objects.Function; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -35,7 +35,6 @@ public class VehicleChecker extends Function { private BukkitTask task; public VehicleChecker(TeleportingTag teleportingTag) { - super("VEHICLE"); this.teleportingTag = teleportingTag; } @@ -47,7 +46,7 @@ public class VehicleChecker extends Function { playersOnVehicle.put(all, vehicle); } } - this.task = Bukkit.getScheduler().runTaskTimerAsynchronously(CustomNameplates.instance, () -> { + this.task = Bukkit.getScheduler().runTaskTimerAsynchronously(CustomNameplates.plugin, () -> { for (Player inVehicle : playersOnVehicle.keySet()) { if (!inVehicle.isOnline() || teleportingTag.getArmorStandManager(inVehicle) == null) continue; teleportingTag.getArmorStandManager(inVehicle).teleport(); diff --git a/src/main/java/net/momirealms/customnameplates/requirements/Biome.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/Biome.java similarity index 95% rename from src/main/java/net/momirealms/customnameplates/requirements/Biome.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/Biome.java index dd8d962..a9bcedc 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/Biome.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/Biome.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements; +package net.momirealms.customnameplates.objects.requirements; import java.util.List; diff --git a/src/main/java/net/momirealms/customnameplates/requirements/CustomPapi.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/CustomPapi.java similarity index 97% rename from src/main/java/net/momirealms/customnameplates/requirements/CustomPapi.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/CustomPapi.java index e6c7535..fbcba0d 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/CustomPapi.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/CustomPapi.java @@ -15,9 +15,9 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements; +package net.momirealms.customnameplates.objects.requirements; -import net.momirealms.customnameplates.requirements.papi.*; +import net.momirealms.customnameplates.objects.requirements.papi.*; import org.bukkit.configuration.MemorySection; import java.util.ArrayList; diff --git a/src/main/java/net/momirealms/customnameplates/requirements/Permission.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/Permission.java similarity index 94% rename from src/main/java/net/momirealms/customnameplates/requirements/Permission.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/Permission.java index d5c4bb0..adee2a7 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/Permission.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/Permission.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements; +package net.momirealms.customnameplates.objects.requirements; public record Permission(String permission) implements Requirement { diff --git a/src/main/java/net/momirealms/customnameplates/requirements/PlayerCondition.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/PlayerCondition.java similarity index 74% rename from src/main/java/net/momirealms/customnameplates/requirements/PlayerCondition.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/PlayerCondition.java index 8e21795..719edaa 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/PlayerCondition.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/PlayerCondition.java @@ -15,9 +15,8 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements; +package net.momirealms.customnameplates.objects.requirements; -import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -28,17 +27,15 @@ public class PlayerCondition { private final Location location; private final Player player; - private HashMap papiMap; + private final HashMap papiMap; public PlayerCondition(Location location, Player player) { this.location = location; this.player = player; - if (ConfigManager.Main.placeholderAPI){ - this.papiMap = new HashMap<>(); - CustomPapi.allPapi.forEach(papi -> { - this.papiMap.put(papi, CustomNameplates.instance.getPlaceholderManager().parsePlaceholders(player, papi)); - }); - } + this.papiMap = new HashMap<>(); + CustomPapi.allPapi.forEach(papi -> { + this.papiMap.put(papi, CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(player, papi)); + }); } public HashMap getPapiMap() { diff --git a/src/main/java/net/momirealms/customnameplates/requirements/Requirement.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/Requirement.java similarity index 92% rename from src/main/java/net/momirealms/customnameplates/requirements/Requirement.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/Requirement.java index a0c08e2..fd4db5f 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/Requirement.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/Requirement.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements; +package net.momirealms.customnameplates.objects.requirements; public interface Requirement { boolean isConditionMet(PlayerCondition playerCondition); diff --git a/src/main/java/net/momirealms/customnameplates/requirements/Time.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/Time.java similarity index 95% rename from src/main/java/net/momirealms/customnameplates/requirements/Time.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/Time.java index 7c9e093..2d0d514 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/Time.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/Time.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements; +package net.momirealms.customnameplates.objects.requirements; import org.apache.commons.lang.StringUtils; diff --git a/src/main/java/net/momirealms/customnameplates/requirements/Weather.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/Weather.java similarity index 96% rename from src/main/java/net/momirealms/customnameplates/requirements/Weather.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/Weather.java index 1263edf..8ec8d67 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/Weather.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/Weather.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements; +package net.momirealms.customnameplates.objects.requirements; import org.bukkit.World; diff --git a/src/main/java/net/momirealms/customnameplates/requirements/World.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/World.java similarity index 94% rename from src/main/java/net/momirealms/customnameplates/requirements/World.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/World.java index e6c8f4f..5055ee4 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/World.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/World.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements; +package net.momirealms.customnameplates.objects.requirements; import java.util.List; diff --git a/src/main/java/net/momirealms/customnameplates/requirements/YPos.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/YPos.java similarity index 95% rename from src/main/java/net/momirealms/customnameplates/requirements/YPos.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/YPos.java index 3ad2217..fb2d147 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/YPos.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/YPos.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements; +package net.momirealms.customnameplates.objects.requirements; import org.apache.commons.lang.StringUtils; diff --git a/src/main/java/net/momirealms/customnameplates/requirements/papi/ExpressionAnd.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/ExpressionAnd.java similarity index 94% rename from src/main/java/net/momirealms/customnameplates/requirements/papi/ExpressionAnd.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/papi/ExpressionAnd.java index c41d63e..e0a10c3 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/papi/ExpressionAnd.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/ExpressionAnd.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements.papi; +package net.momirealms.customnameplates.objects.requirements.papi; import java.util.HashMap; import java.util.List; diff --git a/src/main/java/net/momirealms/customnameplates/requirements/papi/ExpressionOr.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/ExpressionOr.java similarity index 94% rename from src/main/java/net/momirealms/customnameplates/requirements/papi/ExpressionOr.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/papi/ExpressionOr.java index ec2e70a..d362fbf 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/papi/ExpressionOr.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/ExpressionOr.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements.papi; +package net.momirealms.customnameplates.objects.requirements.papi; import java.util.HashMap; import java.util.List; diff --git a/src/main/java/net/momirealms/customnameplates/requirements/papi/PapiEquals.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiEquals.java similarity index 93% rename from src/main/java/net/momirealms/customnameplates/requirements/papi/PapiEquals.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiEquals.java index 39f77bb..63edd95 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/papi/PapiEquals.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiEquals.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements.papi; +package net.momirealms.customnameplates.objects.requirements.papi; import java.util.HashMap; import java.util.Objects; diff --git a/src/main/java/net/momirealms/customnameplates/requirements/papi/PapiGreater.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiGreater.java similarity index 93% rename from src/main/java/net/momirealms/customnameplates/requirements/papi/PapiGreater.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiGreater.java index 2752095..19dc793 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/papi/PapiGreater.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiGreater.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements.papi; +package net.momirealms.customnameplates.objects.requirements.papi; import java.util.HashMap; diff --git a/src/main/java/net/momirealms/customnameplates/requirements/papi/PapiNoLarger.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiNoLarger.java similarity index 93% rename from src/main/java/net/momirealms/customnameplates/requirements/papi/PapiNoLarger.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiNoLarger.java index ecafa1a..f822d72 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/papi/PapiNoLarger.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiNoLarger.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements.papi; +package net.momirealms.customnameplates.objects.requirements.papi; import java.util.HashMap; diff --git a/src/main/java/net/momirealms/customnameplates/requirements/papi/PapiNoLess.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiNoLess.java similarity index 93% rename from src/main/java/net/momirealms/customnameplates/requirements/papi/PapiNoLess.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiNoLess.java index 9439742..1420d21 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/papi/PapiNoLess.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiNoLess.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements.papi; +package net.momirealms.customnameplates.objects.requirements.papi; import java.util.HashMap; diff --git a/src/main/java/net/momirealms/customnameplates/requirements/papi/PapiNotEquals.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiNotEquals.java similarity index 93% rename from src/main/java/net/momirealms/customnameplates/requirements/papi/PapiNotEquals.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiNotEquals.java index 1cf38fa..9fcee0b 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/papi/PapiNotEquals.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiNotEquals.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements.papi; +package net.momirealms.customnameplates.objects.requirements.papi; import java.util.HashMap; import java.util.Objects; diff --git a/src/main/java/net/momirealms/customnameplates/requirements/papi/PapiRequirement.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiRequirement.java similarity index 92% rename from src/main/java/net/momirealms/customnameplates/requirements/papi/PapiRequirement.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiRequirement.java index 7e93861..821d57f 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/papi/PapiRequirement.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiRequirement.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements.papi; +package net.momirealms.customnameplates.objects.requirements.papi; import java.util.HashMap; diff --git a/src/main/java/net/momirealms/customnameplates/requirements/papi/PapiSmaller.java b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiSmaller.java similarity index 93% rename from src/main/java/net/momirealms/customnameplates/requirements/papi/PapiSmaller.java rename to src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiSmaller.java index f8a6787..5333630 100644 --- a/src/main/java/net/momirealms/customnameplates/requirements/papi/PapiSmaller.java +++ b/src/main/java/net/momirealms/customnameplates/objects/requirements/papi/PapiSmaller.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.requirements.papi; +package net.momirealms.customnameplates.objects.requirements.papi; import java.util.HashMap; diff --git a/src/main/java/net/momirealms/customnameplates/objects/team/SimpleTeam.java b/src/main/java/net/momirealms/customnameplates/objects/team/SimpleTeam.java new file mode 100644 index 0000000..8768eaf --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/objects/team/SimpleTeam.java @@ -0,0 +1,16 @@ +package net.momirealms.customnameplates.objects.team; + +import org.bukkit.entity.Player; + +public class SimpleTeam implements TeamNameInterface { + + @Override + public String getTeamName(Player player) { + return player.getName(); + } + + @Override + public void unload() { + + } +} diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/tmpackets/TeamPacketB.java b/src/main/java/net/momirealms/customnameplates/objects/team/SimpleTeamVisibility.java similarity index 52% rename from src/main/java/net/momirealms/customnameplates/nameplates/mode/tmpackets/TeamPacketB.java rename to src/main/java/net/momirealms/customnameplates/objects/team/SimpleTeamVisibility.java index 3e0ef25..9692c94 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/tmpackets/TeamPacketB.java +++ b/src/main/java/net/momirealms/customnameplates/objects/team/SimpleTeamVisibility.java @@ -15,16 +15,15 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.mode.tmpackets; +package net.momirealms.customnameplates.objects.team; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.InternalStructure; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.utility.MinecraftReflection; -import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.TeamManager; -import net.momirealms.customnameplates.nameplates.TeamPacketManager; +import net.momirealms.customnameplates.manager.NameplateManager; +import net.momirealms.customnameplates.manager.TeamManager; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; @@ -32,49 +31,50 @@ import org.bukkit.entity.Player; import java.lang.reflect.InvocationTargetException; import java.util.Optional; -public class TeamPacketB implements TeamPacketManager { +public class SimpleTeamVisibility implements TeamPacketInterface { + + private final TeamManager teamManager; + + public SimpleTeamVisibility(TeamManager teamManager) { + this.teamManager = teamManager; + } @Override public void sendUpdateToOne(Player player) { for (Player otherPlayer : Bukkit.getOnlinePlayers()) { - if (player == otherPlayer) return; + if (player == otherPlayer) continue; PacketContainer packet = new PacketContainer(PacketType.Play.Server.SCOREBOARD_TEAM); packet.getIntegers().write(0,2); - String teamName = TeamManager.getTeamName(otherPlayer); + String teamName = teamManager.getTeamName(otherPlayer); packet.getStrings().write(0, teamName); - Optional optional = packet.getOptionalStructures().read(0); - if (optional.isEmpty()) return; - InternalStructure internalStructure = optional.get(); - if (ConfigManager.Nameplate.removeTag) internalStructure.getStrings().write(0, "never"); - else internalStructure.getStrings().write(0, "always"); - internalStructure.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0,ChatColor.WHITE); - try { - CustomNameplates.protocolManager.sendServerPacket(player, packet); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } + InternalStructure internalStructure = packet.getOptionalStructures().read(0).get(); + sendPackets(player, packet, internalStructure); } } @Override public void sendUpdateToAll(Player player, boolean force) { - String teamName = TeamManager.getTeamName(player); + String teamName = teamManager.getTeamName(player); for (Player otherPlayer : Bukkit.getOnlinePlayers()) { PacketContainer packet = new PacketContainer(PacketType.Play.Server.SCOREBOARD_TEAM); packet.getStrings().write(0, teamName); packet.getIntegers().write(0,2); Optional optional = packet.getOptionalStructures().read(0); - if (optional.isEmpty()) return; + if (optional.isEmpty()) continue; InternalStructure internalStructure = optional.get(); - if (ConfigManager.Nameplate.removeTag) internalStructure.getStrings().write(0, "never"); - else internalStructure.getStrings().write(0, "always"); - internalStructure.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0, ChatColor.WHITE); - try { - CustomNameplates.protocolManager.sendServerPacket(otherPlayer, packet); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } + sendPackets(otherPlayer, packet, internalStructure); + } + } + + private void sendPackets(Player player, PacketContainer packet, InternalStructure internalStructure) { + if (NameplateManager.removeTag) internalStructure.getStrings().write(0, "never"); + else internalStructure.getStrings().write(0, "always"); + internalStructure.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0,ChatColor.WHITE); + try { + CustomNameplates.protocolManager.sendServerPacket(player, packet); + } + catch (InvocationTargetException e) { + e.printStackTrace(); } } } diff --git a/src/main/java/net/momirealms/customnameplates/actionbar/ActionBarManager.java b/src/main/java/net/momirealms/customnameplates/objects/team/TABTeamHook.java similarity index 54% rename from src/main/java/net/momirealms/customnameplates/actionbar/ActionBarManager.java rename to src/main/java/net/momirealms/customnameplates/objects/team/TABTeamHook.java index b811475..4838356 100644 --- a/src/main/java/net/momirealms/customnameplates/actionbar/ActionBarManager.java +++ b/src/main/java/net/momirealms/customnameplates/objects/team/TABTeamHook.java @@ -15,33 +15,24 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.actionbar; +package net.momirealms.customnameplates.objects.team; -import net.momirealms.customnameplates.ConfigManager; -import net.momirealms.customnameplates.Function; +import me.neznamy.tab.api.TabPlayer; +import me.neznamy.tab.shared.TAB; +import org.bukkit.entity.Player; -import java.util.HashSet; - -public class ActionBarManager extends Function { - - private HashSet tasks = new HashSet<>(); - - public ActionBarManager(String name) { - super(name); - } +public class TABTeamHook implements TeamNameInterface { @Override - public void load() { - for (ActionBarConfig config : ConfigManager.actionBars.values()) { - tasks.add(new ActionBarTask(config)); - } + public String getTeamName(Player player) { + TabPlayer tabPlayer = TAB.getInstance().getPlayer(player.getUniqueId()); + if (tabPlayer == null) return player.getName(); + String teamName = tabPlayer.getTeamName(); + return teamName == null ? player.getName() : teamName; } @Override public void unload() { - for (ActionBarTask task : tasks) { - task.stop(); - } - tasks.clear(); + } -} +} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/objects/team/TABbcHook.java b/src/main/java/net/momirealms/customnameplates/objects/team/TABbcHook.java new file mode 100644 index 0000000..f68584a --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/objects/team/TABbcHook.java @@ -0,0 +1,50 @@ +package net.momirealms.customnameplates.objects.team; + +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.listener.ProxyDataListener; +import org.bukkit.entity.Player; + +import java.util.HashMap; + +public class TABbcHook implements TeamNameInterface { + + private final HashMap teamNames; + + public TABbcHook() { + this.teamNames = new HashMap<>(); + ProxyDataListener proxyDataListener = new ProxyDataListener(this); + CustomNameplates.plugin.getServer().getMessenger().registerOutgoingPluginChannel(CustomNameplates.plugin, "customnameplates:cnp"); + CustomNameplates.plugin.getServer().getMessenger().registerIncomingPluginChannel(CustomNameplates.plugin, "customnameplates:cnp", proxyDataListener); + } + + @Override + public void unload() { + this.teamNames.clear(); + CustomNameplates.plugin.getServer().getMessenger().unregisterIncomingPluginChannel(CustomNameplates.plugin, "customnameplates:cnp"); + CustomNameplates.plugin.getServer().getMessenger().unregisterOutgoingPluginChannel(CustomNameplates.plugin, "customnameplates:cnp"); + } + + @Override + public String getTeamName(Player player) { + String teamName = teamNames.get(player.getName()); + if (teamName == null) { + sendRequest(player); + return null; + } + else { + return teamName; + } + } + + private void sendRequest(Player player) { + ByteArrayDataOutput dataOutput = ByteStreams.newDataOutput(); + dataOutput.writeUTF(player.getName()); + player.sendPluginMessage(CustomNameplates.plugin, "customnameplates:cnp", dataOutput.toByteArray()); + } + + public void addPlayerToCache(String playerName, String teamName) { + teamNames.put(playerName, teamName); + } +} diff --git a/src/main/java/net/momirealms/customnameplates/objects/team/TeamNameInterface.java b/src/main/java/net/momirealms/customnameplates/objects/team/TeamNameInterface.java new file mode 100644 index 0000000..7082c92 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/objects/team/TeamNameInterface.java @@ -0,0 +1,9 @@ +package net.momirealms.customnameplates.objects.team; + +import org.bukkit.entity.Player; + +public interface TeamNameInterface { + + String getTeamName(Player player); + void unload(); +} diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/TeamPacketManager.java b/src/main/java/net/momirealms/customnameplates/objects/team/TeamPacketInterface.java similarity index 89% rename from src/main/java/net/momirealms/customnameplates/nameplates/TeamPacketManager.java rename to src/main/java/net/momirealms/customnameplates/objects/team/TeamPacketInterface.java index e2c88cf..fe56b6f 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/TeamPacketManager.java +++ b/src/main/java/net/momirealms/customnameplates/objects/team/TeamPacketInterface.java @@ -15,11 +15,11 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates; +package net.momirealms.customnameplates.objects.team; import org.bukkit.entity.Player; -public interface TeamPacketManager { +public interface TeamPacketInterface { void sendUpdateToOne(Player player); void sendUpdateToAll(Player player, boolean force); diff --git a/src/main/java/net/momirealms/customnameplates/nameplates/mode/tmpackets/TeamPacketA.java b/src/main/java/net/momirealms/customnameplates/objects/team/TeamPrefixSuffix.java similarity index 52% rename from src/main/java/net/momirealms/customnameplates/nameplates/mode/tmpackets/TeamPacketA.java rename to src/main/java/net/momirealms/customnameplates/objects/team/TeamPrefixSuffix.java index 4dec888..264396d 100644 --- a/src/main/java/net/momirealms/customnameplates/nameplates/mode/tmpackets/TeamPacketA.java +++ b/src/main/java/net/momirealms/customnameplates/objects/team/TeamPrefixSuffix.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.nameplates.mode.tmpackets; +package net.momirealms.customnameplates.objects.team; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.InternalStructure; @@ -24,9 +24,8 @@ import com.comphenix.protocol.utility.MinecraftReflection; import com.comphenix.protocol.wrappers.WrappedChatComponent; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.nameplates.NameplatesTeam; -import net.momirealms.customnameplates.nameplates.TeamManager; -import net.momirealms.customnameplates.nameplates.TeamPacketManager; +import net.momirealms.customnameplates.manager.TeamManager; +import net.momirealms.customnameplates.objects.nameplates.NameplatesTeam; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; @@ -35,44 +34,31 @@ import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Optional; -public class TeamPacketA implements TeamPacketManager { +public class TeamPrefixSuffix implements TeamPacketInterface { private final HashMap teamInfoCache = new HashMap<>(); private final TeamManager teamManager; - public TeamPacketA(TeamManager teamManager) { + public TeamPrefixSuffix(TeamManager teamManager) { this.teamManager = teamManager; } public void sendUpdateToOne(Player player) { -// boolean accepted = CustomNameplates.instance.getDataManager().getCache().get(player.getUniqueId()).getAccepted(); for (Player otherPlayer : Bukkit.getOnlinePlayers()) { - if (player == otherPlayer) return; + if (player == otherPlayer) continue; PacketContainer packet = new PacketContainer(PacketType.Play.Server.SCOREBOARD_TEAM); packet.getIntegers().write(0,2); - String teamName = TeamManager.getTeamName(otherPlayer); + String teamName = teamManager.getTeamName(otherPlayer); packet.getStrings().write(0, teamName); NameplatesTeam nameplatesTeam = teamManager.getTeams().get(teamName); - if (nameplatesTeam == null) return; - Optional optional = packet.getOptionalStructures().read(0); - if (optional.isEmpty()) return; - InternalStructure internalStructure = optional.get(); - internalStructure.getStrings().write(0, "always"); - internalStructure.getChatComponents().write(1, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(nameplatesTeam.getPrefix()))); - internalStructure.getChatComponents().write(2, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(nameplatesTeam.getSuffix()))); - internalStructure.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0,nameplatesTeam.getColor()); - try { - CustomNameplates.protocolManager.sendServerPacket(player, packet); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } + if (nameplatesTeam == null) continue; + InternalStructure internalStructure = packet.getOptionalStructures().read(0).get(); + sendPacket(player, packet, nameplatesTeam, internalStructure); } } - public void sendUpdateToAll(Player player, boolean force) { - String teamName = TeamManager.getTeamName(player); + String teamName = teamManager.getTeamName(player); NameplatesTeam nameplatesTeam = teamManager.getTeams().get(teamName); String newInfo = nameplatesTeam.getDynamic(); String oldInfo = teamInfoCache.get(player); @@ -87,15 +73,20 @@ public class TeamPacketA implements TeamPacketManager { Optional optional = packet.getOptionalStructures().read(0); if (optional.isEmpty()) return; InternalStructure internalStructure = optional.get(); - internalStructure.getStrings().write(0, "always"); - internalStructure.getChatComponents().write(1, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(nameplatesTeam.getPrefix()))); - internalStructure.getChatComponents().write(2, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(nameplatesTeam.getSuffix()))); - internalStructure.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0,nameplatesTeam.getColor()); - try { - CustomNameplates.protocolManager.sendServerPacket(otherPlayer, packet); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } + sendPacket(otherPlayer, packet, nameplatesTeam, internalStructure); + } + } + + private void sendPacket(Player player, PacketContainer packet, NameplatesTeam nameplatesTeam, InternalStructure internalStructure) { + internalStructure.getStrings().write(0, "always"); + internalStructure.getChatComponents().write(1, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(nameplatesTeam.getPrefix()))); + internalStructure.getChatComponents().write(2, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(nameplatesTeam.getSuffix()))); + internalStructure.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0, nameplatesTeam.getColor()); + try { + CustomNameplates.protocolManager.sendServerPacket(player, packet); + } + catch (InvocationTargetException e) { + e.printStackTrace(); } } } diff --git a/src/main/java/net/momirealms/customnameplates/resource/ResourceManager.java b/src/main/java/net/momirealms/customnameplates/resource/ResourceManager.java deleted file mode 100644 index 8ac0937..0000000 --- a/src/main/java/net/momirealms/customnameplates/resource/ResourceManager.java +++ /dev/null @@ -1,561 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.resource; - -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import net.momirealms.customnameplates.ConfigManager; -import net.momirealms.customnameplates.CustomNameplates; -import net.momirealms.customnameplates.helper.Log; -import net.momirealms.customnameplates.nameplates.BubbleConfig; -import net.momirealms.customnameplates.objects.SimpleChar; -import net.momirealms.customnameplates.utils.AdventureUtil; -import net.momirealms.customnameplates.objects.BackGround; -import net.momirealms.customnameplates.font.FontOffset; -import net.momirealms.customnameplates.nameplates.NameplateConfig; -import org.apache.commons.io.FileUtils; -import org.apache.commons.lang.StringUtils; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.configuration.file.YamlConfiguration; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.util.*; - -import static net.momirealms.customnameplates.ConfigManager.Main.start; - -public class ResourceManager { - - public static HashMap NAMEPLATES; - public static HashMap BUBBLES; - public static HashMap BACKGROUNDS; - - - //生成资源包并载入新的配置 - public void generateResourcePack() { - - //铭牌 - File np_file = new File(CustomNameplates.instance.getDataFolder() + File.separator + "nameplates"); - //背景 - File bg_file = new File(CustomNameplates.instance.getDataFolder() + File.separator + "backgrounds"); - //气泡 - File bb_file = new File(CustomNameplates.instance.getDataFolder() + File.separator + "bubbles"); - //生成的 - File gd_file = new File(CustomNameplates.instance.getDataFolder() + File.separator + "ResourcePack"); - - //清除之前的旧文件 - deleteDirectory(gd_file); - - File font_file = new File(CustomNameplates.instance.getDataFolder() + File.separator + "ResourcePack" + File.separatorChar + ConfigManager.Main.namespace + File.separatorChar + "font"); - File textures_file = new File(CustomNameplates.instance.getDataFolder() + File.separator + "ResourcePack" + File.separatorChar + ConfigManager.Main.namespace + File.separatorChar + "textures"); - - if (!font_file.mkdirs() || !textures_file.mkdirs()) { - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to generate resource pack folders..."); - return; - } - - //保存偏移字符图 - saveSplit(textures_file.getPath()); - - //新建Json - JsonObject jsonObject_default = new JsonObject(); - JsonArray jsonArray_default = new JsonArray(); - jsonObject_default.add("providers", jsonArray_default); - - //获取偏移字符 - getOffsetFontEnums().forEach(jsonArray_default::add); - - //铭牌模块 - if (ConfigManager.Module.nameplate) { - - //保存默认的文件 - if (!np_file.exists()) { - if (!np_file.mkdir()) { - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to create resources folder..."); - return; - } - saveDefaultNameplates(); - } - - File[] np_config_files = np_file.listFiles(file -> file.getName().endsWith(".yml")); - //滚 - if (np_config_files == null) return; - //排序 - Arrays.sort(np_config_files); - - if (ConfigManager.Module.nameplate){ - - NAMEPLATES = new HashMap<>(); - NAMEPLATES.put("none", NameplateConfig.EMPTY); - - for (File np_config_file : np_config_files) { - - //初始化当前三个字符的unicode - char left = start; - char middle; - char right; - start = (char)((right = (char)((middle = (char)(start + '\u0001')) + '\u0001')) + '\u0001'); - - try { - - String key = np_config_file.getName().substring(0, np_config_file.getName().length() - 4); - - YamlConfiguration config = YamlConfiguration.loadConfiguration(np_config_file); - if (!config.contains("display-name")) config.set("display-name", key); - if (!config.contains("name-color")) config.set("name-color", "white"); - if (!config.contains("left.image")) config.set("left.image", key + "_left"); - if (!config.contains("left.height")) config.set("left.height", 16); - if (!config.contains("left.ascent")) config.set("left.ascent", 12); - if (!config.contains("left.width")) config.set("left.width", 16); - if (!config.contains("middle.image")) config.set("middle.image", key + "_middle"); - if (!config.contains("middle.height")) config.set("middle.height", 16); - if (!config.contains("middle.ascent")) config.set("middle.ascent", 12); - if (!config.contains("middle.width")) config.set("middle.width", 16); - if (!config.contains("right.image")) config.set("right.image", key + "_right"); - if (!config.contains("right.height")) config.set("right.height", 16); - if (!config.contains("right.ascent")) config.set("right.ascent", 12); - if (!config.contains("right.width")) config.set("right.width", 16); - - SimpleChar leftChar = new SimpleChar(config.getInt("left.height"), config.getInt("left.ascent"), config.getInt("left.width"), left, config.getString("left.image") + ".png"); - SimpleChar middleChar = new SimpleChar(config.getInt("middle.height"), config.getInt("middle.ascent"), config.getInt("middle.width"), middle, config.getString("middle.image") + ".png"); - SimpleChar rightChar = new SimpleChar(config.getInt("right.height"), config.getInt("right.ascent"), config.getInt("right.width"), right, config.getString("right.image") + ".png"); - - ChatColor color = ChatColor.valueOf(Objects.requireNonNull(config.getString("color","WHITE")).toUpperCase()); - - config.save(np_config_file); - - NameplateConfig nameplateConfig = new NameplateConfig(color, config.getString("display-name"), leftChar, middleChar, rightChar); - - NAMEPLATES.put(key, nameplateConfig); - - SimpleChar[] simpleChars = new SimpleChar[]{leftChar, middleChar, rightChar}; - - for (SimpleChar simpleChar : simpleChars) { - - JsonObject jo_np = new JsonObject(); - - jo_np.add("type", new JsonPrimitive("bitmap")); - jo_np.add("file", new JsonPrimitive(ConfigManager.Main.namespace + ":" + ConfigManager.Main.np_folder_path.replaceAll("\\\\","/") + simpleChar.getFile())); - jo_np.add("ascent", new JsonPrimitive(simpleChar.getAscent())); - jo_np.add("height", new JsonPrimitive(simpleChar.getHeight())); - JsonArray ja_simple = new JsonArray(); - ja_simple.add(native2ascii(simpleChar.getChars())); - jo_np.add("chars", ja_simple); - jsonArray_default.add(jo_np); - - try { - FileUtils.copyFile(new File(np_config_file.getParent() + File.separator + simpleChar.getFile()), new File(textures_file.getPath() + File.separatorChar + StringUtils.replace(ConfigManager.Main.np_folder_path, "\\", File.separator) + simpleChar.getFile())); - } - catch (IOException e){ - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to copy nameplate " + key + " png files to resource pack..."); - } - } - } - catch (Exception e) { - e.printStackTrace(); - } - } - } - } - - //气泡模块 - if (ConfigManager.Module.bubbles) { - - if (!bb_file.exists()) { - if (!bb_file.mkdir()) { - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to create resources folder..."); - return; - } - saveDefaultBubbles(); - } - - BUBBLES = new HashMap<>(); - - File[] bb_config_files = bb_file.listFiles(file -> file.getName().endsWith(".yml")); - if (bb_config_files == null) return; - Arrays.sort(bb_config_files); - - for (File bb_config_file : bb_config_files) { - - char left = start; - char middle; - char right; - char tail; - start = (char) ((tail = (char)((right = (char)((middle = (char)(start + '\u0001')) + '\u0001')) + '\u0001')) + '\u0001'); - - try { - - String key = bb_config_file.getName().substring(0, bb_config_file.getName().length() - 4); - - YamlConfiguration config = YamlConfiguration.loadConfiguration(bb_config_file); - if (!config.contains("display-name")) config.set("display-name", key); - if (!config.contains("text-format")) config.set("text-format", ""); - if (!config.contains("left.image")) config.set("left.image", key + "_left"); - if (!config.contains("left.height")) config.set("left.height", 16); - if (!config.contains("left.width")) config.set("left.width", 16); - if (!config.contains("left.ascent")) config.set("left.ascent", 12); - if (!config.contains("middle.image")) config.set("middle.image", key + "_middle"); - if (!config.contains("middle.height")) config.set("middle.height", 16); - if (!config.contains("middle.width")) config.set("middle.width", 16); - if (!config.contains("middle.ascent")) config.set("middle.ascent", 12); - if (!config.contains("right.image")) config.set("right.image", key + "_right"); - if (!config.contains("right.height")) config.set("right.height", 16); - if (!config.contains("right.width")) config.set("right.width", 16); - if (!config.contains("right.ascent")) config.set("right.ascent", 12); - if (!config.contains("tail.image")) config.set("tail.image", key + "_tail"); - if (!config.contains("tail.height")) config.set("tail.height", 16); - if (!config.contains("tail.width")) config.set("tail.width", 16); - if (!config.contains("tail.ascent")) config.set("tail.ascent", 12); - - SimpleChar leftChar = new SimpleChar(config.getInt("left.height"), config.getInt("left.ascent"), config.getInt("left.width"), left, config.getString("left.image") + ".png"); - SimpleChar middleChar = new SimpleChar(config.getInt("middle.height"), config.getInt("middle.ascent"), config.getInt("middle.width"), middle, config.getString("middle.image") + ".png"); - SimpleChar rightChar = new SimpleChar(config.getInt("right.height"), config.getInt("right.ascent"), config.getInt("right.width"), right, config.getString("right.image") + ".png"); - SimpleChar tailChar = new SimpleChar(config.getInt("tail.height"), config.getInt("tail.ascent"), config.getInt("tail.width"), tail, config.getString("tail.image") + ".png"); - - config.save(bb_config_file); - - BubbleConfig bubbleConfig = new BubbleConfig(config.getString("text-format"), config.getString("display-name"), - leftChar, middleChar, - rightChar, tailChar); - - BUBBLES.put(key, bubbleConfig); - - SimpleChar[] simpleChars = new SimpleChar[]{leftChar, middleChar, rightChar, tailChar}; - - for (SimpleChar simpleChar : simpleChars) { - - JsonObject jo_bb = new JsonObject(); - - jo_bb.add("type", new JsonPrimitive("bitmap")); - jo_bb.add("file", new JsonPrimitive(ConfigManager.Main.namespace + ":" + ConfigManager.Main.bb_folder_path.replaceAll("\\\\","/") + simpleChar.getFile())); - jo_bb.add("ascent", new JsonPrimitive(simpleChar.getAscent())); - jo_bb.add("height", new JsonPrimitive(simpleChar.getHeight())); - JsonArray ja_simple = new JsonArray(); - ja_simple.add(native2ascii(simpleChar.getChars())); - jo_bb.add("chars", ja_simple); - jsonArray_default.add(jo_bb); - - try { - FileUtils.copyFile(new File(bb_config_file.getParent() + File.separator + simpleChar.getFile()), new File(textures_file.getPath() + File.separatorChar + StringUtils.replace(ConfigManager.Main.bb_folder_path, "\\", File.separator) + simpleChar.getFile())); - } - catch (IOException e){ - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to copy bubble " + key + " png files to resource pack..."); - } - } - } - catch (Exception e) { - e.printStackTrace(); - } - } - } - - //背景模块 - if (ConfigManager.Module.background) { - - if (!bg_file.exists()) { - if (!bg_file.mkdir()) { - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to create resources folder..."); - return; - } - saveDefaultBackgrounds(); - } - - BACKGROUNDS = new HashMap<>(); - - File[] bg_config_files = bg_file.listFiles(file -> file.getName().endsWith(".yml")); - if (bg_config_files == null) return; - Arrays.sort(bg_config_files); - - for (File bg_config_file : bg_config_files) { - - try { - - String key = bg_config_file.getName().substring(0, bg_config_file.getName().length() - 4); - YamlConfiguration config = YamlConfiguration.loadConfiguration(bg_config_file); - - char oStart = start; - char o1 = (char) (oStart + '\u0001'); - char o2 = (char) (o1 + '\u0001'); - char o4 = (char) (o2 + '\u0001'); - char o8 = (char) (o4 + '\u0001'); - char o16 = (char) (o8 + '\u0001'); - char o32 = (char) (o16 + '\u0001'); - char o64 = (char) (o32 + '\u0001'); - char o128 = (char) (o64 + '\u0001'); - char oEnd = (char) (o128 + '\u0001'); - start = (char) (oEnd + '\u0001'); - - int height = config.getInt("middle.height", 14); - int ascent = config.getInt("middle.ascent", 8); - SimpleChar startChar = new SimpleChar(config.getInt("left.height"), config.getInt("left.ascent"),1 ,oStart, config.getString("left.image") + ".png"); - SimpleChar offset_1 = new SimpleChar(height, ascent,1, o1, config.getString("middle.1") + ".png"); - SimpleChar offset_2 = new SimpleChar(height, ascent,1, o2, config.getString("middle.2") + ".png"); - SimpleChar offset_4 = new SimpleChar(height, ascent,1, o4, config.getString("middle.4") + ".png"); - SimpleChar offset_8 = new SimpleChar(height, ascent,1, o8, config.getString("middle.8") + ".png"); - SimpleChar offset_16 = new SimpleChar(height, ascent,1, o16, config.getString("middle.16") + ".png"); - SimpleChar offset_32 = new SimpleChar(height, ascent,1, o32, config.getString("middle.32") + ".png"); - SimpleChar offset_64 = new SimpleChar(height, ascent,1, o64, config.getString("middle.64") + ".png"); - SimpleChar offset_128 = new SimpleChar(height, ascent,1, o128, config.getString("middle.128") + ".png"); - SimpleChar endChar = new SimpleChar(config.getInt("right.height"),config.getInt("right.ascent"),1, oEnd, config.getString("right.image") + ".png"); - BackGround backGround = new BackGround(startChar, offset_1, - offset_2, offset_4, - offset_8, offset_16, - offset_32, offset_64, - offset_128, endChar, - config.getInt("start-width", 1), config.getInt("end-width", 1)); - - BACKGROUNDS.put(key, backGround); - - SimpleChar[] simpleChars = new SimpleChar[]{startChar, offset_1, - offset_2, offset_4, - offset_8, offset_16, - offset_32, offset_64, - offset_128, endChar}; - - for (SimpleChar simpleChar : simpleChars) { - - JsonObject jo_bg = new JsonObject(); - - jo_bg.add("type", new JsonPrimitive("bitmap")); - jo_bg.add("file", new JsonPrimitive(ConfigManager.Main.namespace + ":" + ConfigManager.Main.bg_folder_path.replaceAll("\\\\","/") + simpleChar.getFile())); - jo_bg.add("ascent", new JsonPrimitive(simpleChar.getAscent())); - jo_bg.add("height", new JsonPrimitive(simpleChar.getHeight())); - JsonArray ja_simple = new JsonArray(); - ja_simple.add(native2ascii(simpleChar.getChars())); - jo_bg.add("chars", ja_simple); - jsonArray_default.add(jo_bg); - - try { - FileUtils.copyFile(new File(bg_config_file.getParent() + File.separator + simpleChar.getFile()), new File(textures_file.getPath() + File.separatorChar + StringUtils.replace(ConfigManager.Main.bg_folder_path, "\\", File.separator) + simpleChar.getFile())); - } - catch (IOException e){ - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to copy background " + key + " png files to resource pack..."); - } - } - } - catch (Exception e) { - e.printStackTrace(); - } - } - } - - //存储默认shader - if (ConfigManager.Main.extract) { - String path = "ResourcePack" + File.separator + "minecraft" + File.separator + "shaders" + File.separator + "core" + File.separator; - CustomNameplates.instance.saveResource(path + "rendertype_text.fsh", true); - CustomNameplates.instance.saveResource(path + "rendertype_text.json", true); - CustomNameplates.instance.saveResource(path + "rendertype_text.vsh", true); - CustomNameplates.instance.saveResource(path + "rendertype_text_see_through.fsh", true); - CustomNameplates.instance.saveResource(path + "rendertype_text_see_through.json", true); - CustomNameplates.instance.saveResource(path + "rendertype_text_see_through.vsh", true); - } - - //载入多个偏移 - if (ConfigManager.Main.offsets.size() != 0){ - - for (int offset : ConfigManager.Main.offsets) { - JsonObject jsonObject_offset = new JsonObject(); - JsonArray jsonArray_offset = new JsonArray(); - jsonObject_offset.add("providers", jsonArray_offset); - JsonObject jo_providers = new JsonObject(); - jo_providers.add("type", new JsonPrimitive("space")); - JsonObject jo_space = new JsonObject(); - jo_space.add(" ", new JsonPrimitive(4)); - jo_space.add("\\u200c", new JsonPrimitive(0)); - jo_providers.add("advances", jo_space); - jsonArray_offset.add(jo_providers); - JsonObject jo_ascii = new JsonObject(); - jo_ascii.add("type", new JsonPrimitive("bitmap")); - jo_ascii.add("file", new JsonPrimitive("minecraft:font/ascii.png")); - jo_ascii.add("ascent", new JsonPrimitive(offset)); - jo_ascii.add("height", new JsonPrimitive(8)); - JsonArray ja_ascii = new JsonArray(); - ja_ascii.add("\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000"); - ja_ascii.add("\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000"); - ja_ascii.add("\\u0020\\u0021\\u0022\\u0023\\u0024\\u0025\\u0026\\u0027\\u0028\\u0029\\u002a\\u002b\\u002c\\u002d\\u002e\\u002f"); - ja_ascii.add("\\u0030\\u0031\\u0032\\u0033\\u0034\\u0035\\u0036\\u0037\\u0038\\u0039\\u003a\\u003b\\u003c\\u003d\\u003e\\u003f"); - ja_ascii.add("\\u0040\\u0041\\u0042\\u0043\\u0044\\u0045\\u0046\\u0047\\u0048\\u0049\\u004a\\u004b\\u004c\\u004d\\u004e\\u004f"); - ja_ascii.add("\\u0050\\u0051\\u0052\\u0053\\u0054\\u0055\\u0056\\u0057\\u0058\\u0059\\u005a\\u005b\\u005c\\u005d\\u005e\\u005f"); - ja_ascii.add("\\u0060\\u0061\\u0062\\u0063\\u0064\\u0065\\u0066\\u0067\\u0068\\u0069\\u006a\\u006b\\u006c\\u006d\\u006e\\u006f"); - ja_ascii.add("\\u0070\\u0071\\u0072\\u0073\\u0074\\u0075\\u0076\\u0077\\u0078\\u0079\\u007a\\u007b\\u007c\\u007d\\u007e\\u0000"); - ja_ascii.add("\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000"); - ja_ascii.add("\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u00a3\\u0000\\u0000\\u0192"); - ja_ascii.add("\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u00aa\\u00ba\\u0000\\u0000\\u00ac\\u0000\\u0000\\u0000\\u00ab\\u00bb"); - ja_ascii.add("\\u2591\\u2592\\u2593\\u2502\\u2524\\u2561\\u2562\\u2556\\u2555\\u2563\\u2551\\u2557\\u255d\\u255c\\u255b\\u2510"); - ja_ascii.add("\\u2514\\u2534\\u252c\\u251c\\u2500\\u253c\\u255e\\u255f\\u255a\\u2554\\u2569\\u2566\\u2560\\u2550\\u256c\\u2567"); - ja_ascii.add("\\u2568\\u2564\\u2565\\u2559\\u2558\\u2552\\u2553\\u256b\\u256a\\u2518\\u250c\\u2588\\u2584\\u258c\\u2590\\u2580"); - ja_ascii.add("\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u2205\\u2208\\u0000"); - ja_ascii.add("\\u2261\\u00b1\\u2265\\u2264\\u2320\\u2321\\u00f7\\u2248\\u00b0\\u2219\\u0000\\u221a\\u207f\\u00b2\\u25a0\\u0000"); - jo_ascii.add("chars", ja_ascii); - jsonArray_offset.add(jo_ascii); - - try (FileWriter fileWriter = new FileWriter( - CustomNameplates.instance.getDataFolder() + - File.separator + "ResourcePack" + - File.separator + ConfigManager.Main.namespace + - File.separator + "font" + - File.separator + "offset_" + offset + ".json")) { - fileWriter.write(jsonObject_offset.toString().replace("\\\\", "\\")); - } - catch (IOException e) { - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to generate offset font json..."); - } - } - } - - try (FileWriter fileWriter = new FileWriter( - CustomNameplates.instance.getDataFolder() + - File.separator + "ResourcePack" + - File.separator + ConfigManager.Main.namespace + - File.separator + "font" + - File.separator + ConfigManager.Main.font + ".json")) - { - fileWriter.write(jsonObject_default.toString().replace("\\\\", "\\")); - } - catch (IOException e) { - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to generate font json..."); - } - - if (NAMEPLATES != null) AdventureUtil.consoleMessage("[CustomNameplates] Loaded " + (NAMEPLATES.size() -1) + " nameplates"); - if (BUBBLES != null) AdventureUtil.consoleMessage("[CustomNameplates] Loaded " + BUBBLES.size() + " bubbles"); - if (BACKGROUNDS != null) AdventureUtil.consoleMessage("[CustomNameplates] Loaded " + BACKGROUNDS.size() + " backgrounds"); - //复制到其他插件文件夹中 - hookCopy(gd_file); - } - - private void saveDefaultNameplates() { - String[] png_list = new String[]{"cat", "egg", "cheems", "wither", "xmas", "halloween", "hutao", "starsky", "trident", "rabbit"}; - String[] part_list = new String[]{"_left.png", "_middle.png", "_right.png", ".yml"}; - for (String name : png_list) { - for (String part : part_list) { - CustomNameplates.instance.saveResource("nameplates" + File.separatorChar + name + part, false); - } - } - } - - private void saveDefaultBubbles() { - String[] png_list = new String[]{"chat"}; - String[] part_list = new String[]{"_left.png", "_middle.png", "_right.png", "_tail.png", ".yml"}; - for (String name : png_list) { - for (String part : part_list) { - CustomNameplates.instance.saveResource("bubbles" + File.separatorChar + name + part, false); - } - } - } - - private void saveDefaultBackgrounds() { - String[] bg_list = new String[]{"b0", "b1", "b2", "b4", "b8", "b16","b32","b64","b128"}; - for (String bg : bg_list) { - CustomNameplates.instance.saveResource("backgrounds" + File.separatorChar + bg + ".png", false); - } - String[] config_list = new String[]{"bedrock_1", "bedrock_2", "bedrock_3"}; - for (String config : config_list) { - CustomNameplates.instance.saveResource("backgrounds" + File.separatorChar + config + ".yml", false); - } - } - - private void deleteDirectory(File file){ - if(file.exists()){ - try{ - FileUtils.deleteDirectory(file); - } - catch (IOException e){ - e.printStackTrace(); - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to delete generated folder..." ); - } - } - } - - private List getOffsetFontEnums() { - ArrayList list = new ArrayList<>(); - for (FontOffset offsetFont : FontOffset.values()) { - list.add(this.getOffsetFontChar(offsetFont.getHeight(), offsetFont.getCharacter())); - } - return list; - } - - private JsonObject getOffsetFontChar(int height, char character) { - JsonObject jsonObject = new JsonObject(); - jsonObject.add("type", new JsonPrimitive("bitmap")); - jsonObject.add("file", new JsonPrimitive(ConfigManager.Main.namespace + ":" + ConfigManager.Main.ss_folder_path.replaceAll("\\\\","/") + "space_split.png")); - jsonObject.add("ascent", new JsonPrimitive(-5000)); - jsonObject.add("height", new JsonPrimitive(height)); - final JsonArray jsonArray = new JsonArray(); - jsonArray.add(native2ascii(character)); - jsonObject.add("chars", jsonArray); - return jsonObject; - } - - private String native2ascii(char ch) { - if (ch > '\u007f') { - StringBuilder stringBuilder_1 = new StringBuilder("\\u"); - StringBuilder stringBuilder_2 = new StringBuilder(Integer.toHexString(ch)); - stringBuilder_2.reverse(); - for (int n = 4 - stringBuilder_2.length(), i = 0; i < n; i++) stringBuilder_2.append('0'); - for (int j = 0; j < 4; j++) stringBuilder_1.append(stringBuilder_2.charAt(3 - j)); - return stringBuilder_1.toString(); - } - return Character.toString(ch); - } - - private void saveSplit(String path) { - try{ - CustomNameplates.instance.saveResource("space_split.png", false); - FileUtils.copyFile(new File(CustomNameplates.instance.getDataFolder(),"space_split.png"), new File(path + File.separator + StringUtils.replace(ConfigManager.Main.ss_folder_path, "\\", File.separator) + "space_split.png")); - new File(CustomNameplates.instance.getDataFolder(),"space_split.png").delete(); - }catch (IOException e){ - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to copy space_split.png to resource pack..."); - } - } - - private void hookCopy(File generated) { - if (ConfigManager.Main.itemsAdder){ - try { - FileUtils.copyDirectory(generated, new File(Bukkit.getPluginManager().getPlugin("ItemsAdder").getDataFolder() + File.separator + "data"+ File.separator + "resource_pack" + File.separator + "assets") ); - } - catch (IOException e){ - e.printStackTrace(); - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to copy files to ItemsAdder..."); - } - } - if (ConfigManager.Main.oraxen){ - try { - FileUtils.copyDirectory(new File(generated, File.separator + ConfigManager.Main.namespace), new File(Bukkit.getPluginManager().getPlugin("Oraxen").getDataFolder() + File.separator + "pack"+ File.separator + "assets" + File.separator + ConfigManager.Main.namespace)); - } - catch (IOException e){ - e.printStackTrace(); - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to copy files to Oraxen..."); - } - } - } - - public NameplateConfig getNameplateConfig(String nameplate) { - return NAMEPLATES.get(nameplate); - } - - public BubbleConfig getBubbleConfig(String bubble) { - return BUBBLES.get(bubble); - } - - public BackGround getBackground(String background) { - return BACKGROUNDS.get(background); - } -} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/utils/AdventureUtil.java b/src/main/java/net/momirealms/customnameplates/utils/AdventureUtil.java index 065d8e0..5b733b0 100644 --- a/src/main/java/net/momirealms/customnameplates/utils/AdventureUtil.java +++ b/src/main/java/net/momirealms/customnameplates/utils/AdventureUtil.java @@ -18,19 +18,20 @@ package net.momirealms.customnameplates.utils; import net.kyori.adventure.audience.Audience; -import net.kyori.adventure.key.Key; -import net.kyori.adventure.sound.Sound; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.title.Title; import net.momirealms.customnameplates.CustomNameplates; import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.time.Duration; - public class AdventureUtil { + public static void sendMessage(CommandSender sender, String s) { + if (sender instanceof Player player) playerMessage(player, s); + else consoleMessage(s); + } + public static void consoleMessage(String s) { Audience au = CustomNameplates.adventure.sender(Bukkit.getConsoleSender()); MiniMessage mm = MiniMessage.miniMessage(); @@ -45,23 +46,9 @@ public class AdventureUtil { au.sendMessage(parsed); } - public static void playerTitle(Player player, String s1, String s2, int in, int duration, int out) { - Audience au = CustomNameplates.adventure.player(player); - MiniMessage mm = MiniMessage.miniMessage(); - Title.Times times = Title.Times.times(Duration.ofMillis(in), Duration.ofMillis(duration), Duration.ofMillis(out)); - Title title = Title.title(mm.deserialize(s1), mm.deserialize(s2), times); - au.showTitle(title); - } - public static void playerActionbar(Player player, String s) { Audience au = CustomNameplates.adventure.player(player); MiniMessage mm = MiniMessage.miniMessage(); au.sendActionBar(mm.deserialize(s)); } - - public static void playerSound(Player player, Sound.Source source, Key key) { - Sound sound = Sound.sound(key, source, 1, 1); - Audience au = CustomNameplates.adventure.player(player); - au.playSound(sound); - } } diff --git a/src/main/java/net/momirealms/customnameplates/utils/ConfigUtil.java b/src/main/java/net/momirealms/customnameplates/utils/ConfigUtil.java index e14360a..f602360 100644 --- a/src/main/java/net/momirealms/customnameplates/utils/ConfigUtil.java +++ b/src/main/java/net/momirealms/customnameplates/utils/ConfigUtil.java @@ -23,32 +23,78 @@ import dev.dejvokep.boostedyaml.settings.dumper.DumperSettings; import dev.dejvokep.boostedyaml.settings.general.GeneralSettings; import dev.dejvokep.boostedyaml.settings.loader.LoaderSettings; import dev.dejvokep.boostedyaml.settings.updater.UpdaterSettings; -import net.momirealms.customnameplates.ConfigManager; import net.momirealms.customnameplates.CustomNameplates; import net.momirealms.customnameplates.helper.Log; +import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; import java.io.IOException; public class ConfigUtil { - public static void update(){ + private static YamlConfiguration module; + + public static void load() { + module = getConfig("MODULES.yml"); + } + + public static boolean isModuleEnabled(String moduleName) { + return module.getBoolean(moduleName, false); + } + + public static void update(String fileName){ try { - YamlDocument.create(new File(CustomNameplates.instance.getDataFolder(), "config.yml"), CustomNameplates.instance.getResource("config.yml"), GeneralSettings.DEFAULT, LoaderSettings.builder().setAutoUpdate(true).build(), DumperSettings.DEFAULT, UpdaterSettings.builder().setVersioning(new BasicVersioning("config-version")).build()); - YamlDocument.create(new File(CustomNameplates.instance.getDataFolder(), "nameplate.yml"), CustomNameplates.instance.getResource("nameplate.yml"), GeneralSettings.DEFAULT, LoaderSettings.builder().setAutoUpdate(true).build(), DumperSettings.DEFAULT, UpdaterSettings.builder().setVersioning(new BasicVersioning("config-version")).build()); - YamlDocument.create(new File(CustomNameplates.instance.getDataFolder(), "bubble.yml"), CustomNameplates.instance.getResource("bubble.yml"), GeneralSettings.DEFAULT, LoaderSettings.builder().setAutoUpdate(true).build(), DumperSettings.DEFAULT, UpdaterSettings.builder().setVersioning(new BasicVersioning("config-version")).build()); - YamlDocument.create(new File(CustomNameplates.instance.getDataFolder(), "MODULES.yml"), CustomNameplates.instance.getResource("MODULES.yml"), GeneralSettings.DEFAULT, LoaderSettings.builder().setAutoUpdate(true).build(), DumperSettings.DEFAULT, UpdaterSettings.builder().setVersioning(new BasicVersioning("config-version")).build()); - YamlDocument.create(new File(CustomNameplates.instance.getDataFolder(), "database.yml"), CustomNameplates.instance.getResource("database.yml"), GeneralSettings.DEFAULT, LoaderSettings.builder().setAutoUpdate(true).build(), DumperSettings.DEFAULT, UpdaterSettings.builder().setVersioning(new BasicVersioning("config-version")).build()); - }catch (IOException e){ + YamlDocument.create(new File(CustomNameplates.plugin.getDataFolder(), fileName), CustomNameplates.plugin.getResource(fileName), GeneralSettings.DEFAULT, LoaderSettings.builder().setAutoUpdate(true).build(), DumperSettings.DEFAULT, UpdaterSettings.builder().setVersioning(new BasicVersioning("config-version")).build()); + } catch (IOException e){ Log.warn(e.getMessage()); } } - public static void lang(){ + public static YamlConfiguration getConfig(String configName) { + File file = new File(CustomNameplates.plugin.getDataFolder(), configName); + if (!file.exists()) CustomNameplates.plugin.saveResource(configName, false); + return YamlConfiguration.loadConfiguration(file); + } + + public static YamlConfiguration readData(File file) { + if (!file.exists()) { + try { + file.getParentFile().mkdirs(); + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + AdventureUtil.consoleMessage("[CustomNameplates] Failed to generate data files!"); + } + } + return YamlConfiguration.loadConfiguration(file); + } + + public static void reloadConfigs() { + load(); + CustomNameplates.plugin.getConfigManager().unload(); + CustomNameplates.plugin.getConfigManager().load(); + CustomNameplates.plugin.getMessageManager().unload(); + CustomNameplates.plugin.getMessageManager().load(); + CustomNameplates.plugin.getBossBarManager().unload(); + CustomNameplates.plugin.getBossBarManager().load(); + CustomNameplates.plugin.getActionBarManager().unload(); + CustomNameplates.plugin.getActionBarManager().load(); + CustomNameplates.plugin.getPlaceholderManager().unload(); + CustomNameplates.plugin.getPlaceholderManager().load(); + CustomNameplates.plugin.getNameplateManager().unload(); + CustomNameplates.plugin.getNameplateManager().load(); + CustomNameplates.plugin.getChatBubblesManager().unload(); + CustomNameplates.plugin.getChatBubblesManager().load(); + CustomNameplates.plugin.getWidthManager().unload(); + CustomNameplates.plugin.getWidthManager().load(); + CustomNameplates.plugin.getDataManager().unload(); + CustomNameplates.plugin.getDataManager().load(); + CustomNameplates.plugin.getResourceManager().generateResourcePack(); try { - YamlDocument.create(new File(CustomNameplates.instance.getDataFolder(), "messages" + File.separator + ConfigManager.Main.lang +".yml"), CustomNameplates.instance.getResource("messages" + File.separator + ConfigManager.Main.lang +".yml"), GeneralSettings.DEFAULT, LoaderSettings.builder().setAutoUpdate(true).build(), DumperSettings.DEFAULT, UpdaterSettings.builder().setVersioning(new BasicVersioning("config-version")).build()); - }catch (IOException e){ - Log.warn(e.getMessage()); + Reflection.load(); + } + catch (Exception e) { + e.printStackTrace(); } } } diff --git a/src/main/java/net/momirealms/customnameplates/utils/HoloUtil.java b/src/main/java/net/momirealms/customnameplates/utils/HoloUtil.java index b2f61df..042c362 100644 --- a/src/main/java/net/momirealms/customnameplates/utils/HoloUtil.java +++ b/src/main/java/net/momirealms/customnameplates/utils/HoloUtil.java @@ -23,7 +23,6 @@ import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedDataWatcher; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.momirealms.customnameplates.CustomNameplates; import org.bukkit.Bukkit; @@ -80,12 +79,12 @@ public class HoloUtil { } for (int i = 1; i < duration * 20 - 1; i++){ - Bukkit.getScheduler().runTaskLater(CustomNameplates.instance, ()->{ + Bukkit.getScheduler().runTaskLater(CustomNameplates.plugin, ()->{ updatePlace(player, id); }, i); } - Bukkit.getScheduler().runTaskLater(CustomNameplates.instance, ()->{ + Bukkit.getScheduler().runTaskLater(CustomNameplates.plugin, ()->{ removeHolo(player, id); cache.remove(location); }, duration * 20L); diff --git a/src/main/java/net/momirealms/customnameplates/utils/JsonUtil.java b/src/main/java/net/momirealms/customnameplates/utils/JsonUtil.java deleted file mode 100644 index 5207029..0000000 --- a/src/main/java/net/momirealms/customnameplates/utils/JsonUtil.java +++ /dev/null @@ -1,29 +0,0 @@ -package net.momirealms.customnameplates.utils; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -import java.util.Map; - -public class JsonUtil { - - public static void getText(JsonElement jsonElement, StringBuilder stringBuilder) { - - if (jsonElement.isJsonObject()) { - JsonObject jsonObject = jsonElement.getAsJsonObject(); - for (Map.Entry set : jsonObject.entrySet()) { - if (set.getKey().equals("text")) { - stringBuilder.append(set.getValue().getAsString()); - } - else { - getText(set.getValue(), stringBuilder); - } - } - } - else if (jsonElement.isJsonArray()) { - for (JsonElement jsonElement1 : jsonElement.getAsJsonArray()) { - getText(jsonElement1, stringBuilder); - } - } - } -} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/hook/TABTeamHook.java b/src/main/java/net/momirealms/customnameplates/utils/NameplateUtil.java similarity index 69% rename from src/main/java/net/momirealms/customnameplates/hook/TABTeamHook.java rename to src/main/java/net/momirealms/customnameplates/utils/NameplateUtil.java index cd7e6e1..da64c0a 100644 --- a/src/main/java/net/momirealms/customnameplates/hook/TABTeamHook.java +++ b/src/main/java/net/momirealms/customnameplates/utils/NameplateUtil.java @@ -15,14 +15,9 @@ * along with this program. If not, see . */ -package net.momirealms.customnameplates.hook; +package net.momirealms.customnameplates.utils; -import me.neznamy.tab.shared.TAB; +public class NameplateUtil { -public class TABTeamHook { - public static String getTABTeam(String playerName){ - String teamName = TAB.getInstance().getPlayer(playerName).getTeamName(); - return teamName == null ? playerName : teamName; - } -} \ No newline at end of file +} diff --git a/src/main/java/net/momirealms/customnameplates/utils/SqlConnection.java b/src/main/java/net/momirealms/customnameplates/utils/SqlConnection.java deleted file mode 100644 index 8c35672..0000000 --- a/src/main/java/net/momirealms/customnameplates/utils/SqlConnection.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.utils; - -import com.zaxxer.hikari.HikariDataSource; -import net.momirealms.customnameplates.ConfigManager; -import net.momirealms.customnameplates.CustomNameplates; - -import java.io.File; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; - -public class SqlConnection { - - private String driver = "com.mysql.jdbc.Driver"; - - private final File dataFolder = CustomNameplates.instance.getDataFolder(); - - private boolean secon = false; - private boolean isfirstry = true; - - public int waitTimeOut = 10; - - public File userdata = new File(dataFolder, "data.db"); - private Connection connection = null; - private HikariDataSource hikari = null; - - /* - 新建Hikari配置 - */ - private void createNewHikariConfiguration() { - hikari = new HikariDataSource(); - hikari.setPoolName("[Nameplates]"); - hikari.setJdbcUrl(ConfigManager.Database.url); - hikari.setUsername(ConfigManager.Database.user); - hikari.setPassword(ConfigManager.Database.password); - hikari.setMaximumPoolSize(ConfigManager.Database.maximum_pool_size); - hikari.setMinimumIdle(ConfigManager.Database.minimum_idle); - hikari.setMaxLifetime(ConfigManager.Database.maximum_lifetime); - hikari.addDataSourceProperty("cachePrepStmts", "true"); - hikari.addDataSourceProperty("prepStmtCacheSize", "250"); - hikari.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); - hikari.addDataSourceProperty("userServerPrepStmts", "true"); - if (hikari.getMinimumIdle() < hikari.getMaximumPoolSize()) { - hikari.setIdleTimeout(ConfigManager.Database.idle_timeout); - } else { - hikari.setIdleTimeout(0); - } - } - - /* - 设置驱动,区分Mysql5与8 - */ - private void setDriver() { - if(ConfigManager.Database.use_mysql){ - try { - Class.forName("com.mysql.cj.jdbc.Driver"); - } catch (ClassNotFoundException e) { - driver = ("com.mysql.jdbc.Driver"); - return; - } - driver = ("com.mysql.cj.jdbc.Driver"); - }else { - driver = ("org.sqlite.JDBC"); - } - } - - public boolean setGlobalConnection() { - setDriver(); - try { - if (ConfigManager.Database.enable_pool) { - createNewHikariConfiguration(); - Connection connection = getConnection(); - closeHikariConnection(connection); - } else { - Class.forName(driver); - if(ConfigManager.Database.use_mysql){ - connection = DriverManager.getConnection(ConfigManager.Database.url, ConfigManager.Database.user, ConfigManager.Database.password); - }else { - connection = DriverManager.getConnection("jdbc:sqlite:" + userdata.toString()); - } - } - if (secon) { - AdventureUtil.consoleMessage("[CustomNameplates] Successfully reconnect to SQL!"); - } else { - secon = true; - } - return true; - } catch (SQLException e) { - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to connect to SQL!"); - e.printStackTrace(); - close(); - return false; - } catch (ClassNotFoundException e) { - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to load JDBC driver"); - } - return false; - } - - public Connection getConnectionAndCheck() { - if (!canConnect()) { - return null; - } - try { - return getConnection(); - } catch (SQLException e) { - if (isfirstry) { - isfirstry = false; - close(); - return getConnectionAndCheck(); - } else { - isfirstry = true; - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to connect to SQL!"); - close(); - e.printStackTrace(); - return null; - } - } - } - - public Connection getConnection() throws SQLException { - if (ConfigManager.Database.enable_pool) { - return hikari.getConnection(); - } else { - return connection; - } - } - - @SuppressWarnings("BooleanMethodIsAlwaysInverted") - public boolean canConnect() { - try { - if (ConfigManager.Database.enable_pool) { - if (hikari == null) { - return setGlobalConnection(); - } - if (hikari.isClosed()) { - return setGlobalConnection(); - } - } else { - if (connection == null) { - return setGlobalConnection(); - } - if (connection.isClosed()) { - return setGlobalConnection(); - } - if (ConfigManager.Database.use_mysql) { - if (!connection.isValid(waitTimeOut)) { - secon = false; - return setGlobalConnection(); - } - } - } - } catch (SQLException e) { - e.printStackTrace(); - return false; - } - return true; - } - - public void closeHikariConnection(Connection connection) { - if (!ConfigManager.Database.enable_pool) { - return; - } - try { - connection.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - } - - public void close() { - try { - if (connection != null) { - connection.close(); - } - if (hikari != null) { - hikari.close(); - } - } catch (SQLException e) { - AdventureUtil.consoleMessage("[CustomNameplates] Error! Failed to close SQL!"); - e.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customnameplates/utils/TeamManagePacketUtil.java b/src/main/java/net/momirealms/customnameplates/utils/TeamManagePacketUtil.java new file mode 100644 index 0000000..44fb2d8 --- /dev/null +++ b/src/main/java/net/momirealms/customnameplates/utils/TeamManagePacketUtil.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customnameplates.utils; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.InternalStructure; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.utility.MinecraftReflection; +import net.momirealms.customnameplates.CustomNameplates; +import net.momirealms.customnameplates.manager.TeamManager; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +import java.lang.reflect.InvocationTargetException; +import java.util.Collections; + +public class TeamManagePacketUtil { + + private final TeamManager teamManager; + + public TeamManagePacketUtil(TeamManager teamManager) { + this.teamManager = teamManager; + } + + public void createTeamToAll(Player joinPlayer) { + PacketContainer packetToAll = getPlayerTeamPacket(joinPlayer); + for (Player all : Bukkit.getOnlinePlayers()) { + getPlayerTeamPacket(all); + try { + CustomNameplates.protocolManager.sendServerPacket(joinPlayer, getPlayerTeamPacket(all)); + if (joinPlayer != all) CustomNameplates.protocolManager.sendServerPacket(all, packetToAll); + } + catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + } + + private PacketContainer getPlayerTeamPacket(Player joinPlayer) { + PacketContainer packetToAll = new PacketContainer(PacketType.Play.Server.SCOREBOARD_TEAM); + packetToAll.getIntegers().write(0,0); + packetToAll.getStrings().write(0, joinPlayer.getName()); + packetToAll.getModifier().write(2, Collections.singletonList(joinPlayer.getName())); + InternalStructure internalStructure = packetToAll.getOptionalStructures().read(0).get(); + internalStructure.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0,ChatColor.WHITE); + return packetToAll; + } + + public void destroyTeamToAll(Player quitPlayer) { + PacketContainer packetToAll = new PacketContainer(PacketType.Play.Server.SCOREBOARD_TEAM); + packetToAll.getIntegers().write(0,1); + packetToAll.getStrings().write(0, quitPlayer.getName()); + for (Player all : Bukkit.getOnlinePlayers()) { + try { + CustomNameplates.protocolManager.sendServerPacket(all, packetToAll); + } + catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + } +} diff --git a/src/main/resources/MODULES.yml b/src/main/resources/MODULES.yml index d1a3182..5185b81 100644 --- a/src/main/resources/MODULES.yml +++ b/src/main/resources/MODULES.yml @@ -1,11 +1,10 @@ # Do not change config-version: '7' -#Nameplate module require a restart because it requires a SQL connection +#You should reload your resource pack when toggle these three modules nameplate: true - -#These modules can be toggled by reloading background: true +bubbles: true + bossbar: true actionbar: true -bubbles: true \ No newline at end of file diff --git a/src/main/resources/bubble.yml b/src/main/resources/bubble.yml index 0bfbcf5..19edbea 100644 --- a/src/main/resources/bubble.yml +++ b/src/main/resources/bubble.yml @@ -1,5 +1,10 @@ # Do not change -config-version: '8' +config-version: '9' + +# Currently supported chat plugins: TrChat +blacklist-channels: + - Private + - Staff bubble: diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 2ce5f26..dcf7d06 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,5 +1,5 @@ # Do not change -config-version: '12' +config-version: '13' config: # Language @@ -8,26 +8,18 @@ config: # Should the plugin hook into other plugins integrations: - # When enabled, the plugin will be able to parse prefix and suffix - # Require restart to register papi - PlaceholderAPI: true # When enabled, the plugin will automatically place the resource pack # folder into the resource pack generated by ItemsAdder/Oraxen. - # And players would be able to use emoji in chatting bubbles ItemsAdder: false Oraxen: false # When enabled, the plugin will hook into TAB's team management # require a restart to apply this - TAB: true + TAB: false # When enabled, plugin will receive team data from TAB on proxy server # You need to install CustomNameplates on BungeeCord too, otherwise you might be kicked from the server if you enabled "create-fake-team" in nameplate.yml TAB-BC: false # TrChat TrChat: false - # Prevent players from seeing chatting bubble texts in specified channels - TrChat-exlude-channels: - - 'Private' - - 'Staff' # Your namespace # If you don't know how font works, don't change this diff --git a/src/main/resources/database.yml b/src/main/resources/database.yml index 8447868..268c209 100644 --- a/src/main/resources/database.yml +++ b/src/main/resources/database.yml @@ -1,17 +1,8 @@ -# Do not change -config-version: '7' +config-version: '8' -settings: - # Valid Options: SQLite MYSQL - # Only MYSQL supports pool. - # Restart is a must when you change database configuration. - storage-mode: SQLite - use-pool: false - disable-async: false - # If you are updating from a version lower than 2.0-PRE-6 - # Enable this to migrate data! If you are using MySQL you only need one server to proceed migration - # BackUp your data before enabling this! - migration: false +# YAML/MySQL/MariaDB +# 存储模式 +data-storage-method: YAML # MySQL settings MySQL: @@ -20,16 +11,32 @@ MySQL: user: root password: password database: minecraft - table-name: nameplates_data - property: - use-ssl: false - encoding: utf8 - timezone: '' - allowPublicKeyRetrieval: false + table: nameplates_data + properties: + cachePrepStmts: 'true' + prepStmtCacheSize: '250' + prepStmtCacheSqlLimit: '2048' + useSSL: 'false' + verifyServerCertificate: 'false' + Pool-Settings: + maximum-pool-size: 10 + minimum-idle: 10 + maximum-lifetime: 180000 + idle-timeout: 60000 -# Connection pool settings -Pool-Settings: - maximum-pool-size: 10 - minimum-idle: 10 - maximum-lifetime: 180000 - idle-timeout: 60000 \ No newline at end of file +MariaDB: + host: localhost + port: 3306 + user: root + password: password + database: minecraft + table: nameplates_data + properties: + cachePrepStmts: 'true' + prepStmtCacheSize: '250' + prepStmtCacheSqlLimit: '2048' + Pool-Settings: + maximum-pool-size: 10 + minimum-idle: 10 + maximum-lifetime: 180000 + idle-timeout: 60000 \ No newline at end of file diff --git a/src/main/resources/messages/cn.yml b/src/main/resources/messages/cn.yml index ce6cbe8..4586d1f 100644 --- a/src/main/resources/messages/cn.yml +++ b/src/main/resources/messages/cn.yml @@ -2,6 +2,8 @@ messages: prefix: '[CustomNameplates] ' no-perm: '你没有权限!' lack-args: '参数不足!' + none-args: '非空参数' + invalid-args: '无效参数' reload: '插件已重载!' not-online: '玩家 {Player} 不在线!' no-console: '这个指令不能由控制台执行!' @@ -22,9 +24,9 @@ messages: equip-bubbles: '你已佩戴聊天气泡 {Bubble}' unequip-bubbles: '你已卸下聊天气泡' - available-bubbles: '可用聊天气泡: ' + available-bubbles: '可用聊天气泡: {Bubbles}' force-equip-bubbles: '成功使用聊天气泡 {Bubbles}' - force-unequip-bubbles: '你移除了你的聊天气泡' + force-unequip-bubbles: '你移除了 {Player} 的聊天气泡' not-exist-bubbles: '这个聊天气泡不存在!' not-available-bubbles: '你还未拥有这个气泡!' - have-no-bubbles: '你还没有拥有任何气泡.' \ No newline at end of file + have-no-bubbles: '你还没有拥有任何气泡.' diff --git a/src/main/resources/messages/en.yml b/src/main/resources/messages/en.yml index dddccce..81dc851 100644 --- a/src/main/resources/messages/en.yml +++ b/src/main/resources/messages/en.yml @@ -3,6 +3,8 @@ messages: no-perm: 'No Permission!' lack-args: 'Insufficient parameters!' reload: 'Reloaded!' + none-args: 'Non arguments' + invalid-args: 'Invalid arguments' not-online: 'Player {Player} is not online!' no-console: 'This command can be only executed by player!' cooldown: 'Previewing is still Ongoing!' @@ -23,8 +25,8 @@ messages: equip-bubbles: 'Successfully equipped chatting bubbles {Bubble}' force-equip-bubbles: 'Successfully equipped chatting bubbles {Bubbles}' unequip-bubbles: 'You removed your chatting bubbles' - force-unequip-bubbles: 'You removed your chatting bubbles' + force-unequip-bubbles: 'Successfully removed {Player}''s bubbles!' not-exist-bubbles: 'This bubble does not exist!' not-available-bubbles: 'This bubble is currently not available!' - available-bubbles: 'Available bubbles: ' + available-bubbles: 'Available bubbles: {Bubbles}' have-no-bubbles: 'You don''t have any bubbles yet' \ No newline at end of file diff --git a/src/main/resources/messages/es.yml b/src/main/resources/messages/es.yml index 655fd97..46a153e 100644 --- a/src/main/resources/messages/es.yml +++ b/src/main/resources/messages/es.yml @@ -3,6 +3,8 @@ messages: no-perm: 'No tienes permisos!' lack-args: '¡Parámetros insuficientes!' reload: 'Recargado!' + none-args: '¡Ningún argumento!' + invalid-args: 'Argumentos no válidos' not-online: 'Jugador {Player} no está en línea!' no-console: 'Este comando sólo puede ser ejecutado por el jugador.' cooldown: '¡El preestreno sigue en curso!' @@ -26,5 +28,5 @@ messages: force-unequip-bubbles: 'Se ha removido tu chatting bubbles' not-exist-bubbles: 'Este bubble no existe' not-available-bubbles: 'Este bubble no esta actualmente disponible!' - available-bubbles: 'Bubbles Disponibles: ' + available-bubbles: 'Bubbles Disponibles: {Bubbles}' have-no-bubbles: 'Todavía no tienes ningun bubble' \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 9a708d4..82415dc 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -5,9 +5,9 @@ api-version: 1.17 authors: [ XiaoMoMi ] depend: - ProtocolLib + - PlaceholderAPI softdepend: - ItemsAdder - - PlaceholderAPI - TAB - Oraxen - TrChat