Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,9 @@ public void onPostLogin(PostLoginEvent event) {

event.registerIntent(plugin);

mojangUtils.skinFor(player.getJavaUniqueId())
mojangUtils.skinFor(player.getCorrectUniqueId())
.exceptionally(exception -> {
logger.debug("Unexpected skin fetch error for " + player.getJavaUniqueId(), exception);
logger.debug("Unexpected skin fetch error for " + player.getCorrectUniqueId(), exception);
return SkinDataImpl.DEFAULT_SKIN;
})
.thenAccept(skin -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,15 @@
import org.geysermc.floodgate.api.player.FloodgatePlayer;
import org.geysermc.floodgate.config.FloodgateConfig;
import org.geysermc.floodgate.player.FloodgateHandshakeHandler;
import org.geysermc.floodgate.util.MojangUtils;
import org.geysermc.floodgate.util.SpigotVersionSpecificMethods;

public final class SpigotDataAddon implements InjectorAddon {
@Inject private FloodgateHandshakeHandler handshakeHandler;
@Inject private FloodgateConfig config;
@Inject private SimpleFloodgateApi api;
@Inject private FloodgateLogger logger;
@Inject private MojangUtils mojangUtils;

@Inject
@Named("packetHandler")
Expand All @@ -63,7 +65,7 @@ public void onInject(Channel channel, boolean toServer) {
// we have to add the packet blocker in the data handler, otherwise ProtocolSupport breaks
channel.pipeline().addBefore(
packetHandlerName, "floodgate_data_handler",
new SpigotDataHandler(handshakeHandler, config, kickMessageAttribute, versionSpecificMethods)
new SpigotDataHandler(handshakeHandler, config, kickMessageAttribute, versionSpecificMethods, mojangUtils, logger)
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,15 @@
import io.netty.util.AttributeKey;
import java.lang.reflect.InvocationTargetException;
import java.net.InetSocketAddress;
import org.geysermc.floodgate.api.event.skin.SkinApplyEvent.SkinData;
import org.geysermc.floodgate.api.logger.FloodgateLogger;
import org.geysermc.floodgate.api.player.FloodgatePlayer;
import org.geysermc.floodgate.config.FloodgateConfig;
import org.geysermc.floodgate.player.FloodgateHandshakeHandler;
import org.geysermc.floodgate.player.FloodgateHandshakeHandler.HandshakeResult;
import org.geysermc.floodgate.util.ClassNames;
import org.geysermc.floodgate.util.Constants;
import org.geysermc.floodgate.util.MojangUtils;
import org.geysermc.floodgate.util.ProxyUtils;
import org.geysermc.floodgate.util.SpigotVersionSpecificMethods;

Expand All @@ -51,6 +54,8 @@ public final class SpigotDataHandler extends CommonDataHandler {
);

private final SpigotVersionSpecificMethods versionSpecificMethods;
private final MojangUtils mojangUtils;
private final FloodgateLogger logger;
private Object networkManager;
private FloodgatePlayer player;
private boolean proxyData;
Expand All @@ -59,9 +64,14 @@ public SpigotDataHandler(
FloodgateHandshakeHandler handshakeHandler,
FloodgateConfig config,
AttributeKey<String> kickMessageAttribute,
SpigotVersionSpecificMethods versionSpecificMethods) {
SpigotVersionSpecificMethods versionSpecificMethods,
MojangUtils mojangUtils,
FloodgateLogger logger
) {
super(handshakeHandler, config, kickMessageAttribute, new PacketBlocker());
this.versionSpecificMethods = versionSpecificMethods;
this.mojangUtils = mojangUtils;
this.logger = logger;
}

@Override
Expand Down Expand Up @@ -185,6 +195,19 @@ private boolean checkAndHandleLogin(Object packet) throws Exception {
// No need to worry that this overrides proxy data, because those won't reach this
// method / are already removed (in the case of username validation)
texturesProperty = DEFAULT_TEXTURE_PROPERTY;
} else {
// Floodgate players are seen as offline mode players, meaning we have to look up
// the linked player's textures ourselves
try {
SkinData skinData = mojangUtils.skinFor(player.getCorrectUniqueId()).get();
Comment thread
Tim203 marked this conversation as resolved.
Outdated
texturesProperty = new Property(
"textures",
skinData.value(),
skinData.signature()
);
} catch(Exception exception) {
logger.debug("Unexpected skin fetch error for " + player.getCorrectUniqueId(), exception);
}
}
GameProfile gameProfile = versionSpecificMethods.createGameProfile(
player.getCorrectUniqueId(), player.getCorrectUsername(), texturesProperty);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,9 +175,9 @@ public void onGameProfileRequest(GameProfileRequestEvent event, Continuation con
// Floodgate players are seen as offline mode players, meaning we have to look up
// the linked player's textures ourselves

mojangUtils.skinFor(player.getJavaUniqueId())
mojangUtils.skinFor(player.getCorrectUniqueId())
.exceptionally(exception -> {
logger.debug("Unexpected skin fetch error for " + player.getJavaUniqueId(), exception);
logger.debug("Unexpected skin fetch error for " + player.getCorrectUniqueId(), exception);
return SkinDataImpl.DEFAULT_SKIN;
}).thenAccept(skin -> {
event.setGameProfile(new GameProfile(
Expand Down