mirror of
https://github.com/Xiao-MoMi/Custom-Nameplates.git
synced 2025-12-19 15:09:23 +00:00
2.3.0.2
This commit is contained in:
@@ -46,7 +46,8 @@ public interface TeamManager {
|
|||||||
* Get the team player in
|
* Get the team player in
|
||||||
*
|
*
|
||||||
* @param player player
|
* @param player player
|
||||||
|
* @param viewer
|
||||||
* @return team name
|
* @return team name
|
||||||
*/
|
*/
|
||||||
String getTeamName(Player player);
|
String getTeamName(Player player, Player viewer);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ plugins {
|
|||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
|
|
||||||
version = "2.3.0.0"
|
version = "2.3.0.2"
|
||||||
|
|
||||||
apply<JavaPlugin>()
|
apply<JavaPlugin>()
|
||||||
apply(plugin = "java")
|
apply(plugin = "java")
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ public class CustomNameplatesPluginImpl extends CustomNameplatesPlugin implement
|
|||||||
if (scheduler != null) ((SchedulerImpl) this.scheduler).shutdown();
|
if (scheduler != null) ((SchedulerImpl) this.scheduler).shutdown();
|
||||||
if (actionBarManager != null) ((ActionBarManagerImpl) actionBarManager).unload();
|
if (actionBarManager != null) ((ActionBarManagerImpl) actionBarManager).unload();
|
||||||
if (nameplateManager != null) ((NameplateManagerImpl) this.nameplateManager).disable();
|
if (nameplateManager != null) ((NameplateManagerImpl) this.nameplateManager).disable();
|
||||||
if (teamManager != null) ((TeamManagerImpl) this.teamManager).unload();
|
if (teamManager != null) ((TeamManagerImpl) this.teamManager).disable();
|
||||||
if (bossBarManager != null) ((BossBarManagerImpl) this.bossBarManager).unload();
|
if (bossBarManager != null) ((BossBarManagerImpl) this.bossBarManager).unload();
|
||||||
if (imageManager != null) ((ImageManagerImpl) this.imageManager).unload();
|
if (imageManager != null) ((ImageManagerImpl) this.imageManager).unload();
|
||||||
if (backGroundManager != null) ((BackGroundManagerImpl) this.backGroundManager).unload();
|
if (backGroundManager != null) ((BackGroundManagerImpl) this.backGroundManager).unload();
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ public class EntityDestroyListener extends PacketAdapter {
|
|||||||
this.manager = manager;
|
this.manager = manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void onPacketSending(PacketEvent event) {
|
public void onPacketSending(PacketEvent event) {
|
||||||
PacketContainer packet = event.getPacket();
|
PacketContainer packet = event.getPacket();
|
||||||
manager.onEntityDestroy(event.getPlayer(), packet.getIntLists().read(0));
|
manager.onEntityDestroy(event.getPlayer(), packet.getIntLists().read(0));
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ public class EntityLookListener extends PacketAdapter {
|
|||||||
this.manager = manager;
|
this.manager = manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void onPacketSending(PacketEvent event) {
|
public void onPacketSending(PacketEvent event) {
|
||||||
PacketContainer packet = event.getPacket();
|
PacketContainer packet = event.getPacket();
|
||||||
manager.onEntityMove(event.getPlayer(),
|
manager.onEntityMove(event.getPlayer(),
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ public class EntityMoveListener extends PacketAdapter {
|
|||||||
this.manager = manager;
|
this.manager = manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void onPacketSending(PacketEvent event) {
|
public void onPacketSending(PacketEvent event) {
|
||||||
PacketContainer packet = event.getPacket();
|
PacketContainer packet = event.getPacket();
|
||||||
manager.onEntityMove(event.getPlayer(),
|
manager.onEntityMove(event.getPlayer(),
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ public class EntitySpawnListener extends PacketAdapter {
|
|||||||
this.manager = manager;
|
this.manager = manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void onPacketSending(PacketEvent event) {
|
@Override
|
||||||
|
public void onPacketSending(PacketEvent event) {
|
||||||
manager.onEntitySpawn(event.getPlayer(), event.getPacket().getIntegers().read(0));
|
manager.onEntitySpawn(event.getPlayer(), event.getPacket().getIntegers().read(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ public class EntityTeleportListener extends PacketAdapter {
|
|||||||
this.manager = manager;
|
this.manager = manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void onPacketSending(PacketEvent event) {
|
public void onPacketSending(PacketEvent event) {
|
||||||
PacketContainer packet = event.getPacket();
|
PacketContainer packet = event.getPacket();
|
||||||
manager.onEntityTeleport(
|
manager.onEntityTeleport(
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ public class PlayerInfoListener extends PacketAdapter {
|
|||||||
this.manager = manager;
|
this.manager = manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void onPacketSending(PacketEvent event) {
|
public void onPacketSending(PacketEvent event) {
|
||||||
PacketContainer packet = event.getPacket();
|
PacketContainer packet = event.getPacket();
|
||||||
Set<EnumWrappers.PlayerInfoAction> actions = packet.getPlayerInfoActions().read(0);
|
Set<EnumWrappers.PlayerInfoAction> actions = packet.getPlayerInfoActions().read(0);
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public class TeamTagManagerImpl implements TeamTagManager {
|
|||||||
private final NameplateManager manager;
|
private final NameplateManager manager;
|
||||||
private final ConcurrentHashMap<UUID, TeamPlayer> teamPlayerMap;
|
private final ConcurrentHashMap<UUID, TeamPlayer> teamPlayerMap;
|
||||||
private CancellableTask refreshTask;
|
private CancellableTask refreshTask;
|
||||||
private PlayerInfoListener tabListener;
|
private final PlayerInfoListener tabListener;
|
||||||
|
|
||||||
public TeamTagManagerImpl(NameplateManager manager) {
|
public TeamTagManagerImpl(NameplateManager manager) {
|
||||||
this.manager = manager;
|
this.manager = manager;
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
package net.momirealms.customnameplates.paper.mechanic.team;
|
package net.momirealms.customnameplates.paper.mechanic.team;
|
||||||
|
|
||||||
|
import com.comphenix.protocol.ProtocolLibrary;
|
||||||
|
import com.comphenix.protocol.events.PacketAdapter;
|
||||||
import com.comphenix.protocol.events.PacketContainer;
|
import com.comphenix.protocol.events.PacketContainer;
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
import com.google.common.io.ByteArrayDataOutput;
|
||||||
@@ -34,11 +36,16 @@ import net.momirealms.customnameplates.paper.mechanic.team.provider.*;
|
|||||||
import net.momirealms.customnameplates.paper.setting.CNConfig;
|
import net.momirealms.customnameplates.paper.setting.CNConfig;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.plugin.messaging.PluginMessageListener;
|
import org.bukkit.plugin.messaging.PluginMessageListener;
|
||||||
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
|
import org.bukkit.scoreboard.Team;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
public class TeamManagerImpl implements TeamManager, PluginMessageListener {
|
public class TeamManagerImpl implements TeamManager, PluginMessageListener {
|
||||||
|
|
||||||
@@ -52,14 +59,25 @@ public class TeamManagerImpl implements TeamManager, PluginMessageListener {
|
|||||||
this.teamPacketAdaptor = new TeamPacket_1_17();
|
this.teamPacketAdaptor = new TeamPacket_1_17();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method would only be called when CustomNameplates manage the team
|
||||||
|
*
|
||||||
|
* @param player player
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void createTeam(Player player) {
|
public void createTeam(Player player) {
|
||||||
if (CNConfig.disableTeamManage) return;
|
if (CNConfig.disableTeamManage) return;
|
||||||
String team = teamProvider.getTeam(player);
|
if (CNConfig.isOtherTeamPluginHooked()) return;
|
||||||
if (team == null) {
|
String team = teamProvider.getTeam(player, null);
|
||||||
LogUtils.warn("Failed to get player " + player.getName() + "'s team.");
|
if (!team.equals(player.getName())) return;
|
||||||
return;
|
if (CNConfig.createRealTeam) {
|
||||||
|
Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
|
||||||
|
Team playerTeam = scoreboard.getTeam(team);
|
||||||
|
if (playerTeam == null) {
|
||||||
|
playerTeam = scoreboard.registerNewTeam(team);
|
||||||
}
|
}
|
||||||
|
playerTeam.addPlayer(player);
|
||||||
|
} else {
|
||||||
PacketContainer createOwner = teamPacketAdaptor.getTeamCreatePacket(
|
PacketContainer createOwner = teamPacketAdaptor.getTeamCreatePacket(
|
||||||
TeamCreate.builder()
|
TeamCreate.builder()
|
||||||
.teamName(team)
|
.teamName(team)
|
||||||
@@ -75,7 +93,7 @@ public class TeamManagerImpl implements TeamManager, PluginMessageListener {
|
|||||||
for (Player online : Bukkit.getOnlinePlayers()) {
|
for (Player online : Bukkit.getOnlinePlayers()) {
|
||||||
PacketManager.getInstance().send(online, createOwner);
|
PacketManager.getInstance().send(online, createOwner);
|
||||||
if (online == player) continue;
|
if (online == player) continue;
|
||||||
String onlineTeam = teamProvider.getTeam(online);
|
String onlineTeam = teamProvider.getTeam(online, null);
|
||||||
PacketContainer createOther = teamPacketAdaptor.getTeamCreatePacket(
|
PacketContainer createOther = teamPacketAdaptor.getTeamCreatePacket(
|
||||||
TeamCreate.builder()
|
TeamCreate.builder()
|
||||||
.teamName(onlineTeam)
|
.teamName(onlineTeam)
|
||||||
@@ -91,11 +109,24 @@ public class TeamManagerImpl implements TeamManager, PluginMessageListener {
|
|||||||
PacketManager.getInstance().send(player, createOther);
|
PacketManager.getInstance().send(player, createOther);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method would only be called when CustomNameplates manage the team
|
||||||
|
*
|
||||||
|
* @param player player
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void removeTeam(Player player) {
|
public void removeTeam(Player player) {
|
||||||
if (CNConfig.disableTeamManage) return;
|
if (CNConfig.disableTeamManage) return;
|
||||||
String team = teamProvider.getTeam(player);
|
if (CNConfig.isOtherTeamPluginHooked()) return;
|
||||||
|
String team = teamProvider.getTeam(player, null);
|
||||||
|
// If the team is created by other plugins
|
||||||
|
if (!team.equals(player.getName())) return;
|
||||||
|
if (CNConfig.createRealTeam) {
|
||||||
|
Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
|
||||||
|
Optional.ofNullable(scoreboard.getTeam(team)).ifPresent(Team::unregister);
|
||||||
|
} else {
|
||||||
PacketContainer packet = teamPacketAdaptor.getTeamRemovePacket(
|
PacketContainer packet = teamPacketAdaptor.getTeamRemovePacket(
|
||||||
TeamRemove.builder()
|
TeamRemove.builder()
|
||||||
.teamName(team)
|
.teamName(team)
|
||||||
@@ -106,11 +137,16 @@ public class TeamManagerImpl implements TeamManager, PluginMessageListener {
|
|||||||
PacketManager.getInstance().send(online, packet);
|
PacketManager.getInstance().send(online, packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTeam(Player owner, Player viewer, String prefix, String suffix, TeamColor color, TeamTagVisibility visibility) {
|
public void updateTeam(Player owner, Player viewer, String prefix, String suffix, TeamColor color, TeamTagVisibility visibility) {
|
||||||
if (CNConfig.disableTeamManage) return;
|
if (CNConfig.disableTeamManage) return;
|
||||||
String team = teamProvider.getTeam(owner);
|
String team = teamProvider.getTeam(owner, viewer);
|
||||||
|
if (team == null) {
|
||||||
|
LogUtils.warn("Failed to get player " + owner.getName() + "'s team for viewer " + viewer.getName());
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (color == TeamColor.NONE || color == TeamColor.CUSTOM)
|
if (color == TeamColor.NONE || color == TeamColor.CUSTOM)
|
||||||
color = TeamColor.WHITE;
|
color = TeamColor.WHITE;
|
||||||
if (plugin.getNameplateManager().isProxyMode()) {
|
if (plugin.getNameplateManager().isProxyMode()) {
|
||||||
@@ -145,6 +181,12 @@ public class TeamManagerImpl implements TeamManager, PluginMessageListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void unload() {
|
public void unload() {
|
||||||
|
if (teamProvider instanceof Listener listener) {
|
||||||
|
HandlerList.unregisterAll(listener);
|
||||||
|
}
|
||||||
|
if (teamProvider instanceof PacketAdapter adapter) {
|
||||||
|
ProtocolLibrary.getProtocolManager().removePacketListener(adapter);
|
||||||
|
}
|
||||||
Bukkit.getServer().getMessenger().unregisterIncomingPluginChannel(plugin, CHANNEL);
|
Bukkit.getServer().getMessenger().unregisterIncomingPluginChannel(plugin, CHANNEL);
|
||||||
Bukkit.getServer().getMessenger().unregisterOutgoingPluginChannel(plugin, CHANNEL);
|
Bukkit.getServer().getMessenger().unregisterOutgoingPluginChannel(plugin, CHANNEL);
|
||||||
}
|
}
|
||||||
@@ -159,13 +201,19 @@ public class TeamManagerImpl implements TeamManager, PluginMessageListener {
|
|||||||
} else {
|
} else {
|
||||||
teamProvider = new DefaultProvider();
|
teamProvider = new DefaultProvider();
|
||||||
}
|
}
|
||||||
|
if (teamProvider instanceof Listener listener) {
|
||||||
|
Bukkit.getPluginManager().registerEvents(listener, plugin);
|
||||||
|
}
|
||||||
|
if (teamProvider instanceof PacketAdapter adapter) {
|
||||||
|
ProtocolLibrary.getProtocolManager().addPacketListener(adapter);
|
||||||
|
}
|
||||||
Bukkit.getServer().getMessenger().registerOutgoingPluginChannel(plugin, CHANNEL);
|
Bukkit.getServer().getMessenger().registerOutgoingPluginChannel(plugin, CHANNEL);
|
||||||
Bukkit.getServer().getMessenger().registerIncomingPluginChannel(plugin, CHANNEL, this);
|
Bukkit.getServer().getMessenger().registerIncomingPluginChannel(plugin, CHANNEL, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTeamName(Player player) {
|
public String getTeamName(Player player, Player viewer) {
|
||||||
return null;
|
return teamProvider.getTeam(player, viewer);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleMessage(String... message) {
|
private void handleMessage(String... message) {
|
||||||
@@ -198,4 +246,13 @@ public class TeamManagerImpl implements TeamManager, PluginMessageListener {
|
|||||||
player.sendPluginMessage(plugin, CHANNEL, dataOutput.toByteArray());
|
player.sendPluginMessage(plugin, CHANNEL, dataOutput.toByteArray());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void disable() {
|
||||||
|
unload();
|
||||||
|
if (CNConfig.disableTeamManage) return;
|
||||||
|
if (CNConfig.isOtherTeamPluginHooked()) return;
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
|
removeTeam(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import org.bukkit.scoreboard.Team;
|
|||||||
public class CMIProvider implements TeamProvider {
|
public class CMIProvider implements TeamProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTeam(Player player) {
|
public String getTeam(Player player, Player ignore) {
|
||||||
Team team = CMI.getInstance().getSB().getPlayerTeam(player);
|
Team team = CMI.getInstance().getSB().getPlayerTeam(player);
|
||||||
if (team == null) return null;
|
if (team == null) return null;
|
||||||
return team.getName();
|
return team.getName();
|
||||||
|
|||||||
@@ -17,12 +17,20 @@
|
|||||||
|
|
||||||
package net.momirealms.customnameplates.paper.mechanic.team.provider;
|
package net.momirealms.customnameplates.paper.mechanic.team.provider;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
public class DefaultProvider implements TeamProvider {
|
public class DefaultProvider implements TeamProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTeam(Player player) {
|
public String getTeam(Player player, Player ignore) {
|
||||||
|
Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
|
||||||
|
Team team = scoreboard.getPlayerTeam(player);
|
||||||
|
if (team == null) {
|
||||||
return player.getName();
|
return player.getName();
|
||||||
}
|
}
|
||||||
|
return team.getName();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class TABProvider implements TeamProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTeam(Player player) {
|
public String getTeam(Player player, Player ignore) {
|
||||||
TabPlayer tabPlayer = api.getPlayer(player.getUniqueId());
|
TabPlayer tabPlayer = api.getPlayer(player.getUniqueId());
|
||||||
if (tabPlayer == null) {
|
if (tabPlayer == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -21,5 +21,5 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
public interface TeamProvider {
|
public interface TeamProvider {
|
||||||
|
|
||||||
String getTeam(Player player);
|
String getTeam(Player player, Player viewer);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,15 +17,73 @@
|
|||||||
|
|
||||||
package net.momirealms.customnameplates.paper.mechanic.team.provider;
|
package net.momirealms.customnameplates.paper.mechanic.team.provider;
|
||||||
|
|
||||||
|
import com.comphenix.protocol.PacketType;
|
||||||
|
import com.comphenix.protocol.events.*;
|
||||||
|
import com.comphenix.protocol.utility.MinecraftReflection;
|
||||||
|
import net.momirealms.customnameplates.api.CustomNameplatesPlugin;
|
||||||
|
import net.momirealms.customnameplates.common.team.TeamColor;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
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 org.bukkit.scoreboard.Scoreboard;
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
import org.bukkit.scoreboard.Team;
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
public class UnknownProvider implements TeamProvider {
|
import java.util.*;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
public class UnknownProvider extends PacketAdapter implements TeamProvider, Listener {
|
||||||
|
|
||||||
|
private final HashMap<UUID, PlayerTeamView> teamViewMap;
|
||||||
|
|
||||||
|
public UnknownProvider() {
|
||||||
|
super(CustomNameplatesPlugin.getInstance(), ListenerPriority.HIGHEST, PacketType.Play.Server.SCOREBOARD_TEAM);
|
||||||
|
this.teamViewMap = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
|
teamViewMap.put(event.getPlayer().getUniqueId(), new PlayerTeamView());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||||
|
teamViewMap.remove(event.getPlayer().getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTeam(Player player) {
|
public void onPacketSending(PacketEvent event) {
|
||||||
|
Player receiver = event.getPlayer();
|
||||||
|
PlayerTeamView view = teamViewMap.get(receiver.getUniqueId());
|
||||||
|
if (view == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PacketContainer packet = event.getPacket();
|
||||||
|
String team = (String) packet.getModifier().read(1);
|
||||||
|
switch ((int) packet.getModifier().read(0)) {
|
||||||
|
case 0, 3 -> view.addMembers(team, (Collection<String>) packet.getModifier().read(2));
|
||||||
|
case 1 -> view.removeTeam(team);
|
||||||
|
case 4 -> view.removeMembers(team, (Collection<String>) packet.getModifier().read(2));
|
||||||
|
default -> {
|
||||||
|
// ignore 2 update team info
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getTeam(Player player, Player viewer) {
|
||||||
|
PlayerTeamView view = teamViewMap.get(viewer.getUniqueId());
|
||||||
|
if (view != null) {
|
||||||
|
String team = view.getTeam(player);
|
||||||
|
if (team != null)
|
||||||
|
return team;
|
||||||
|
}
|
||||||
|
|
||||||
|
// should not reach here
|
||||||
|
CustomNameplatesPlugin.get().debug("Getting real teams for " + player.getName() + " viewer: " + viewer.getName());
|
||||||
Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
|
Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
|
||||||
Team team = scoreboard.getPlayerTeam(player);
|
Team team = scoreboard.getPlayerTeam(player);
|
||||||
if (team == null) {
|
if (team == null) {
|
||||||
@@ -33,4 +91,65 @@ public class UnknownProvider implements TeamProvider {
|
|||||||
}
|
}
|
||||||
return team.getName();
|
return team.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class PlayerTeamView {
|
||||||
|
|
||||||
|
private final HashMap<String, String> playerToTeamMap;
|
||||||
|
private final HashMap<String, String[]> teamToPlayerMap;
|
||||||
|
|
||||||
|
public PlayerTeamView() {
|
||||||
|
this.playerToTeamMap = new HashMap<>();
|
||||||
|
this.teamToPlayerMap = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTeam(Player player) {
|
||||||
|
return playerToTeamMap.get(player.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeTeam(String team) {
|
||||||
|
String[] removedMembers = teamToPlayerMap.remove(team);
|
||||||
|
if (removedMembers != null) {
|
||||||
|
for (String member : removedMembers) {
|
||||||
|
playerToTeamMap.remove(member);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addMembers(String team, Collection<String> members) {
|
||||||
|
String[] oldMembers = teamToPlayerMap.remove(team);
|
||||||
|
if (oldMembers != null) {
|
||||||
|
String[] newMembers = new String[members.size() + oldMembers.length];
|
||||||
|
int i = 0;
|
||||||
|
for (String m : oldMembers) {
|
||||||
|
newMembers[i] = m;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
for (String m : members) {
|
||||||
|
newMembers[i] = m;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
teamToPlayerMap.put(team, newMembers);
|
||||||
|
for (String member : newMembers) {
|
||||||
|
playerToTeamMap.put(member, team);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
teamToPlayerMap.put(team, members.toArray(new String[0]));
|
||||||
|
for (String member : members) {
|
||||||
|
playerToTeamMap.put(member, team);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeMembers(String team, Collection<String> members) {
|
||||||
|
String[] oldMembers = teamToPlayerMap.remove(team);
|
||||||
|
if (oldMembers != null) {
|
||||||
|
ArrayList<String> newMembers = new ArrayList<>(Arrays.asList(oldMembers));
|
||||||
|
for (String member : members) {
|
||||||
|
playerToTeamMap.remove(member);
|
||||||
|
newMembers.remove(member);
|
||||||
|
}
|
||||||
|
teamToPlayerMap.put(team, newMembers.toArray(new String[0]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import java.util.Objects;
|
|||||||
|
|
||||||
public class CNConfig {
|
public class CNConfig {
|
||||||
|
|
||||||
public static String configVersion = "23";
|
public static String configVersion = "24";
|
||||||
public static int cacheSize;
|
public static int cacheSize;
|
||||||
public static int corePoolSize;
|
public static int corePoolSize;
|
||||||
public static long keepAliveTime;
|
public static long keepAliveTime;
|
||||||
@@ -80,6 +80,7 @@ public class CNConfig {
|
|||||||
public static boolean disableTeamManage;
|
public static boolean disableTeamManage;
|
||||||
public static boolean velocitab;
|
public static boolean velocitab;
|
||||||
public static boolean unknownTeam;
|
public static boolean unknownTeam;
|
||||||
|
public static boolean createRealTeam;
|
||||||
|
|
||||||
public static void load() {
|
public static void load() {
|
||||||
try {
|
try {
|
||||||
@@ -166,9 +167,10 @@ public class CNConfig {
|
|||||||
cacheSize = config.getInt("other-settings.cache-size", 100);
|
cacheSize = config.getInt("other-settings.cache-size", 100);
|
||||||
|
|
||||||
legacyColorSupport = config.getBoolean("other-settings.legacy-color-code-support");
|
legacyColorSupport = config.getBoolean("other-settings.legacy-color-code-support");
|
||||||
|
createRealTeam = config.getBoolean("other-settings.create-real-teams", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isOtherTeamPluginHooked() {
|
public static boolean isOtherTeamPluginHooked() {
|
||||||
return tabTeam || cmiTeam;
|
return tabTeam || cmiTeam || unknownTeam;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Do not change
|
# Do not change
|
||||||
config-version: '23'
|
config-version: '24'
|
||||||
|
|
||||||
# Debug mode
|
# Debug mode
|
||||||
debug: false
|
debug: false
|
||||||
@@ -79,8 +79,12 @@ resource-pack:
|
|||||||
|
|
||||||
other-settings:
|
other-settings:
|
||||||
# Disable CustomNameplates' team management
|
# Disable CustomNameplates' team management
|
||||||
|
# Never enable this if you are using "Team" mode for name tags
|
||||||
disable-team-management: false
|
disable-team-management: false
|
||||||
|
|
||||||
|
# Create real teams on serverside. It's not recommended to enable this unless you meet BungeeCord team bugs.
|
||||||
|
create-real-teams: false
|
||||||
|
|
||||||
# It's recommended to use MiniMessage format. If you insist on using legacy color code "&", enable the support below.
|
# It's recommended to use MiniMessage format. If you insist on using legacy color code "&", enable the support below.
|
||||||
legacy-color-code-support: false
|
legacy-color-code-support: false
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,14 @@
|
|||||||
# https://mo-mi.gitbook.io/xiaomomi-plugins/plugin-wiki/customnameplates/custom-placeholders/conditional-text
|
# https://mo-mi.gitbook.io/xiaomomi-plugins/plugin-wiki/customnameplates/custom-placeholders/conditional-text
|
||||||
conditional-text:
|
conditional-text:
|
||||||
actionbar:
|
actionbar:
|
||||||
priority_0:
|
|
||||||
text: '%nameplates_background_other_actionbar%'
|
|
||||||
conditions:
|
|
||||||
'!gamemode': survival
|
|
||||||
priority_1:
|
priority_1:
|
||||||
text: '%nameplates_background_other_actionbar%'
|
text: '%nameplates_background_other_actionbar%'
|
||||||
conditions:
|
conditions:
|
||||||
|
'||':
|
||||||
'!=':
|
'!=':
|
||||||
value1: '%player_remaining_air%'
|
value1: '%player_remaining_air%'
|
||||||
value2: "300"
|
value2: "300"
|
||||||
|
'!gamemode': survival
|
||||||
priority_2:
|
priority_2:
|
||||||
text: '%nameplates_static_money_hud%%nameplates_offset_-180%%nameplates_static_other_actionbar%'
|
text: '%nameplates_static_money_hud%%nameplates_offset_-180%%nameplates_static_other_actionbar%'
|
||||||
conditions:
|
conditions:
|
||||||
|
|||||||
Reference in New Issue
Block a user