mirror of
https://github.com/GeyserMC/Floodgate.git
synced 2025-12-19 14:59:20 +00:00
Reduce session server lookups (#509)
* fix: add default skin to gameprofiles * fix: add signatures by default to prevent issues * cleanup * no longer apply empty textures * revert formatting change * fix(spigot): linked player textures * fix(velocity): linked player textures * fix(bungeecord): apply linked textures * Made the MojangUtils class instance based, removed some unneeded code * Don't block Velocity event threads, made the Bungee variant work * Add some comments --------- Co-authored-by: bridge <haha@haha.com> Co-authored-by: Tim203 <mctim203@gmail.com>
This commit is contained in:
@@ -29,6 +29,7 @@ import static org.geysermc.floodgate.util.ReflectionUtils.getCastedValue;
|
||||
import static org.geysermc.floodgate.util.ReflectionUtils.setValue;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.properties.Property;
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.util.AttributeKey;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
@@ -38,9 +39,16 @@ 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.ProxyUtils;
|
||||
|
||||
public final class SpigotDataHandler extends CommonDataHandler {
|
||||
private static final Property DEFAULT_TEXTURE_PROPERTY = new Property(
|
||||
"textures",
|
||||
Constants.DEFAULT_MINECRAFT_JAVA_SKIN_TEXTURE,
|
||||
Constants.DEFAULT_MINECRAFT_JAVA_SKIN_SIGNATURE
|
||||
);
|
||||
|
||||
private Object networkManager;
|
||||
private FloodgatePlayer player;
|
||||
private boolean proxyData;
|
||||
@@ -171,6 +179,13 @@ public final class SpigotDataHandler extends CommonDataHandler {
|
||||
player.getCorrectUniqueId(), player.getCorrectUsername()
|
||||
);
|
||||
|
||||
if (!player.isLinked()) {
|
||||
// Otherwise game server will try to fetch the skin from Mojang.
|
||||
// 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)
|
||||
gameProfile.getProperties().put("textures", DEFAULT_TEXTURE_PROPERTY);
|
||||
}
|
||||
|
||||
// we have to fake the offline player (login) cycle
|
||||
|
||||
if (ClassNames.IS_PRE_1_20_2) {
|
||||
|
||||
@@ -26,20 +26,24 @@
|
||||
package org.geysermc.floodgate.listener;
|
||||
|
||||
import com.destroystokyo.paper.event.profile.PreFillProfileEvent;
|
||||
import com.destroystokyo.paper.profile.PlayerProfile;
|
||||
import com.destroystokyo.paper.profile.ProfileProperty;
|
||||
import com.google.inject.Inject;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.geysermc.floodgate.api.SimpleFloodgateApi;
|
||||
import org.geysermc.floodgate.api.player.FloodgatePlayer;
|
||||
import org.geysermc.floodgate.util.Constants;
|
||||
|
||||
public final class PaperProfileListener implements Listener {
|
||||
private static final ProfileProperty DEFAULT_TEXTURE_PROPERTY = new ProfileProperty(
|
||||
"textures",
|
||||
Constants.DEFAULT_MINECRAFT_JAVA_SKIN_TEXTURE,
|
||||
Constants.DEFAULT_MINECRAFT_JAVA_SKIN_SIGNATURE
|
||||
);
|
||||
|
||||
@Inject private SimpleFloodgateApi api;
|
||||
|
||||
@EventHandler
|
||||
@@ -62,26 +66,8 @@ public final class PaperProfileListener implements Listener {
|
||||
}
|
||||
|
||||
Set<ProfileProperty> properties = new HashSet<>(event.getPlayerProfile().getProperties());
|
||||
properties.add(new ProfileProperty("textures", "", ""));
|
||||
properties.add(DEFAULT_TEXTURE_PROPERTY);
|
||||
|
||||
event.setProperties(properties);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
Player bukkitPlayer = event.getPlayer();
|
||||
FloodgatePlayer player = api.getPlayer(bukkitPlayer.getUniqueId());
|
||||
if (player == null || player.isLinked()) {
|
||||
return;
|
||||
}
|
||||
|
||||
PlayerProfile profile = bukkitPlayer.getPlayerProfile();
|
||||
if (profile.getProperties().stream().noneMatch(
|
||||
prop -> "textures".equals(prop.getName()) && prop.getValue().isEmpty()
|
||||
&& prop.getSignature() != null && prop.getSignature().isEmpty())) {
|
||||
return;
|
||||
}
|
||||
|
||||
profile.removeProperty("textures");
|
||||
bukkitPlayer.setPlayerProfile(profile);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user