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