mirror of
https://github.com/NEZNAMY/TAB.git
synced 2026-11-12 20:22:01 -05:00
more abstraction to remove duplications
This commit is contained in:
1 parent
a8b53b07e4
commit
135a473dc5
24 files changed
+273
-356
No files matched your search
@@ -204,7 +204,7 @@ public class BukkitTabPlayer extends ITabPlayer {
|
||||
if (vanished) return true;
|
||||
}
|
||||
List<MetadataValue> metadata = player.getMetadata("vanished");
|
||||
return metadata != null && !metadata.isEmpty() && metadata.get(0).asBoolean();
|
||||
return !metadata.isEmpty() && metadata.get(0).asBoolean();
|
||||
} catch (Exception e) {
|
||||
TAB.getInstance().getErrorManager().printError("Failed to check vanish status of " + player.getName(), e);
|
||||
}
|
||||
|
||||
@@ -71,7 +71,6 @@ public class NMSStorage {
|
||||
fields.put("CHANNEL", getFields(getClass("NetworkManager"), Channel.class).get(0));
|
||||
methods.put("getProfile", getClass("EntityPlayer").getMethod("getProfile"));
|
||||
}
|
||||
initializeEnums();
|
||||
initializeChatComponents();
|
||||
initializeChatPacket();
|
||||
initializeDataWatcher();
|
||||
@@ -81,6 +80,7 @@ public class NMSStorage {
|
||||
initializeOtherEntityPackets();
|
||||
initializePlayerInfoPacket();
|
||||
initializeScoreboardPackets();
|
||||
initializeEnums();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+3
-22
@@ -1,15 +1,14 @@
|
||||
package me.neznamy.tab.platforms.bungeecord;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import me.neznamy.tab.api.TabPlayer;
|
||||
import me.neznamy.tab.shared.TAB;
|
||||
import me.neznamy.tab.shared.placeholders.Placeholder;
|
||||
import me.neznamy.tab.shared.placeholders.PlaceholderRegistry;
|
||||
import me.neznamy.tab.shared.placeholders.PlayerPlaceholder;
|
||||
import me.neznamy.tab.shared.placeholders.ServerPlaceholder;
|
||||
import me.neznamy.tab.shared.proxy.ProxyPlaceholderRegistry;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.config.ServerInfo;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
@@ -17,29 +16,11 @@ import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
/**
|
||||
* Bungeecord registry to register bungeecord-only placeholders
|
||||
*/
|
||||
public class BungeePlaceholderRegistry implements PlaceholderRegistry {
|
||||
public class BungeePlaceholderRegistry extends ProxyPlaceholderRegistry {
|
||||
|
||||
@Override
|
||||
public List<Placeholder> registerPlaceholders() {
|
||||
List<Placeholder> placeholders = new ArrayList<>();
|
||||
placeholders.add(new PlayerPlaceholder("%canseeonline%", 2000) {
|
||||
public String get(TabPlayer p) {
|
||||
int count = 0;
|
||||
for (TabPlayer all : TAB.getInstance().getPlayers()){
|
||||
if (!all.isVanished() || p.hasPermission("tab.seevanished")) count++;
|
||||
}
|
||||
return String.valueOf(count);
|
||||
}
|
||||
});
|
||||
placeholders.add(new PlayerPlaceholder("%canseestaffonline%", 2000) {
|
||||
public String get(TabPlayer p) {
|
||||
int count = 0;
|
||||
for (TabPlayer all : TAB.getInstance().getPlayers()){
|
||||
if (all.isStaff() && (!all.isVanished() || p.hasPermission("tab.seevanished"))) count++;
|
||||
}
|
||||
return String.valueOf(count);
|
||||
}
|
||||
});
|
||||
List<Placeholder> placeholders = super.registerPlaceholders();
|
||||
placeholders.add(new PlayerPlaceholder("%displayname%", 500) {
|
||||
public String get(TabPlayer p) {
|
||||
return ((ProxiedPlayer) p.getPlayer()).getDisplayName();
|
||||
|
||||
@@ -2,15 +2,13 @@ package me.neznamy.tab.platforms.bungeecord;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import me.neznamy.tab.api.TabPlayer;
|
||||
import me.neznamy.tab.api.event.BungeeTABLoadEvent;
|
||||
import me.neznamy.tab.shared.Platform;
|
||||
import me.neznamy.tab.shared.TAB;
|
||||
import me.neznamy.tab.shared.features.BelowName;
|
||||
import me.neznamy.tab.shared.features.GlobalPlayerlist;
|
||||
import me.neznamy.tab.shared.features.NameTag;
|
||||
import me.neznamy.tab.shared.features.PingSpoof;
|
||||
import me.neznamy.tab.shared.features.PlaceholderManager;
|
||||
import me.neznamy.tab.shared.features.PluginMessageHandler;
|
||||
import me.neznamy.tab.shared.features.SpectatorFix;
|
||||
import me.neznamy.tab.shared.features.TabObjective;
|
||||
import me.neznamy.tab.shared.features.scoreboard.ScoreboardManager;
|
||||
@@ -18,8 +16,8 @@ import me.neznamy.tab.shared.permission.LuckPerms;
|
||||
import me.neznamy.tab.shared.permission.PermissionPlugin;
|
||||
import me.neznamy.tab.shared.permission.UltraPermissions;
|
||||
import me.neznamy.tab.shared.permission.VaultBridge;
|
||||
import me.neznamy.tab.shared.placeholders.PlayerPlaceholder;
|
||||
import me.neznamy.tab.shared.placeholders.UniversalPlaceholderRegistry;
|
||||
import me.neznamy.tab.shared.proxy.ProxyPlatform;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.plugin.Plugin;
|
||||
@@ -27,7 +25,7 @@ import net.md_5.bungee.api.plugin.Plugin;
|
||||
/**
|
||||
* Bungeecord implementation of Platform
|
||||
*/
|
||||
public class BungeePlatform implements Platform {
|
||||
public class BungeePlatform extends ProxyPlatform {
|
||||
|
||||
//instance of plugin
|
||||
private Plugin plugin;
|
||||
@@ -36,7 +34,8 @@ public class BungeePlatform implements Platform {
|
||||
* Constructs new instance with given parameter
|
||||
* @param plugin - main class
|
||||
*/
|
||||
public BungeePlatform(Plugin plugin) {
|
||||
public BungeePlatform(Plugin plugin, PluginMessageHandler plm) {
|
||||
super(plm);
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@@ -79,26 +78,6 @@ public class BungeePlatform implements Platform {
|
||||
ProxyServer.getInstance().getConsole().sendMessage(translateColors ? message.replace('&', '\u00a7') : message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerUnknownPlaceholder(String identifier) {
|
||||
if (identifier.startsWith("%rel_")) return;
|
||||
if (identifier.contains("_")) {
|
||||
String expansion = identifier.split("_")[0].replace("%", "").toLowerCase();
|
||||
if (expansion.equals("some")) return;
|
||||
TAB.getInstance().debug("Detected used PlaceholderAPI placeholder " + identifier);
|
||||
PlaceholderManager pl = TAB.getInstance().getPlaceholderManager();
|
||||
int refresh = pl.getDefaultRefresh();
|
||||
if (pl.getPlayerPlaceholderRefreshIntervals().containsKey(identifier)) refresh = pl.getPlayerPlaceholderRefreshIntervals().get(identifier);
|
||||
if (pl.getServerPlaceholderRefreshIntervals().containsKey(identifier)) refresh = pl.getServerPlaceholderRefreshIntervals().get(identifier);
|
||||
TAB.getInstance().getPlaceholderManager().registerPlaceholder(new PlayerPlaceholder(identifier, TAB.getInstance().getErrorManager().fixPlaceholderInterval(identifier, refresh)){
|
||||
public String get(TabPlayer p) {
|
||||
Main.getInstance().getPluginMessageHandler().requestPlaceholder(p, identifier);
|
||||
return getLastValues().get(p.getName());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getServerVersion() {
|
||||
return ProxyServer.getInstance().getVersion();
|
||||
|
||||
@@ -4,9 +4,9 @@ import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import de.myzelyam.api.vanish.BungeeVanishAPI;
|
||||
import me.neznamy.tab.shared.ITabPlayer;
|
||||
import me.neznamy.tab.shared.ProtocolVersion;
|
||||
import me.neznamy.tab.shared.TAB;
|
||||
import me.neznamy.tab.shared.proxy.ProxyTabPlayer;
|
||||
import net.md_5.bungee.UserConnection;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
@@ -19,7 +19,7 @@ import net.md_5.bungee.protocol.Protocol;
|
||||
/**
|
||||
* TabPlayer for BungeeCord
|
||||
*/
|
||||
public class BungeeTabPlayer extends ITabPlayer {
|
||||
public class BungeeTabPlayer extends ProxyTabPlayer {
|
||||
|
||||
//bungee internals to get player channel
|
||||
private static Field wrapperField;
|
||||
@@ -53,6 +53,7 @@ public class BungeeTabPlayer extends ITabPlayer {
|
||||
* @throws IllegalArgumentException
|
||||
*/
|
||||
public BungeeTabPlayer(ProxiedPlayer p) throws IllegalArgumentException, IllegalAccessException {
|
||||
super (Main.getInstance().getPluginMessageHandler());
|
||||
player = p;
|
||||
if (p.getServer() != null) {
|
||||
world = p.getServer().getInfo().getName();
|
||||
@@ -127,23 +128,7 @@ public class BungeeTabPlayer extends ITabPlayer {
|
||||
@Override
|
||||
public boolean isVanished() {
|
||||
if (ProxyServer.getInstance().getPluginManager().getPlugin("PremiumVanish") != null && BungeeVanishAPI.isInvisible(player)) return true;
|
||||
return getAttribute("vanished");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDisguised() {
|
||||
return getAttribute("disguised");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasInvisibilityPotion() {
|
||||
return getAttribute("invisible");
|
||||
}
|
||||
|
||||
private boolean getAttribute(String name) {
|
||||
Main.getInstance().getPluginMessageHandler().requestAttribute(this, name);
|
||||
if (!attributes.containsKey(name)) return false;
|
||||
return Boolean.parseBoolean(attributes.get(name));
|
||||
return super.isVanished();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -34,11 +34,11 @@ public class Main extends Plugin {
|
||||
ProxyServer.getInstance().getConsole().sendMessage("\u00a7c[TAB] The plugin requires BungeeCord build #1330 and up to work. Get it at https://ci.md-5.net/job/BungeeCord/");
|
||||
return;
|
||||
}
|
||||
TAB.setInstance(new TAB(new BungeePlatform(this), new BungeePacketBuilder(), ProtocolVersion.values()[1]));
|
||||
plm = new BungeePluginMessageHandler(this);
|
||||
TAB.setInstance(new TAB(new BungeePlatform(this, plm), new BungeePacketBuilder(), ProtocolVersion.values()[1]));
|
||||
getProxy().getPluginManager().registerListener(this, new BungeeEventListener());
|
||||
if (getProxy().getPluginManager().getPlugin("PremiumVanish") != null) getProxy().getPluginManager().registerListener(this, new PremiumVanishListener());
|
||||
getProxy().getPluginManager().registerCommand(this, new BTABCommand());
|
||||
plm = new BungeePluginMessageHandler(this);
|
||||
TAB.getInstance().load();
|
||||
Metrics metrics = new Metrics(this, 10535);
|
||||
metrics.addCustomChart(new SimplePie("permission_system", () -> TAB.getInstance().getPermissionPlugin().getName()));
|
||||
|
||||
@@ -1,17 +1,14 @@
|
||||
package me.neznamy.tab.shared.command.level1;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import me.neznamy.tab.api.TabPlayer;
|
||||
import me.neznamy.tab.shared.TAB;
|
||||
import me.neznamy.tab.shared.command.SubCommand;
|
||||
|
||||
/**
|
||||
* Handler for "/tab group" subcommand
|
||||
*/
|
||||
public class GroupCommand extends SubCommand {
|
||||
public class GroupCommand extends PropertyCommand {
|
||||
|
||||
/**
|
||||
* Constructs new instance
|
||||
@@ -82,15 +79,4 @@ public class GroupCommand extends SubCommand {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> complete(TabPlayer sender, String[] arguments) {
|
||||
List<String> suggestions = new ArrayList<>();
|
||||
if (arguments.length == 2) {
|
||||
for (String property : getAllProperties()) {
|
||||
if (property.startsWith(arguments[1].toLowerCase())) suggestions.add(property);
|
||||
}
|
||||
}
|
||||
return suggestions;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package me.neznamy.tab.shared.command.level1;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@@ -84,12 +83,6 @@ public class PlayerCommand extends SubCommand {
|
||||
@Override
|
||||
public List<String> complete(TabPlayer sender, String[] arguments) {
|
||||
if (arguments.length == 1) return getPlayers(arguments[0]);
|
||||
List<String> suggestions = new ArrayList<>();
|
||||
if (arguments.length == 2) {
|
||||
for (String property : getAllProperties()) {
|
||||
if (property.startsWith(arguments[1].toLowerCase())) suggestions.add(property);
|
||||
}
|
||||
}
|
||||
return suggestions;
|
||||
return super.complete(sender, arguments);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package me.neznamy.tab.shared.command.level1;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@@ -83,12 +82,6 @@ public class PlayerUUIDCommand extends SubCommand {
|
||||
@Override
|
||||
public List<String> complete(TabPlayer sender, String[] arguments) {
|
||||
if (arguments.length == 1) return getPlayers(arguments[0]);
|
||||
List<String> suggestions = new ArrayList<>();
|
||||
if (arguments.length == 2) {
|
||||
for (String property : getAllProperties()) {
|
||||
if (property.startsWith(arguments[1].toLowerCase())) suggestions.add(property);
|
||||
}
|
||||
}
|
||||
return suggestions;
|
||||
return super.complete(sender, arguments);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package me.neznamy.tab.shared.command.level1;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import me.neznamy.tab.api.TabPlayer;
|
||||
import me.neznamy.tab.shared.command.SubCommand;
|
||||
|
||||
public abstract class PropertyCommand extends SubCommand {
|
||||
|
||||
protected PropertyCommand(String name, String permission) {
|
||||
super(name, permission);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> complete(TabPlayer sender, String[] arguments) {
|
||||
List<String> suggestions = new ArrayList<>();
|
||||
if (arguments.length == 2) {
|
||||
for (String property : getAllProperties()) {
|
||||
if (property.startsWith(arguments[1].toLowerCase())) suggestions.add(property);
|
||||
}
|
||||
}
|
||||
return suggestions;
|
||||
}
|
||||
}
|
||||
@@ -42,35 +42,7 @@ public class BelowName implements Loadable, JoinEventListener, WorldChangeListen
|
||||
disabledWorlds = tab.getConfiguration().getConfig().getStringList("disable-features-in-"+tab.getPlatform().getSeparatorType()+"s.belowname", Arrays.asList("disabled" + tab.getPlatform().getSeparatorType()));
|
||||
refreshUsedPlaceholders();
|
||||
tab.debug(String.format("Loaded BelowName feature with parameters number=%s, text=%s, disabledWorlds=%s", rawNumber, rawText, disabledWorlds));
|
||||
tab.getFeatureManager().registerFeature("belowname-text-refresher", new Refreshable() {
|
||||
|
||||
private List<String> usedPlaceholders;
|
||||
|
||||
{
|
||||
refreshUsedPlaceholders();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh(TabPlayer refreshed, boolean force) {
|
||||
if (isDisabledWorld(disabledWorlds, refreshed.getWorldName())) return;
|
||||
refreshed.sendCustomPacket(new PacketPlayOutScoreboardObjective(2, OBJECTIVE_NAME, refreshed.getProperty(TEXT_PROPERTY).updateAndGet(), EnumScoreboardHealthDisplay.INTEGER), TabFeature.BELOWNAME_TEXT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getUsedPlaceholders() {
|
||||
return usedPlaceholders;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refreshUsedPlaceholders() {
|
||||
usedPlaceholders = tab.getPlaceholderManager().getUsedPlaceholderIdentifiersRecursive(rawText);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TabFeature getFeatureType() {
|
||||
return TabFeature.BELOWNAME_TEXT;
|
||||
}
|
||||
});
|
||||
tab.getFeatureManager().registerFeature("belowname-text-refresher", new TextRefresher());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -165,4 +137,34 @@ public class BelowName implements Loadable, JoinEventListener, WorldChangeListen
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public class TextRefresher implements Refreshable {
|
||||
|
||||
private List<String> usedPlaceholders;
|
||||
|
||||
public TextRefresher(){
|
||||
refreshUsedPlaceholders();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh(TabPlayer refreshed, boolean force) {
|
||||
if (isDisabledWorld(disabledWorlds, refreshed.getWorldName())) return;
|
||||
refreshed.sendCustomPacket(new PacketPlayOutScoreboardObjective(2, OBJECTIVE_NAME, refreshed.getProperty(TEXT_PROPERTY).updateAndGet(), EnumScoreboardHealthDisplay.INTEGER), TabFeature.BELOWNAME_TEXT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getUsedPlaceholders() {
|
||||
return usedPlaceholders;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refreshUsedPlaceholders() {
|
||||
usedPlaceholders = tab.getPlaceholderManager().getUsedPlaceholderIdentifiersRecursive(rawText);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TabFeature getFeatureType() {
|
||||
return TabFeature.BELOWNAME_TEXT;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -706,11 +706,7 @@ public class IChatBaseComponent {
|
||||
builder.append(color.getLegacyColor().getFormat());
|
||||
}
|
||||
}
|
||||
if (isBold()) builder.append(EnumChatFormat.BOLD.getFormat());
|
||||
if (isItalic()) builder.append(EnumChatFormat.ITALIC.getFormat());
|
||||
if (isUnderlined()) builder.append(EnumChatFormat.UNDERLINE.getFormat());
|
||||
if (isStrikethrough()) builder.append(EnumChatFormat.STRIKETHROUGH.getFormat());
|
||||
if (isObfuscated()) builder.append(EnumChatFormat.OBFUSCATED.getFormat());
|
||||
appendMagicCodes(builder);
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package me.neznamy.tab.shared.proxy;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import me.neznamy.tab.api.TabPlayer;
|
||||
import me.neznamy.tab.shared.TAB;
|
||||
import me.neznamy.tab.shared.placeholders.Placeholder;
|
||||
import me.neznamy.tab.shared.placeholders.PlaceholderRegistry;
|
||||
import me.neznamy.tab.shared.placeholders.PlayerPlaceholder;
|
||||
|
||||
public abstract class ProxyPlaceholderRegistry implements PlaceholderRegistry {
|
||||
|
||||
@Override
|
||||
public List<Placeholder> registerPlaceholders() {
|
||||
List<Placeholder> placeholders = new ArrayList<>();
|
||||
placeholders.add(new PlayerPlaceholder("%canseeonline%", 2000) {
|
||||
public String get(TabPlayer p) {
|
||||
int count = 0;
|
||||
for (TabPlayer all : TAB.getInstance().getPlayers()){
|
||||
if (!all.isVanished() || p.hasPermission("tab.seevanished")) count++;
|
||||
}
|
||||
return String.valueOf(count);
|
||||
}
|
||||
});
|
||||
placeholders.add(new PlayerPlaceholder("%canseestaffonline%", 2000) {
|
||||
public String get(TabPlayer p) {
|
||||
int count = 0;
|
||||
for (TabPlayer all : TAB.getInstance().getPlayers()){
|
||||
if (all.isStaff() && (!all.isVanished() || p.hasPermission("tab.seevanished"))) count++;
|
||||
}
|
||||
return String.valueOf(count);
|
||||
}
|
||||
});
|
||||
return placeholders;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package me.neznamy.tab.shared.proxy;
|
||||
|
||||
import me.neznamy.tab.api.TabPlayer;
|
||||
import me.neznamy.tab.shared.Platform;
|
||||
import me.neznamy.tab.shared.TAB;
|
||||
import me.neznamy.tab.shared.features.PlaceholderManager;
|
||||
import me.neznamy.tab.shared.features.PluginMessageHandler;
|
||||
import me.neznamy.tab.shared.placeholders.PlayerPlaceholder;
|
||||
|
||||
public abstract class ProxyPlatform implements Platform {
|
||||
|
||||
private PluginMessageHandler plm;
|
||||
|
||||
public ProxyPlatform(PluginMessageHandler plm) {
|
||||
this.plm = plm;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerUnknownPlaceholder(String identifier) {
|
||||
if (identifier.startsWith("%rel_")) return;
|
||||
if (identifier.contains("_")) {
|
||||
String expansion = identifier.split("_")[0].replace("%", "").toLowerCase();
|
||||
if (expansion.equals("some")) return;
|
||||
TAB.getInstance().debug("Detected used PlaceholderAPI placeholder " + identifier);
|
||||
PlaceholderManager pl = TAB.getInstance().getPlaceholderManager();
|
||||
int refresh = pl.getDefaultRefresh();
|
||||
if (pl.getPlayerPlaceholderRefreshIntervals().containsKey(identifier)) refresh = pl.getPlayerPlaceholderRefreshIntervals().get(identifier);
|
||||
if (pl.getServerPlaceholderRefreshIntervals().containsKey(identifier)) refresh = pl.getServerPlaceholderRefreshIntervals().get(identifier);
|
||||
TAB.getInstance().getPlaceholderManager().registerPlaceholder(new PlayerPlaceholder(identifier, TAB.getInstance().getErrorManager().fixPlaceholderInterval(identifier, refresh)){
|
||||
public String get(TabPlayer p) {
|
||||
plm.requestPlaceholder(p, identifier);
|
||||
return getLastValues().get(p.getName());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package me.neznamy.tab.shared.proxy;
|
||||
|
||||
import me.neznamy.tab.shared.ITabPlayer;
|
||||
import me.neznamy.tab.shared.features.PluginMessageHandler;
|
||||
|
||||
public abstract class ProxyTabPlayer extends ITabPlayer {
|
||||
|
||||
private PluginMessageHandler plm;
|
||||
|
||||
public ProxyTabPlayer(PluginMessageHandler plm) {
|
||||
this.plm = plm;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVanished() {
|
||||
return getAttribute("vanished");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDisguised() {
|
||||
return getAttribute("disguised");
|
||||
}
|
||||
@Override
|
||||
public boolean hasInvisibilityPotion() {
|
||||
return getAttribute("invisible");
|
||||
}
|
||||
|
||||
private boolean getAttribute(String name) {
|
||||
plm.requestAttribute(this, name);
|
||||
if (!attributes.containsKey(name)) return false;
|
||||
return Boolean.parseBoolean(attributes.get(name));
|
||||
}
|
||||
}
|
||||
@@ -13,10 +13,8 @@ import me.neznamy.tab.shared.rgb.format.CMIFormat;
|
||||
import me.neznamy.tab.shared.rgb.format.HtmlFormat;
|
||||
import me.neznamy.tab.shared.rgb.format.RGBFormatter;
|
||||
import me.neznamy.tab.shared.rgb.format.UnnamedFormat1;
|
||||
import me.neznamy.tab.shared.rgb.gradient.CMIGradient;
|
||||
import me.neznamy.tab.shared.rgb.gradient.CommonGradient;
|
||||
import me.neznamy.tab.shared.rgb.gradient.GradientPattern;
|
||||
import me.neznamy.tab.shared.rgb.gradient.HtmlGradient;
|
||||
import me.neznamy.tab.shared.rgb.gradient.IridescentGradient;
|
||||
import me.neznamy.tab.shared.rgb.gradient.KyoriGradient;
|
||||
|
||||
/**
|
||||
@@ -43,9 +41,21 @@ public class RGBUtils {
|
||||
registerRGBFormatter(new UnnamedFormat1());
|
||||
registerRGBFormatter(new HtmlFormat());
|
||||
|
||||
registerGradient(new CMIGradient());
|
||||
registerGradient(new HtmlGradient());
|
||||
registerGradient(new IridescentGradient());
|
||||
//{#RRGGBB>}text{#RRGGBB<}
|
||||
registerGradient(new CommonGradient(Pattern.compile("\\{#[0-9a-fA-F]{6}>\\}[^\\{]*\\{#[0-9a-fA-F]{6}<\\}"),
|
||||
Pattern.compile("\\{#[0-9a-fA-F]{6}\\|.>\\}[^\\{]*\\{#[0-9a-fA-F]{6}<\\}"),
|
||||
"{#", 9, 1, 10, 9));
|
||||
|
||||
//<#RRGGBB>Text</#RRGGBB>
|
||||
registerGradient(new CommonGradient(Pattern.compile("<#[0-9a-fA-F]{6}>[^<]*</#[0-9a-fA-F]{6}>"),
|
||||
Pattern.compile("<#[0-9a-fA-F]{6}\\|.>[^<]*</#[0-9a-fA-F]{6}>"),
|
||||
"<#", 9, 1, 9, 8));
|
||||
|
||||
//<$#RRGGBB>Text<$#RRGGBB>
|
||||
registerGradient(new CommonGradient(Pattern.compile("<\\$#[0-9a-fA-F]{6}>[^<]*<\\$#[0-9a-fA-F]{6}>"),
|
||||
Pattern.compile("<\\$#[0-9a-fA-F]{6}\\|.>[^<]*<\\$#[0-9a-fA-F]{6}>"),
|
||||
"<$", 10, 2, 10, 8));
|
||||
|
||||
registerGradient(new KyoriGradient());
|
||||
}
|
||||
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
package me.neznamy.tab.shared.rgb.gradient;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import me.neznamy.tab.shared.packets.EnumChatFormat;
|
||||
import me.neznamy.tab.shared.rgb.TextColor;
|
||||
|
||||
/**
|
||||
* Gradient applier for {#RRGGBB>}text{#RRGGBB<} and {#RRGGBB|L>}text{#RRGGBB<}
|
||||
*/
|
||||
public class CMIGradient extends GradientPattern {
|
||||
|
||||
private Pattern pattern = Pattern.compile("\\{#[0-9a-fA-F]{6}>\\}[^\\{]*\\{#[0-9a-fA-F]{6}<\\}");
|
||||
|
||||
private Pattern patternLegacy = Pattern.compile("\\{#[0-9a-fA-F]{6}\\|.>\\}[^\\{]*\\{#[0-9a-fA-F]{6}<\\}");
|
||||
|
||||
@Override
|
||||
public String applyPattern(String text, boolean ignorePlaceholders) {
|
||||
if (!text.contains("{#")) return text;
|
||||
String replaced = text;
|
||||
Matcher m = patternLegacy.matcher(replaced);
|
||||
while (m.find()) {
|
||||
String format = m.group();
|
||||
EnumChatFormat legacyColor = EnumChatFormat.getByChar(format.charAt(9));
|
||||
if ((ignorePlaceholders && format.contains("%")) || legacyColor == null) continue;
|
||||
TextColor start = new TextColor(format.substring(1, 8), legacyColor);
|
||||
String message = format.substring(12, format.length()-10);
|
||||
TextColor end = new TextColor(format.substring(format.length()-9, format.length()-2));
|
||||
String applied = asGradient(start, message, end);
|
||||
replaced = replaced.replace(format, applied);
|
||||
}
|
||||
m = pattern.matcher(replaced);
|
||||
while (m.find()) {
|
||||
String format = m.group();
|
||||
if (ignorePlaceholders && format.contains("%")) continue;
|
||||
TextColor start = new TextColor(format.substring(1, 8));
|
||||
String message = format.substring(10, format.length()-10);
|
||||
TextColor end = new TextColor(format.substring(format.length()-9, format.length()-2));
|
||||
String applied = asGradient(start, message, end);
|
||||
replaced = replaced.replace(format, applied);
|
||||
}
|
||||
return replaced;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package me.neznamy.tab.shared.rgb.gradient;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import me.neznamy.tab.shared.packets.EnumChatFormat;
|
||||
import me.neznamy.tab.shared.rgb.TextColor;
|
||||
|
||||
public class CommonGradient extends GradientPattern {
|
||||
|
||||
private Pattern pattern;
|
||||
private Pattern legacyPattern;
|
||||
private String containCheck;
|
||||
private int legacyCharPosition;
|
||||
private int startColorStart;
|
||||
private int messageStart;
|
||||
private int endColorStartSub;
|
||||
|
||||
public CommonGradient(Pattern pattern, Pattern legacyPattern, String containCheck, int legacyCharPosition,
|
||||
int startColorStart, int messageStart, int endColorStartSub) {
|
||||
this.pattern = pattern;
|
||||
this.legacyPattern = legacyPattern;
|
||||
this.containCheck = containCheck;
|
||||
this.legacyCharPosition = legacyCharPosition;
|
||||
this.startColorStart = startColorStart;
|
||||
this.messageStart = messageStart;
|
||||
this.endColorStartSub = endColorStartSub;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String applyPattern(String text, boolean ignorePlaceholders) {
|
||||
if (!text.contains(containCheck)) return text;
|
||||
String replaced = text;
|
||||
Matcher m = legacyPattern.matcher(replaced);
|
||||
while (m.find()) {
|
||||
String format = m.group();
|
||||
EnumChatFormat legacyColor = EnumChatFormat.getByChar(format.charAt(legacyCharPosition));
|
||||
if ((ignorePlaceholders && format.contains("%")) || legacyColor == null) continue;
|
||||
TextColor start = new TextColor(format.substring(startColorStart, startColorStart+7), legacyColor);
|
||||
String message = format.substring(messageStart+2, format.length()-10);
|
||||
TextColor end = new TextColor(format.substring(format.length()-endColorStartSub, format.length()-endColorStartSub+7));
|
||||
String applied = asGradient(start, message, end);
|
||||
replaced = replaced.replace(format, applied);
|
||||
}
|
||||
m = pattern.matcher(replaced);
|
||||
while (m.find()) {
|
||||
String format = m.group();
|
||||
if (ignorePlaceholders && format.contains("%")) continue;
|
||||
TextColor start = new TextColor(format.substring(startColorStart, startColorStart+7));
|
||||
String message = format.substring(messageStart, format.length()-10);
|
||||
TextColor end = new TextColor(format.substring(format.length()-endColorStartSub, format.length()-endColorStartSub+7));
|
||||
String applied = asGradient(start, message, end);
|
||||
replaced = replaced.replace(format, applied);
|
||||
}
|
||||
return replaced;
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
package me.neznamy.tab.shared.rgb.gradient;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import me.neznamy.tab.shared.packets.EnumChatFormat;
|
||||
import me.neznamy.tab.shared.rgb.TextColor;
|
||||
|
||||
/**
|
||||
* Gradient applier for <#RRGGBB>Text</#RRGGBB> and <#RRGGBB|L>Text</#RRGGBB>
|
||||
*/
|
||||
public class HtmlGradient extends GradientPattern {
|
||||
|
||||
private Pattern pattern = Pattern.compile("<#[0-9a-fA-F]{6}>[^<]*</#[0-9a-fA-F]{6}>");
|
||||
|
||||
private Pattern patternLegacy = Pattern.compile("<#[0-9a-fA-F]{6}\\|.>[^<]*</#[0-9a-fA-F]{6}>");
|
||||
|
||||
@Override
|
||||
public String applyPattern(String text, boolean ignorePlaceholders) {
|
||||
if (!text.contains("<#")) return text;
|
||||
String replaced = text;
|
||||
Matcher m = patternLegacy.matcher(replaced);
|
||||
while (m.find()) {
|
||||
String format = m.group();
|
||||
EnumChatFormat legacyColor = EnumChatFormat.getByChar(format.charAt(9));
|
||||
if ((ignorePlaceholders && format.contains("%")) || legacyColor == null) continue;
|
||||
TextColor start = new TextColor(format.substring(1, 8), legacyColor);
|
||||
String message = format.substring(11, format.length()-10);
|
||||
TextColor end = new TextColor(format.substring(format.length()-8, format.length()-1));
|
||||
String applied = asGradient(start, message, end);
|
||||
replaced = replaced.replace(format, applied);
|
||||
}
|
||||
m = pattern.matcher(replaced);
|
||||
while (m.find()) {
|
||||
String format = m.group();
|
||||
if (ignorePlaceholders && format.contains("%")) continue;
|
||||
TextColor start = new TextColor(format.substring(1, 8));
|
||||
String message = format.substring(9, format.length()-10);
|
||||
TextColor end = new TextColor(format.substring(format.length()-8, format.length()-1));
|
||||
String applied = asGradient(start, message, end);
|
||||
replaced = replaced.replace(format, applied);
|
||||
}
|
||||
return replaced;
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
package me.neznamy.tab.shared.rgb.gradient;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import me.neznamy.tab.shared.packets.EnumChatFormat;
|
||||
import me.neznamy.tab.shared.rgb.TextColor;
|
||||
|
||||
/**
|
||||
* Gradient applier for <$#RRGGBB>Text<$#RRGGBB> and <$#RRGGBB|L>Text<$#RRGGBB>
|
||||
*/
|
||||
public class IridescentGradient extends GradientPattern {
|
||||
|
||||
private final Pattern pattern = Pattern.compile("<\\$#[0-9a-fA-F]{6}>[^<]*<\\$#[0-9a-fA-F]{6}>");
|
||||
|
||||
private final Pattern patternLegacy = Pattern.compile("<\\$#[0-9a-fA-F]{6}\\|.>[^<]*<\\$#[0-9a-fA-F]{6}>");
|
||||
|
||||
@Override
|
||||
public String applyPattern(String text, boolean ignorePlaceholders) {
|
||||
if (!text.contains("<$")) return text;
|
||||
String replaced = text;
|
||||
Matcher m = patternLegacy.matcher(replaced);
|
||||
while (m.find()) {
|
||||
String format = m.group();
|
||||
EnumChatFormat legacyColor = EnumChatFormat.getByChar(format.charAt(10));
|
||||
if ((ignorePlaceholders && format.contains("%")) || legacyColor == null) continue;
|
||||
TextColor start = new TextColor(format.substring(2, 9), legacyColor);
|
||||
String message = format.substring(12, format.length()-10);
|
||||
TextColor end = new TextColor(format.substring(format.length()-8, format.length()-1));
|
||||
String applied = asGradient(start, message, end);
|
||||
replaced = replaced.replace(format, applied);
|
||||
}
|
||||
m = pattern.matcher(replaced);
|
||||
while (m.find()) {
|
||||
String format = m.group();
|
||||
if (ignorePlaceholders && format.contains("%")) continue;
|
||||
TextColor start = new TextColor(format.substring(2, 9));
|
||||
String message = format.substring(10, format.length()-10);
|
||||
TextColor end = new TextColor(format.substring(format.length()-8, format.length()-1));
|
||||
String applied = asGradient(start, message, end);
|
||||
replaced = replaced.replace(format, applied);
|
||||
}
|
||||
return replaced;
|
||||
}
|
||||
}
|
||||
@@ -61,17 +61,17 @@ public class Main {
|
||||
server.getConsoleCommandSource().sendMessage(Identity.nil(), Component.text("\u00a7c[TAB] The plugin requires Velocity 1.1.0 and up to work. Get it at https://velocitypowered.com/downloads"));
|
||||
return;
|
||||
}
|
||||
if (getServer().getConfiguration().isOnlineMode()) {
|
||||
if (server.getConfiguration().isOnlineMode()) {
|
||||
server.getConsoleCommandSource().sendMessage(Identity.nil(), Component.text("\u00a76[TAB] If you experience tablist prefix/suffix not working and global playerlist duplicating players, toggle "
|
||||
+ "\"use-online-uuid-in-tablist\" option in config.yml (set it to opposite value)."));
|
||||
}
|
||||
instance = this;
|
||||
TAB.setInstance(new TAB(new VelocityPlatform(getServer()), new VelocityPacketBuilder(), ProtocolVersion.values()[1]));
|
||||
getServer().getEventManager().register(this, new VelocityEventListener());
|
||||
VelocityTABCommand cmd = new VelocityTABCommand();
|
||||
getServer().getCommandManager().register(getServer().getCommandManager().metaBuilder("btab").build(), cmd);
|
||||
getServer().getCommandManager().register(getServer().getCommandManager().metaBuilder("vtab").build(), cmd);
|
||||
plm = new VelocityPluginMessageHandler(this);
|
||||
TAB.setInstance(new TAB(new VelocityPlatform(server, plm), new VelocityPacketBuilder(), ProtocolVersion.values()[1]));
|
||||
server.getEventManager().register(this, new VelocityEventListener());
|
||||
VelocityTABCommand cmd = new VelocityTABCommand();
|
||||
server.getCommandManager().register(server.getCommandManager().metaBuilder("btab").build(), cmd);
|
||||
server.getCommandManager().register(server.getCommandManager().metaBuilder("vtab").build(), cmd);
|
||||
TAB.getInstance().load();
|
||||
Metrics metrics = metricsFactory.make(this, 10533);
|
||||
metrics.addCustomChart(new SimplePie("global_playerlist_enabled", () -> TAB.getInstance().getFeatureManager().isFeatureEnabled("globalplayerlist") ? "Yes" : "No"));
|
||||
|
||||
+3
-25
@@ -1,22 +1,18 @@
|
||||
package me.neznamy.tab.platforms.velocity.v1_1_0;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
||||
|
||||
import me.neznamy.tab.api.TabPlayer;
|
||||
import me.neznamy.tab.shared.TAB;
|
||||
import me.neznamy.tab.shared.placeholders.Placeholder;
|
||||
import me.neznamy.tab.shared.placeholders.PlaceholderRegistry;
|
||||
import me.neznamy.tab.shared.placeholders.PlayerPlaceholder;
|
||||
import me.neznamy.tab.shared.placeholders.ServerPlaceholder;
|
||||
import me.neznamy.tab.shared.proxy.ProxyPlaceholderRegistry;
|
||||
|
||||
/**
|
||||
* Velocity registry to register velocity-only placeholders
|
||||
*/
|
||||
public class VelocityPlaceholderRegistry implements PlaceholderRegistry {
|
||||
public class VelocityPlaceholderRegistry extends ProxyPlaceholderRegistry {
|
||||
|
||||
//instance of proxyserver
|
||||
private ProxyServer server;
|
||||
@@ -31,7 +27,7 @@ public class VelocityPlaceholderRegistry implements PlaceholderRegistry {
|
||||
|
||||
@Override
|
||||
public List<Placeholder> registerPlaceholders() {
|
||||
List<Placeholder> placeholders = new ArrayList<>();
|
||||
List<Placeholder> placeholders = super.registerPlaceholders();
|
||||
for (RegisteredServer rServer : server.getAllServers()) {
|
||||
placeholders.add(new ServerPlaceholder("%online_" + rServer.getServerInfo().getName() + "%", 1000) {
|
||||
public String get() {
|
||||
@@ -39,24 +35,6 @@ public class VelocityPlaceholderRegistry implements PlaceholderRegistry {
|
||||
}
|
||||
});
|
||||
}
|
||||
placeholders.add(new PlayerPlaceholder("%canseeonline%", 2000) {
|
||||
public String get(TabPlayer p) {
|
||||
int count = 0;
|
||||
for (TabPlayer all : TAB.getInstance().getPlayers()){
|
||||
if (!all.isVanished() || p.hasPermission("tab.seevanished")) count++;
|
||||
}
|
||||
return String.valueOf(count);
|
||||
}
|
||||
});
|
||||
placeholders.add(new PlayerPlaceholder("%canseestaffonline%", 2000) {
|
||||
public String get(TabPlayer p) {
|
||||
int count = 0;
|
||||
for (TabPlayer all : TAB.getInstance().getPlayers()){
|
||||
if (all.isStaff() && (!all.isVanished() || p.hasPermission("tab.seevanished"))) count++;
|
||||
}
|
||||
return String.valueOf(count);
|
||||
}
|
||||
});
|
||||
return placeholders;
|
||||
}
|
||||
}
|
||||
+5
-25
@@ -7,23 +7,21 @@ import com.velocitypowered.api.plugin.PluginContainer;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
|
||||
import me.neznamy.tab.api.TabPlayer;
|
||||
import me.neznamy.tab.shared.Platform;
|
||||
import me.neznamy.tab.shared.TAB;
|
||||
import me.neznamy.tab.shared.features.GlobalPlayerlist;
|
||||
import me.neznamy.tab.shared.features.PlaceholderManager;
|
||||
import me.neznamy.tab.shared.features.PluginMessageHandler;
|
||||
import me.neznamy.tab.shared.permission.LuckPerms;
|
||||
import me.neznamy.tab.shared.permission.PermissionPlugin;
|
||||
import me.neznamy.tab.shared.permission.VaultBridge;
|
||||
import me.neznamy.tab.shared.placeholders.PlayerPlaceholder;
|
||||
import me.neznamy.tab.shared.placeholders.UniversalPlaceholderRegistry;
|
||||
import me.neznamy.tab.shared.proxy.ProxyPlatform;
|
||||
import net.kyori.adventure.identity.Identity;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
/**
|
||||
* Velocity implementation of Platform
|
||||
*/
|
||||
public class VelocityPlatform implements Platform {
|
||||
public class VelocityPlatform extends ProxyPlatform {
|
||||
|
||||
//instance of proxyserver
|
||||
private ProxyServer server;
|
||||
@@ -32,7 +30,8 @@ public class VelocityPlatform implements Platform {
|
||||
* Constructs new instance with given parameter
|
||||
* @param server - instance of proxyserver
|
||||
*/
|
||||
public VelocityPlatform(ProxyServer server) {
|
||||
public VelocityPlatform(ProxyServer server, PluginMessageHandler plm) {
|
||||
super(plm);
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
@@ -66,25 +65,6 @@ public class VelocityPlatform implements Platform {
|
||||
server.getConsoleCommandSource().sendMessage(Identity.nil(), Component.text(translateColors ? message.replace('&', '\u00a7') : message));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerUnknownPlaceholder(String identifier) {
|
||||
if (identifier.contains("_")) {
|
||||
String plugin = identifier.split("_")[0].replace("%", "").toLowerCase();
|
||||
if (plugin.equals("some")) return;
|
||||
TAB.getInstance().debug("Detected used PlaceholderAPI placeholder " + identifier);
|
||||
PlaceholderManager pl = TAB.getInstance().getPlaceholderManager();
|
||||
int refresh = pl.getDefaultRefresh();
|
||||
if (pl.getPlayerPlaceholderRefreshIntervals().containsKey(identifier)) refresh = pl.getPlayerPlaceholderRefreshIntervals().get(identifier);
|
||||
if (pl.getServerPlaceholderRefreshIntervals().containsKey(identifier)) refresh = pl.getServerPlaceholderRefreshIntervals().get(identifier);
|
||||
TAB.getInstance().getPlaceholderManager().registerPlaceholder(new PlayerPlaceholder(identifier, TAB.getInstance().getErrorManager().fixPlaceholderInterval(identifier, refresh)){
|
||||
public String get(TabPlayer p) {
|
||||
Main.getInstance().getPluginMessageHandler().requestPlaceholder(p, identifier);
|
||||
return getLastValues().get(p.getName());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getServerVersion() {
|
||||
return server.getVersion().getName() + " v" + server.getVersion().getVersion();
|
||||
|
||||
+3
-23
@@ -15,7 +15,6 @@ import com.velocitypowered.api.proxy.player.TabListEntry;
|
||||
import com.velocitypowered.api.util.GameProfile;
|
||||
import com.velocitypowered.api.util.GameProfile.Property;
|
||||
|
||||
import me.neznamy.tab.shared.ITabPlayer;
|
||||
import me.neznamy.tab.shared.ProtocolVersion;
|
||||
import me.neznamy.tab.shared.TAB;
|
||||
import me.neznamy.tab.shared.packets.IChatBaseComponent;
|
||||
@@ -24,6 +23,7 @@ import me.neznamy.tab.shared.packets.PacketPlayOutChat;
|
||||
import me.neznamy.tab.shared.packets.PacketPlayOutPlayerInfo;
|
||||
import me.neznamy.tab.shared.packets.PacketPlayOutPlayerInfo.PlayerInfoData;
|
||||
import me.neznamy.tab.shared.packets.PacketPlayOutPlayerListHeaderFooter;
|
||||
import me.neznamy.tab.shared.proxy.ProxyTabPlayer;
|
||||
import net.kyori.adventure.audience.MessageType;
|
||||
import net.kyori.adventure.bossbar.BossBar;
|
||||
import net.kyori.adventure.bossbar.BossBar.Color;
|
||||
@@ -34,7 +34,7 @@ import net.kyori.adventure.identity.Identity;
|
||||
/**
|
||||
* TabPlayer for Velocity
|
||||
*/
|
||||
public class VelocityTabPlayer extends ITabPlayer {
|
||||
public class VelocityTabPlayer extends ProxyTabPlayer {
|
||||
|
||||
//the velocity player
|
||||
private Player player;
|
||||
@@ -50,6 +50,7 @@ public class VelocityTabPlayer extends ITabPlayer {
|
||||
* @param p - velocity player
|
||||
*/
|
||||
public VelocityTabPlayer(Player p) {
|
||||
super (Main.getInstance().getPluginMessageHandler());
|
||||
player = p;
|
||||
Optional<ServerConnection> server = p.getCurrentServer();
|
||||
if (server.isPresent()) {
|
||||
@@ -203,27 +204,6 @@ public class VelocityTabPlayer extends ITabPlayer {
|
||||
public UUID getTablistUUID() {
|
||||
return tablistId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVanished() {
|
||||
return getAttribute("vanished");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDisguised() {
|
||||
return getAttribute("disguised");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasInvisibilityPotion() {
|
||||
return getAttribute("invisible");
|
||||
}
|
||||
|
||||
private boolean getAttribute(String name) {
|
||||
Main.getInstance().getPluginMessageHandler().requestAttribute(this, name);
|
||||
if (!attributes.containsKey(name)) return false;
|
||||
return Boolean.parseBoolean(attributes.get(name));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOnline() {
|
||||
|
||||
Reference in new issue
Block a user