144 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.client.multiplayer;
 | |
| 
 | |
| import com.google.common.base.Suppliers;
 | |
| import com.mojang.authlib.GameProfile;
 | |
| import java.util.Optional;
 | |
| import java.util.concurrent.CompletableFuture;
 | |
| import java.util.function.Supplier;
 | |
| import net.fabricmc.api.EnvType;
 | |
| import net.fabricmc.api.Environment;
 | |
| import net.minecraft.client.Minecraft;
 | |
| import net.minecraft.client.resources.DefaultPlayerSkin;
 | |
| import net.minecraft.client.resources.PlayerSkin;
 | |
| import net.minecraft.client.resources.SkinManager;
 | |
| import net.minecraft.network.chat.Component;
 | |
| import net.minecraft.network.chat.RemoteChatSession;
 | |
| import net.minecraft.network.chat.SignedMessageValidator;
 | |
| import net.minecraft.world.entity.player.ProfilePublicKey;
 | |
| import net.minecraft.world.level.GameType;
 | |
| import net.minecraft.world.scores.PlayerTeam;
 | |
| import org.jetbrains.annotations.Nullable;
 | |
| 
 | |
| @Environment(EnvType.CLIENT)
 | |
| public class PlayerInfo {
 | |
| 	/**
 | |
| 	 * The GameProfile for the player represented by this NetworkPlayerInfo instance
 | |
| 	 */
 | |
| 	private final GameProfile profile;
 | |
| 	private final Supplier<PlayerSkin> skinLookup;
 | |
| 	private GameType gameMode = GameType.DEFAULT_MODE;
 | |
| 	private int latency;
 | |
| 	/**
 | |
| 	 * When this is non-null, it is displayed instead of the player's real name
 | |
| 	 */
 | |
| 	@Nullable
 | |
| 	private Component tabListDisplayName;
 | |
| 	private boolean showHat = true;
 | |
| 	@Nullable
 | |
| 	private RemoteChatSession chatSession;
 | |
| 	private SignedMessageValidator messageValidator;
 | |
| 	private int tabListOrder;
 | |
| 
 | |
| 	public PlayerInfo(GameProfile profile, boolean enforceSecureChat) {
 | |
| 		this.profile = profile;
 | |
| 		this.messageValidator = fallbackMessageValidator(enforceSecureChat);
 | |
| 		Supplier<Supplier<PlayerSkin>> supplier = Suppliers.memoize(() -> createSkinLookup(profile));
 | |
| 		this.skinLookup = () -> (PlayerSkin)((Supplier)supplier.get()).get();
 | |
| 	}
 | |
| 
 | |
| 	private static Supplier<PlayerSkin> createSkinLookup(GameProfile profile) {
 | |
| 		Minecraft minecraft = Minecraft.getInstance();
 | |
| 		SkinManager skinManager = minecraft.getSkinManager();
 | |
| 		CompletableFuture<Optional<PlayerSkin>> completableFuture = skinManager.getOrLoad(profile);
 | |
| 		boolean bl = !minecraft.isLocalPlayer(profile.getId());
 | |
| 		PlayerSkin playerSkin = DefaultPlayerSkin.get(profile);
 | |
| 		return () -> {
 | |
| 			PlayerSkin playerSkin2 = (PlayerSkin)((Optional)completableFuture.getNow(Optional.empty())).orElse(playerSkin);
 | |
| 			return bl && !playerSkin2.secure() ? playerSkin : playerSkin2;
 | |
| 		};
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Returns the GameProfile for the player represented by this NetworkPlayerInfo instance
 | |
| 	 */
 | |
| 	public GameProfile getProfile() {
 | |
| 		return this.profile;
 | |
| 	}
 | |
| 
 | |
| 	@Nullable
 | |
| 	public RemoteChatSession getChatSession() {
 | |
| 		return this.chatSession;
 | |
| 	}
 | |
| 
 | |
| 	public SignedMessageValidator getMessageValidator() {
 | |
| 		return this.messageValidator;
 | |
| 	}
 | |
| 
 | |
| 	public boolean hasVerifiableChat() {
 | |
| 		return this.chatSession != null;
 | |
| 	}
 | |
| 
 | |
| 	protected void setChatSession(RemoteChatSession chatSession) {
 | |
| 		this.chatSession = chatSession;
 | |
| 		this.messageValidator = chatSession.createMessageValidator(ProfilePublicKey.EXPIRY_GRACE_PERIOD);
 | |
| 	}
 | |
| 
 | |
| 	protected void clearChatSession(boolean enforcesSecureChat) {
 | |
| 		this.chatSession = null;
 | |
| 		this.messageValidator = fallbackMessageValidator(enforcesSecureChat);
 | |
| 	}
 | |
| 
 | |
| 	private static SignedMessageValidator fallbackMessageValidator(boolean enforeSecureChat) {
 | |
| 		return enforeSecureChat ? SignedMessageValidator.REJECT_ALL : SignedMessageValidator.ACCEPT_UNSIGNED;
 | |
| 	}
 | |
| 
 | |
| 	public GameType getGameMode() {
 | |
| 		return this.gameMode;
 | |
| 	}
 | |
| 
 | |
| 	protected void setGameMode(GameType gameMode) {
 | |
| 		this.gameMode = gameMode;
 | |
| 	}
 | |
| 
 | |
| 	public int getLatency() {
 | |
| 		return this.latency;
 | |
| 	}
 | |
| 
 | |
| 	protected void setLatency(int latency) {
 | |
| 		this.latency = latency;
 | |
| 	}
 | |
| 
 | |
| 	public PlayerSkin getSkin() {
 | |
| 		return (PlayerSkin)this.skinLookup.get();
 | |
| 	}
 | |
| 
 | |
| 	@Nullable
 | |
| 	public PlayerTeam getTeam() {
 | |
| 		return Minecraft.getInstance().level.getScoreboard().getPlayersTeam(this.getProfile().getName());
 | |
| 	}
 | |
| 
 | |
| 	public void setTabListDisplayName(@Nullable Component displayName) {
 | |
| 		this.tabListDisplayName = displayName;
 | |
| 	}
 | |
| 
 | |
| 	@Nullable
 | |
| 	public Component getTabListDisplayName() {
 | |
| 		return this.tabListDisplayName;
 | |
| 	}
 | |
| 
 | |
| 	public void setShowHat(boolean showHat) {
 | |
| 		this.showHat = showHat;
 | |
| 	}
 | |
| 
 | |
| 	public boolean showHat() {
 | |
| 		return this.showHat;
 | |
| 	}
 | |
| 
 | |
| 	public void setTabListOrder(int tabListOrder) {
 | |
| 		this.tabListOrder = tabListOrder;
 | |
| 	}
 | |
| 
 | |
| 	public int getTabListOrder() {
 | |
| 		return this.tabListOrder;
 | |
| 	}
 | |
| }
 |