ClientMannequin.java

net.minecraft.client.entity.ClientMannequin

信息

  • 全限定名:net.minecraft.client.entity.ClientMannequin
  • 类型:public class
  • 包:net.minecraft.client.entity
  • 源码路径:src/main/java/net/minecraft/client/entity/ClientMannequin.java
  • 起始行号:L21
  • 继承:Mannequin
  • 实现:ClientAvatarEntity
  • 职责:

    TODO

字段/常量

  • LOGGER

    • 类型: Logger
    • 修饰符: private static final
    • 源码定位: L22
    • 说明:

      TODO

  • DEFAULT_SKIN

    • 类型: PlayerSkin
    • 修饰符: public static final
    • 源码定位: L23
    • 说明:

      TODO

  • avatarState

    • 类型: ClientAvatarState
    • 修饰符: private final
    • 源码定位: L24
    • 说明:

      TODO

  • skinLookup

    • 类型: CompletableFuture<Optional<PlayerSkin>>
    • 修饰符: private
    • 源码定位: L25
    • 说明:

      TODO

  • skin

    • 类型: PlayerSkin
    • 修饰符: private
    • 源码定位: L26
    • 说明:

      TODO

  • skinRenderCache

    • 类型: PlayerSkinRenderCache
    • 修饰符: private final
    • 源码定位: L27
    • 说明:

      TODO

内部类/嵌套类型

构造器

public ClientMannequin(Level level, PlayerSkinRenderCache skinRenderCache) @ L33

  • 构造器名:ClientMannequin
  • 源码定位:L33
  • 修饰符:public

参数:

  • level: Level
  • skinRenderCache: PlayerSkinRenderCache

说明:

TODO

方法

下面的方法块按源码顺序生成。

public static void registerOverrides(PlayerSkinRenderCache cache) @ L29

  • 方法名:registerOverrides
  • 源码定位:L29
  • 返回类型:void
  • 修饰符:public static

参数:

  • cache: PlayerSkinRenderCache

说明:

TODO

public void tick() @ L38

  • 方法名:tick
  • 源码定位:L38
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public void onSyncedDataUpdated(EntityDataAccessor<?> accessor) @ L52

  • 方法名:onSyncedDataUpdated
  • 源码定位:L52
  • 返回类型:void
  • 修饰符:public

参数:

  • accessor: EntityDataAccessor<?>

说明:

TODO

private void updateSkin() @ L60

  • 方法名:updateSkin
  • 源码定位:L60
  • 返回类型:void
  • 修饰符:private

参数:

说明:

TODO

public ClientAvatarState avatarState() @ L70

  • 方法名:avatarState
  • 源码定位:L70
  • 返回类型:ClientAvatarState
  • 修饰符:public

参数:

说明:

TODO

public PlayerSkin getSkin() @ L75

  • 方法名:getSkin
  • 源码定位:L75
  • 返回类型:PlayerSkin
  • 修饰符:public

参数:

说明:

TODO

private void setSkin(PlayerSkin skin) @ L80

  • 方法名:setSkin
  • 源码定位:L80
  • 返回类型:void
  • 修饰符:private

参数:

  • skin: PlayerSkin

说明:

TODO

public Component belowNameDisplay() @ L84

  • 方法名:belowNameDisplay
  • 源码定位:L84
  • 返回类型:Component
  • 修饰符:public

参数:

说明:

TODO

public Parrot.Variant getParrotVariantOnShoulder(boolean left) @ L89

  • 方法名:getParrotVariantOnShoulder
  • 源码定位:L89
  • 返回类型:Parrot.Variant
  • 修饰符:public

参数:

  • left: boolean

说明:

TODO

public boolean showExtraEars() @ L94

  • 方法名:showExtraEars
  • 源码定位:L94
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class ClientMannequin extends Mannequin implements ClientAvatarEntity {
    private static final Logger LOGGER = LogUtils.getLogger();
    public static final PlayerSkin DEFAULT_SKIN = DefaultPlayerSkin.get(Mannequin.DEFAULT_PROFILE.partialProfile());
    private final ClientAvatarState avatarState = new ClientAvatarState();
    private @Nullable CompletableFuture<Optional<PlayerSkin>> skinLookup;
    private PlayerSkin skin = DEFAULT_SKIN;
    private final PlayerSkinRenderCache skinRenderCache;
 
    public static void registerOverrides(PlayerSkinRenderCache cache) {
        Mannequin.constructor = (type, level) -> (Mannequin)(level instanceof ClientLevel ? new ClientMannequin(level, cache) : new Mannequin(type, level));
    }
 
    public ClientMannequin(Level level, PlayerSkinRenderCache skinRenderCache) {
        super(level);
        this.skinRenderCache = skinRenderCache;
    }
 
    @Override
    public void tick() {
        super.tick();
        this.avatarState.tick(this.position(), this.getDeltaMovement());
        if (this.skinLookup != null && this.skinLookup.isDone()) {
            try {
                this.skinLookup.get().ifPresent(this::setSkin);
                this.skinLookup = null;
            } catch (Exception var2) {
                LOGGER.error("Error when trying to look up skin", (Throwable)var2);
            }
        }
    }
 
    @Override
    public void onSyncedDataUpdated(EntityDataAccessor<?> accessor) {
        super.onSyncedDataUpdated(accessor);
        if (accessor.equals(DATA_PROFILE)) {
            this.updateSkin();
        }
    }
 
    private void updateSkin() {
        if (this.skinLookup != null) {
            CompletableFuture<Optional<PlayerSkin>> future = this.skinLookup;
            this.skinLookup = null;
            future.cancel(false);
        }
 
        this.skinLookup = this.skinRenderCache.lookup(this.getProfile()).thenApply(info -> info.map(PlayerSkinRenderCache.RenderInfo::playerSkin));
    }
 
    @Override
    public ClientAvatarState avatarState() {
        return this.avatarState;
    }
 
    @Override
    public PlayerSkin getSkin() {
        return this.skin;
    }
 
    private void setSkin(PlayerSkin skin) {
        this.skin = skin;
    }
 
    @Override
    public @Nullable Component belowNameDisplay() {
        return this.getDescription();
    }
 
    @Override
    public Parrot.@Nullable Variant getParrotVariantOnShoulder(boolean left) {
        return null;
    }
 
    @Override
    public boolean showExtraEars() {
        return false;
    }
}

引用的其他类