9
0
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:
Xiao-MoMi
2022-07-29 00:50:11 +08:00
parent 43dccebb26
commit f6a6508c95
28 changed files with 575 additions and 125 deletions

View File

@@ -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

View File

@@ -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(){

View File

@@ -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();

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -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;
}
}

View File

@@ -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());
}
}
}
}

View File

@@ -0,0 +1,9 @@
package net.momirealms.customnameplates.bossbar.protocollib;
public enum Overlay {
NOTCHED_6,
NOTCHED_10,
NOTCHED_12,
NOTCHED_20,
PROGRESS
}

View File

@@ -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);
}
}

View File

@@ -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);
});
}
}

View File

@@ -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]));

View File

@@ -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;

View File

@@ -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_")){

View File

@@ -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;
}
}

View File

@@ -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());

View File

@@ -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);
}

View File

@@ -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){

View File

@@ -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("");

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -8,6 +8,7 @@ depend:
softdepend:
- ItemsAdder
- PlaceholderAPI
- TAB
commands:
customnameplates:
usage: /customnameplates help