mirror of
https://github.com/NEZNAMY/TAB.git
synced 2026-11-12 20:22:01 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0827d083bf | ||
|
|
2f7b42ab85 | ||
|
|
735aa666d6 | ||
|
|
c2ceb643e5 | ||
|
|
5c166f647f | ||
|
|
03a8fb9aa2 | ||
|
|
1a44c97d5a | ||
|
|
29cf0a26d6 | ||
|
|
33d172598d | ||
|
|
af1e685c2b | ||
|
|
09129974db |
No files matched your search
+1
-1
@@ -4,7 +4,7 @@ plugins {
|
||||
|
||||
allprojects {
|
||||
group = "me.neznamy"
|
||||
version = "4.1.7"
|
||||
version = "4.1.9"
|
||||
description = "An all-in-one solution that works"
|
||||
|
||||
ext.set("id", "tab")
|
||||
|
||||
@@ -2,7 +2,7 @@ dependencies {
|
||||
implementation(projects.shared)
|
||||
implementation("org.bstats:bstats-bukkit:3.0.1")
|
||||
compileOnly("org.purpurmc.purpur:purpur-api:1.16.5-R0.1-SNAPSHOT")
|
||||
compileOnly("me.clip:placeholderapi:2.11.2")
|
||||
compileOnly("me.clip:placeholderapi:2.11.6")
|
||||
compileOnly("com.mojang:authlib:1.5.25")
|
||||
compileOnly("com.github.MilkBowl:VaultAPI:1.7") {
|
||||
exclude("org.bukkit", "bukkit")
|
||||
|
||||
+4
-2
@@ -16,6 +16,7 @@ import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -309,7 +310,8 @@ public class TeamPacketData {
|
||||
if (!TeamPacketClass.isInstance(packet)) return;
|
||||
int action = TeamPacket_ACTION.getInt(packet);
|
||||
if (action == TeamAction.UPDATE) return;
|
||||
TeamPacket_PLAYERS.set(packet, player.getScoreboard().onTeamPacket(
|
||||
action, (String) TeamPacket_NAME.get(packet), (Collection<String>) TeamPacket_PLAYERS.get(packet)));
|
||||
Collection<String> players = (Collection<String>) TeamPacket_PLAYERS.get(packet);
|
||||
if (players == null) players = Collections.emptyList();
|
||||
TeamPacket_PLAYERS.set(packet, player.getScoreboard().onTeamPacket(action, (String) TeamPacket_NAME.get(packet), players));
|
||||
}
|
||||
}
|
||||
@@ -93,8 +93,13 @@ public class BungeeTabPlayer extends ProxyTabPlayer {
|
||||
LoginResult loginResult = ((InitialHandler)getPlayer().getPendingConnection()).getLoginProfile();
|
||||
if (loginResult == null) return null;
|
||||
Property[] properties = loginResult.getProperties();
|
||||
if (properties == null || properties.length == 0) return null; //Offline mode
|
||||
return new TabList.Skin(properties[0].getValue(), properties[0].getSignature());
|
||||
if (properties == null) return null; //Offline mode
|
||||
for (Property property : properties) {
|
||||
if (property.getName().equals(TabList.TEXTURES_PROPERTY)) {
|
||||
return new TabList.Skin(property.getValue(), property.getSignature());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+9
-1
@@ -20,7 +20,15 @@ public class BungeeTabList1193 extends BungeeTabList {
|
||||
private static final Map<Action, EnumSet<PlayerListItemUpdate.Action>> actions = new EnumMap<>(Action.class);
|
||||
|
||||
static {
|
||||
actions.put(Action.ADD_PLAYER, EnumSet.allOf(PlayerListItemUpdate.Action.class));
|
||||
// Do not use allOf because <1.21.2 does not support UPDATE_LIST_ORDER
|
||||
// TODO Once bungeecord dependency is updated, support it properly
|
||||
actions.put(Action.ADD_PLAYER, EnumSet.of(
|
||||
PlayerListItemUpdate.Action.ADD_PLAYER,
|
||||
PlayerListItemUpdate.Action.UPDATE_GAMEMODE,
|
||||
PlayerListItemUpdate.Action.UPDATE_LISTED,
|
||||
PlayerListItemUpdate.Action.UPDATE_LATENCY,
|
||||
PlayerListItemUpdate.Action.UPDATE_DISPLAY_NAME
|
||||
));
|
||||
actions.put(Action.UPDATE_GAME_MODE, EnumSet.of(PlayerListItemUpdate.Action.UPDATE_GAMEMODE));
|
||||
actions.put(Action.UPDATE_DISPLAY_NAME, EnumSet.of(PlayerListItemUpdate.Action.UPDATE_DISPLAY_NAME));
|
||||
actions.put(Action.UPDATE_LATENCY, EnumSet.of(PlayerListItemUpdate.Action.UPDATE_LATENCY));
|
||||
|
||||
@@ -84,7 +84,12 @@ public class SpongeTabPlayer extends BackendTabPlayer {
|
||||
public TabList.Skin getSkin() {
|
||||
List<ProfileProperty> list = getPlayer().profile().properties();
|
||||
if (list.isEmpty()) return null; // Offline mode
|
||||
return new TabList.Skin(list.get(0).value(), list.get(0).signature().orElse(null));
|
||||
for (ProfileProperty property : list) {
|
||||
if (property.name().equals(TabList.TEXTURES_PROPERTY)) {
|
||||
return new TabList.Skin(property.value(), property.signature().orElse(null));
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+12
-1
@@ -18,12 +18,19 @@ import me.neznamy.tab.shared.platform.EventListener;
|
||||
import me.neznamy.tab.shared.platform.TabPlayer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* The core for Velocity forwarding events into all enabled features
|
||||
*/
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
public class VelocityEventListener implements EventListener<Player> {
|
||||
|
||||
/** Map for tracking online players */
|
||||
private final Map<Player, UUID> players = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* Listens to player disconnecting from the server.
|
||||
*
|
||||
@@ -32,7 +39,10 @@ public class VelocityEventListener implements EventListener<Player> {
|
||||
*/
|
||||
@Subscribe
|
||||
public void onQuit(@NotNull DisconnectEvent e) {
|
||||
quit(e.getPlayer().getUniqueId());
|
||||
// Check if the player was actually connected to the server in the first place to avoid processing
|
||||
// disconnect of an existing player who is still there (because players are mapped by UUID in TAB)
|
||||
UUID id = players.remove(e.getPlayer());
|
||||
if (id != null) quit(id);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -66,6 +76,7 @@ public class VelocityEventListener implements EventListener<Player> {
|
||||
tab.getCPUManager().runTask(() -> {
|
||||
TabPlayer player = tab.getPlayer(e.getPlayer().getUniqueId());
|
||||
if (player == null) {
|
||||
players.put(e.getPlayer(), e.getPlayer().getUniqueId());
|
||||
tab.getFeatureManager().onJoin(createPlayer(e.getPlayer()));
|
||||
} else {
|
||||
player.getScoreboard().freeze(); // Prevent server switch listeners from sending packets before re-registering objectives in onLoginPacket
|
||||
|
||||
@@ -65,7 +65,12 @@ public class VelocityTabPlayer extends ProxyTabPlayer {
|
||||
public TabList.Skin getSkin() {
|
||||
List<GameProfile.Property> properties = getPlayer().getGameProfile().getProperties();
|
||||
if (properties.isEmpty()) return null; //Offline mode
|
||||
return new TabList.Skin(properties.get(0).getValue(), properties.get(0).getSignature());
|
||||
for (GameProfile.Property property : properties) {
|
||||
if (property.getName().equals(TabList.TEXTURES_PROPERTY)) {
|
||||
return new TabList.Skin(property.getValue(), property.getSignature());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in new issue
Block a user