PlayerSkinRenderCache.java
net.minecraft.client.renderer.PlayerSkinRenderCache
信息
- 全限定名:net.minecraft.client.renderer.PlayerSkinRenderCache
- 类型:public class
- 包:net.minecraft.client.renderer
- 源码路径:src/main/java/net/minecraft/client/renderer/PlayerSkinRenderCache.java
- 起始行号:L27
- 职责:
TODO
字段/常量
-
DEFAULT_PLAYER_SKIN_RENDER_TYPE- 类型:
RenderType - 修饰符:
public static final - 源码定位:
L28 - 说明:
TODO
- 类型:
-
CACHE_DURATION- 类型:
Duration - 修饰符:
public static final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
renderInfoCache- 类型:
LoadingCache<ResolvableProfile,CompletableFuture<Optional<PlayerSkinRenderCache.RenderInfo>>> - 修饰符:
private final public - 源码定位:
L30 - 说明:
TODO
- 类型:
-
defaultSkinCache- 类型:
LoadingCache<ResolvableProfile,PlayerSkinRenderCache.RenderInfo> - 修饰符:
private final public - 源码定位:
L50 - 说明:
TODO
- 类型:
-
textureManager- 类型:
TextureManager - 修饰符:
private final - 源码定位:
L62 - 说明:
TODO
- 类型:
-
skinManager- 类型:
SkinManager - 修饰符:
private final - 源码定位:
L63 - 说明:
TODO
- 类型:
-
profileResolver- 类型:
ProfileResolver - 修饰符:
private final - 源码定位:
L64 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.client.renderer.PlayerSkinRenderCache.RenderInfo- 类型:
class - 修饰符:
public final - 源码定位:
L98 - 说明:
TODO
- 类型:
构造器
public PlayerSkinRenderCache(TextureManager textureManager, SkinManager skinManager, ProfileResolver profileResolver) @ L66
- 构造器名:PlayerSkinRenderCache
- 源码定位:L66
- 修饰符:public
参数:
- textureManager: TextureManager
- skinManager: SkinManager
- profileResolver: ProfileResolver
说明:
TODO
方法
下面的方法块按源码顺序生成。
public PlayerSkinRenderCache.RenderInfo getOrDefault(ResolvableProfile profile) @ L72
- 方法名:getOrDefault
- 源码定位:L72
- 返回类型:PlayerSkinRenderCache.RenderInfo
- 修饰符:public
参数:
- profile: ResolvableProfile
说明:
TODO
public Supplier<PlayerSkinRenderCache.RenderInfo> createLookup(ResolvableProfile profile) @ L77
- 方法名:createLookup
- 源码定位:L77
- 返回类型:Supplier<PlayerSkinRenderCache.RenderInfo>
- 修饰符:public
参数:
- profile: ResolvableProfile
说明:
TODO
public CompletableFuture<Optional<PlayerSkinRenderCache.RenderInfo>> lookup(ResolvableProfile profile) @ L89
- 方法名:lookup
- 源码定位:L89
- 返回类型:CompletableFuture<Optional<PlayerSkinRenderCache.RenderInfo>>
- 修饰符:public
参数:
- profile: ResolvableProfile
说明:
TODO
private static RenderType playerSkinRenderType(PlayerSkin playerSkin) @ L93
- 方法名:playerSkinRenderType
- 源码定位:L93
- 返回类型:RenderType
- 修饰符:private static
参数:
- playerSkin: PlayerSkin
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class PlayerSkinRenderCache {
public static final RenderType DEFAULT_PLAYER_SKIN_RENDER_TYPE = playerSkinRenderType(DefaultPlayerSkin.getDefaultSkin());
public static final Duration CACHE_DURATION = Duration.ofMinutes(5L);
private final LoadingCache<ResolvableProfile, CompletableFuture<Optional<PlayerSkinRenderCache.RenderInfo>>> renderInfoCache = CacheBuilder.newBuilder()
.expireAfterAccess(CACHE_DURATION)
.build(
new CacheLoader<ResolvableProfile, CompletableFuture<Optional<PlayerSkinRenderCache.RenderInfo>>>() {
{
Objects.requireNonNull(PlayerSkinRenderCache.this);
}
public CompletableFuture<Optional<PlayerSkinRenderCache.RenderInfo>> load(ResolvableProfile profile) {
return profile.resolveProfile(PlayerSkinRenderCache.this.profileResolver)
.thenCompose(
resolvedProfile -> PlayerSkinRenderCache.this.skinManager
.get(resolvedProfile)
.thenApply(
playerSkin -> playerSkin.map(skin -> PlayerSkinRenderCache.this.new RenderInfo(resolvedProfile, skin, profile.skinPatch()))
)
);
}
}
);
private final LoadingCache<ResolvableProfile, PlayerSkinRenderCache.RenderInfo> defaultSkinCache = CacheBuilder.newBuilder()
.expireAfterAccess(CACHE_DURATION)
.build(new CacheLoader<ResolvableProfile, PlayerSkinRenderCache.RenderInfo>() {
{
Objects.requireNonNull(PlayerSkinRenderCache.this);
}
public PlayerSkinRenderCache.RenderInfo load(ResolvableProfile profile) {
GameProfile temporaryProfile = profile.partialProfile();
return PlayerSkinRenderCache.this.new RenderInfo(temporaryProfile, DefaultPlayerSkin.get(temporaryProfile), profile.skinPatch());
}
});
private final TextureManager textureManager;
private final SkinManager skinManager;
private final ProfileResolver profileResolver;
public PlayerSkinRenderCache(TextureManager textureManager, SkinManager skinManager, ProfileResolver profileResolver) {
this.textureManager = textureManager;
this.skinManager = skinManager;
this.profileResolver = profileResolver;
}
public PlayerSkinRenderCache.RenderInfo getOrDefault(ResolvableProfile profile) {
PlayerSkinRenderCache.RenderInfo result = this.lookup(profile).getNow(Optional.empty()).orElse(null);
return result != null ? result : this.defaultSkinCache.getUnchecked(profile);
}
public Supplier<PlayerSkinRenderCache.RenderInfo> createLookup(ResolvableProfile profile) {
PlayerSkinRenderCache.RenderInfo defaultForProfile = this.defaultSkinCache.getUnchecked(profile);
CompletableFuture<Optional<PlayerSkinRenderCache.RenderInfo>> future = this.renderInfoCache.getUnchecked(profile);
Optional<PlayerSkinRenderCache.RenderInfo> currentValue = future.getNow(null);
if (currentValue != null) {
PlayerSkinRenderCache.RenderInfo finalValue = currentValue.orElse(defaultForProfile);
return () -> finalValue;
} else {
return () -> future.getNow(Optional.empty()).orElse(defaultForProfile);
}
}
public CompletableFuture<Optional<PlayerSkinRenderCache.RenderInfo>> lookup(ResolvableProfile profile) {
return this.renderInfoCache.getUnchecked(profile);
}
private static RenderType playerSkinRenderType(PlayerSkin playerSkin) {
return SkullBlockRenderer.getPlayerSkinRenderType(playerSkin.body().texturePath());
}
@OnlyIn(Dist.CLIENT)
public final class RenderInfo {
private final GameProfile gameProfile;
private final PlayerSkin playerSkin;
private @Nullable RenderType itemRenderType;
private @Nullable GpuTextureView textureView;
private @Nullable GlyphRenderTypes glyphRenderTypes;
public RenderInfo(GameProfile gameProfile, PlayerSkin playerSkin, PlayerSkin.Patch patch) {
Objects.requireNonNull(PlayerSkinRenderCache.this);
super();
this.gameProfile = gameProfile;
this.playerSkin = playerSkin.with(patch);
}
public GameProfile gameProfile() {
return this.gameProfile;
}
public PlayerSkin playerSkin() {
return this.playerSkin;
}
public RenderType renderType() {
if (this.itemRenderType == null) {
this.itemRenderType = PlayerSkinRenderCache.playerSkinRenderType(this.playerSkin);
}
return this.itemRenderType;
}
public GpuTextureView textureView() {
if (this.textureView == null) {
this.textureView = PlayerSkinRenderCache.this.textureManager.getTexture(this.playerSkin.body().texturePath()).getTextureView();
}
return this.textureView;
}
public GlyphRenderTypes glyphRenderTypes() {
if (this.glyphRenderTypes == null) {
this.glyphRenderTypes = GlyphRenderTypes.createForColorTexture(this.playerSkin.body().texturePath());
}
return this.glyphRenderTypes;
}
@Override
public boolean equals(Object o) {
return this == o
|| o instanceof PlayerSkinRenderCache.RenderInfo that && this.gameProfile.equals(that.gameProfile) && this.playerSkin.equals(that.playerSkin);
}
@Override
public int hashCode() {
int result = 1;
result = 31 * result + this.gameProfile.hashCode();
return 31 * result + this.playerSkin.hashCode();
}
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
GlyphRenderTypes.createForColorTexture()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SkullBlockRenderer.getPlayerSkinRenderType()
- 引用位置:
-
- 引用位置:
字段/返回值
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DefaultPlayerSkin.get(), DefaultPlayerSkin.getDefaultSkin()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置: