forked from GeyserMC/Geyser
Added a simple way to get a player by their xuid (#1642)
* Added IGeyserPingPassthrough#getPingInformation(InetSocketAddress) to make logging of the pinging IPs possible * Added GeyserConnector#getPlayerByXboxUuid * Added GeyserConnector#getPlayerByUuid and added some javadocs * Update connector/src/main/java/org/geysermc/connector/GeyserConnector.java Co-authored-by: rtm516 <rtm516@users.noreply.github.com> * Update connector/src/main/java/org/geysermc/connector/GeyserConnector.java Co-authored-by: rtm516 <rtm516@users.noreply.github.com> * Update GeyserConnector.java * Update SkinManager.java * Update SkinProvider.java * Renamed getPlayerByXboxUuid to getPlayerByXuid Co-authored-by: qlow <info@qlow.eu> Co-authored-by: rtm516 <rtm516@users.noreply.github.com>
This commit is contained in:
parent
02d99380d3
commit
9f6182f8df
3 changed files with 46 additions and 21 deletions
|
@ -44,6 +44,7 @@ import org.geysermc.connector.network.session.GeyserSession;
|
|||
import org.geysermc.connector.network.translators.BiomeTranslator;
|
||||
import org.geysermc.connector.network.translators.EntityIdentifierRegistry;
|
||||
import org.geysermc.connector.network.translators.PacketTranslatorRegistry;
|
||||
import org.geysermc.connector.network.translators.collision.CollisionTranslator;
|
||||
import org.geysermc.connector.network.translators.effect.EffectRegistry;
|
||||
import org.geysermc.connector.network.translators.item.ItemRegistry;
|
||||
import org.geysermc.connector.network.translators.item.ItemTranslator;
|
||||
|
@ -54,7 +55,6 @@ import org.geysermc.connector.network.translators.sound.SoundRegistry;
|
|||
import org.geysermc.connector.network.translators.world.WorldManager;
|
||||
import org.geysermc.connector.network.translators.world.block.BlockTranslator;
|
||||
import org.geysermc.connector.network.translators.world.block.entity.BlockEntityTranslator;
|
||||
import org.geysermc.connector.network.translators.collision.CollisionTranslator;
|
||||
import org.geysermc.connector.network.translators.world.block.entity.SkullBlockEntityTranslator;
|
||||
import org.geysermc.connector.utils.DimensionUtils;
|
||||
import org.geysermc.connector.utils.LanguageUtils;
|
||||
|
@ -67,10 +67,7 @@ import java.net.InetAddress;
|
|||
import java.net.InetSocketAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
@ -326,6 +323,38 @@ public class GeyserConnector {
|
|||
players.remove(player);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a player by their current UUID
|
||||
*
|
||||
* @param uuid the uuid
|
||||
* @return the player or <code>null</code> if there is no player online with this UUID
|
||||
*/
|
||||
public GeyserSession getPlayerByUuid(UUID uuid) {
|
||||
for (GeyserSession session : players) {
|
||||
if (session.getPlayerEntity().getUuid().equals(uuid)) {
|
||||
return session;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a player by their Xbox user identifier
|
||||
*
|
||||
* @param xboxUuid the Xbox user identifier
|
||||
* @return the player or <code>null</code> if there is no player online with this xuid
|
||||
*/
|
||||
public GeyserSession getPlayerByXuid(String xuid) {
|
||||
for (GeyserSession session : players) {
|
||||
if (session.getAuthData() != null && session.getAuthData().getXboxUUID().equals(xuid)) {
|
||||
return session;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static GeyserConnector start(PlatformType platformType, GeyserBootstrap bootstrap) {
|
||||
return new GeyserConnector(platformType, bootstrap);
|
||||
}
|
||||
|
|
|
@ -81,11 +81,10 @@ public class SkinManager {
|
|||
|
||||
// This attempts to find the xuid of the player so profile images show up for xbox accounts
|
||||
String xuid = "";
|
||||
for (GeyserSession player : GeyserConnector.getInstance().getPlayers()) {
|
||||
if (player.getPlayerEntity().getUuid().equals(uuid)) {
|
||||
GeyserSession player = GeyserConnector.getInstance().getPlayerByUuid(uuid);
|
||||
|
||||
if (player != null) {
|
||||
xuid = player.getAuthData().getXboxUUID();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
PlayerListPacket.Entry entry;
|
||||
|
@ -268,11 +267,10 @@ public class SkinManager {
|
|||
// return default skin with default cape when texture data is invalid
|
||||
String skinUrl = isAlex ? SkinProvider.EMPTY_SKIN_ALEX.getTextureUrl() : SkinProvider.EMPTY_SKIN.getTextureUrl();
|
||||
if ("steve".equals(skinUrl) || "alex".equals(skinUrl)) {
|
||||
for (GeyserSession session : GeyserConnector.getInstance().getPlayers()) {
|
||||
if (session.getPlayerEntity().getUuid().equals(profile.getId())) {
|
||||
GeyserSession session = GeyserConnector.getInstance().getPlayerByUuid(profile.getId());
|
||||
|
||||
if (session != null) {
|
||||
skinUrl = session.getClientData().getSkinId();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return new GameProfileData(skinUrl, SkinProvider.EMPTY_CAPE.getTextureUrl(), isAlex);
|
||||
|
|
|
@ -144,12 +144,10 @@ public class SkinProvider {
|
|||
String newSkinUrl = skinUrl;
|
||||
|
||||
if ("steve".equals(skinUrl) || "alex".equals(skinUrl)) {
|
||||
// TODO: Don't have a for loop for this? Have a proper map?
|
||||
for (GeyserSession session : GeyserConnector.getInstance().getPlayers()) {
|
||||
if (session.getPlayerEntity().getUuid().equals(playerId)) {
|
||||
GeyserSession session = GeyserConnector.getInstance().getPlayerByUuid(playerId);
|
||||
|
||||
if (session != null) {
|
||||
newSkinUrl = session.getClientData().getSkinId();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue