EntityRenderDispatcher.java
net.minecraft.client.renderer.entity.EntityRenderDispatcher
信息
- 全限定名:net.minecraft.client.renderer.entity.EntityRenderDispatcher
- 类型:public class
- 包:net.minecraft.client.renderer.entity
- 源码路径:src/main/java/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java
- 起始行号:L46
- 实现:ResourceManagerReloadListener
- 职责:
TODO
字段/常量
-
renderers- 类型:
Map<EntityType<?>,EntityRenderer<?,?>> - 修饰符:
private - 源码定位:
L47 - 说明:
TODO
- 类型:
-
playerRenderers- 类型:
Map<PlayerModelType,AvatarRenderer<AbstractClientPlayer>> - 修饰符:
private - 源码定位:
L48 - 说明:
TODO
- 类型:
-
mannequinRenderers- 类型:
Map<PlayerModelType,AvatarRenderer<ClientMannequin>> - 修饰符:
private - 源码定位:
L49 - 说明:
TODO
- 类型:
-
textureManager- 类型:
TextureManager - 修饰符:
public final - 源码定位:
L50 - 说明:
TODO
- 类型:
-
camera- 类型:
Camera - 修饰符:
public - 源码定位:
L51 - 说明:
TODO
- 类型:
-
crosshairPickEntity- 类型:
Entity - 修饰符:
public - 源码定位:
L52 - 说明:
TODO
- 类型:
-
blockModelResolver- 类型:
BlockModelResolver - 修饰符:
private final - 源码定位:
L53 - 说明:
TODO
- 类型:
-
itemModelResolver- 类型:
ItemModelResolver - 修饰符:
private final - 源码定位:
L54 - 说明:
TODO
- 类型:
-
mapRenderer- 类型:
MapRenderer - 修饰符:
private final - 源码定位:
L55 - 说明:
TODO
- 类型:
-
itemInHandRenderer- 类型:
ItemInHandRenderer - 修饰符:
private final - 源码定位:
L56 - 说明:
TODO
- 类型:
-
atlasManager- 类型:
AtlasManager - 修饰符:
private final - 源码定位:
L57 - 说明:
TODO
- 类型:
-
font- 类型:
Font - 修饰符:
private final - 源码定位:
L58 - 说明:
TODO
- 类型:
-
options- 类型:
Options - 修饰符:
public final - 源码定位:
L59 - 说明:
TODO
- 类型:
-
entityModels- 类型:
Supplier<EntityModelSet> - 修饰符:
private final - 源码定位:
L60 - 说明:
TODO
- 类型:
-
equipmentAssets- 类型:
EquipmentAssetManager - 修饰符:
private final - 源码定位:
L61 - 说明:
TODO
- 类型:
-
playerSkinRenderCache- 类型:
PlayerSkinRenderCache - 修饰符:
private final - 源码定位:
L62 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public EntityRenderDispatcher(Minecraft minecraft, TextureManager textureManager, BlockModelResolver blockModelResolver, ItemModelResolver itemModelResolver, MapRenderer mapRenderer, AtlasManager atlasManager, Font font, Options options, Supplier<EntityModelSet> entityModels, EquipmentAssetManager equipmentAssets, PlayerSkinRenderCache playerSkinRenderCache) @ L68
- 构造器名:EntityRenderDispatcher
- 源码定位:L68
- 修饰符:public
参数:
- minecraft: Minecraft
- textureManager: TextureManager
- blockModelResolver: BlockModelResolver
- itemModelResolver: ItemModelResolver
- mapRenderer: MapRenderer
- atlasManager: AtlasManager
- font: Font
- options: Options
- entityModels: Supplier
- equipmentAssets: EquipmentAssetManager
- playerSkinRenderCache: PlayerSkinRenderCache
说明:
TODO
方法
下面的方法块按源码顺序生成。
public <E extends Entity> int getPackedLightCoords(E entity, float partialTickTime) @ L64
- 方法名:getPackedLightCoords
- 源码定位:L64
- 返回类型:
int - 修饰符:public
参数:
- entity: E
- partialTickTime: float
说明:
TODO
public <T extends Entity> EntityRenderer<?super T,?> getRenderer(T entity) @ L94
- 方法名:getRenderer
- 源码定位:L94
- 返回类型:
EntityRenderer - 修饰符:public
参数:
- entity: T
说明:
TODO
public AvatarRenderer<AbstractClientPlayer> getPlayerRenderer(AbstractClientPlayer player) @ L102
- 方法名:getPlayerRenderer
- 源码定位:L102
- 返回类型:AvatarRenderer
- 修饰符:public
参数:
- player: AbstractClientPlayer
说明:
TODO
private <T extends Avatar &ClientAvatarEntity> AvatarRenderer<T> getAvatarRenderer(Map<PlayerModelType,AvatarRenderer<T>> renderers, T entity) @ L106
- 方法名:getAvatarRenderer
- 源码定位:L106
- 返回类型:<T extends Avatar &ClientAvatarEntity> AvatarRenderer
- 修饰符:private
参数:
- renderers: Map<PlayerModelType,AvatarRenderer
> - entity: T
说明:
TODO
public <S extends EntityRenderState> EntityRenderer<?,?super S> getRenderer(S entityRenderState) @ L112
- 方法名:getRenderer
- 源码定位:L112
- 返回类型:
EntityRenderer<?,?super S> - 修饰符:public
参数:
- entityRenderState: S
说明:
TODO
public void prepare(Camera camera, Entity crosshairPickEntity) @ L122
- 方法名:prepare
- 源码定位:L122
- 返回类型:void
- 修饰符:public
参数:
- camera: Camera
- crosshairPickEntity: Entity
说明:
TODO
public <E extends Entity> boolean shouldRender(E entity, Frustum culler, double camX, double camY, double camZ) @ L127
- 方法名:shouldRender
- 源码定位:L127
- 返回类型:
boolean - 修饰符:public
参数:
- entity: E
- culler: Frustum
- camX: double
- camY: double
- camZ: double
说明:
TODO
public <E extends Entity> EntityRenderState extractEntity(E entity, float partialTicks) @ L132
- 方法名:extractEntity
- 源码定位:L132
- 返回类型:
EntityRenderState - 修饰符:public
参数:
- entity: E
- partialTicks: float
说明:
TODO
public <S extends EntityRenderState> void submit(S renderState, CameraRenderState camera, double x, double y, double z, PoseStack poseStack, SubmitNodeCollector submitNodeCollector) @ L147
- 方法名:submit
- 源码定位:L147
- 返回类型:
void - 修饰符:public
参数:
- renderState: S
- camera: CameraRenderState
- x: double
- y: double
- z: double
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
说明:
TODO
private <S extends EntityRenderState> CrashReportCategory fillRendererDetails(EntityRenderer<?,S> renderer, CrashReport report) @ L186
- 方法名:fillRendererDetails
- 源码定位:L186
- 返回类型:
CrashReportCategory - 修饰符:private
参数:
- renderer: EntityRenderer<?,S>
- report: CrashReport
说明:
TODO
public void resetCamera() @ L192
- 方法名:resetCamera
- 源码定位:L192
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public double distanceToSqr(Entity entity) @ L196
- 方法名:distanceToSqr
- 源码定位:L196
- 返回类型:double
- 修饰符:public
参数:
- entity: Entity
说明:
TODO
public ItemInHandRenderer getItemInHandRenderer() @ L200
- 方法名:getItemInHandRenderer
- 源码定位:L200
- 返回类型:ItemInHandRenderer
- 修饰符:public
参数:
- 无
说明:
TODO
public void onResourceManagerReload(ResourceManager resourceManager) @ L204
- 方法名:onResourceManagerReload
- 源码定位:L204
- 返回类型:void
- 修饰符:public
参数:
- resourceManager: ResourceManager
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class EntityRenderDispatcher implements ResourceManagerReloadListener {
private Map<EntityType<?>, EntityRenderer<?, ?>> renderers = ImmutableMap.of();
private Map<PlayerModelType, AvatarRenderer<AbstractClientPlayer>> playerRenderers = Map.of();
private Map<PlayerModelType, AvatarRenderer<ClientMannequin>> mannequinRenderers = Map.of();
public final TextureManager textureManager;
public @Nullable Camera camera;
public Entity crosshairPickEntity;
private final BlockModelResolver blockModelResolver;
private final ItemModelResolver itemModelResolver;
private final MapRenderer mapRenderer;
private final ItemInHandRenderer itemInHandRenderer;
private final AtlasManager atlasManager;
private final Font font;
public final Options options;
private final Supplier<EntityModelSet> entityModels;
private final EquipmentAssetManager equipmentAssets;
private final PlayerSkinRenderCache playerSkinRenderCache;
public <E extends Entity> int getPackedLightCoords(E entity, float partialTickTime) {
return this.getRenderer(entity).getPackedLightCoords(entity, partialTickTime);
}
public EntityRenderDispatcher(
Minecraft minecraft,
TextureManager textureManager,
BlockModelResolver blockModelResolver,
ItemModelResolver itemModelResolver,
MapRenderer mapRenderer,
AtlasManager atlasManager,
Font font,
Options options,
Supplier<EntityModelSet> entityModels,
EquipmentAssetManager equipmentAssets,
PlayerSkinRenderCache playerSkinRenderCache
) {
this.textureManager = textureManager;
this.blockModelResolver = blockModelResolver;
this.itemModelResolver = itemModelResolver;
this.mapRenderer = mapRenderer;
this.atlasManager = atlasManager;
this.playerSkinRenderCache = playerSkinRenderCache;
this.itemInHandRenderer = new ItemInHandRenderer(minecraft, this, itemModelResolver);
this.font = font;
this.options = options;
this.entityModels = entityModels;
this.equipmentAssets = equipmentAssets;
}
public <T extends Entity> EntityRenderer<? super T, ?> getRenderer(T entity) {
return (EntityRenderer<? super T, ?>)(switch (entity) {
case AbstractClientPlayer player -> this.getAvatarRenderer(this.playerRenderers, player);
case ClientMannequin mannequin -> this.getAvatarRenderer(this.mannequinRenderers, mannequin);
default -> (EntityRenderer)this.renderers.get(entity.getType());
});
}
public AvatarRenderer<AbstractClientPlayer> getPlayerRenderer(AbstractClientPlayer player) {
return this.getAvatarRenderer(this.playerRenderers, player);
}
private <T extends Avatar & ClientAvatarEntity> AvatarRenderer<T> getAvatarRenderer(Map<PlayerModelType, AvatarRenderer<T>> renderers, T entity) {
PlayerModelType model = entity.getSkin().model();
AvatarRenderer<T> playerRenderer = renderers.get(model);
return playerRenderer != null ? playerRenderer : renderers.get(PlayerModelType.WIDE);
}
public <S extends EntityRenderState> EntityRenderer<?, ? super S> getRenderer(S entityRenderState) {
if (entityRenderState instanceof AvatarRenderState player) {
PlayerModelType model = player.skin.model();
EntityRenderer<? extends Avatar, ?> playerRenderer = (EntityRenderer<? extends Avatar, ?>)this.playerRenderers.get(model);
return (EntityRenderer<?, ? super S>)(playerRenderer != null ? playerRenderer : (EntityRenderer)this.playerRenderers.get(PlayerModelType.WIDE));
} else {
return (EntityRenderer<?, ? super S>)this.renderers.get(entityRenderState.entityType);
}
}
public void prepare(Camera camera, Entity crosshairPickEntity) {
this.camera = camera;
this.crosshairPickEntity = crosshairPickEntity;
}
public <E extends Entity> boolean shouldRender(E entity, Frustum culler, double camX, double camY, double camZ) {
EntityRenderer<? super E, ?> renderer = this.getRenderer(entity);
return renderer.shouldRender(entity, culler, camX, camY, camZ);
}
public <E extends Entity> EntityRenderState extractEntity(E entity, float partialTicks) {
EntityRenderer<? super E, ?> renderer = this.getRenderer(entity);
try {
return renderer.createRenderState(entity, partialTicks);
} catch (Throwable var8) {
CrashReport report = CrashReport.forThrowable(var8, "Extracting render state for an entity in world");
CrashReportCategory entityCat = report.addCategory("Entity being extracted");
entity.fillCrashReportCategory(entityCat);
CrashReportCategory rendererCategory = this.fillRendererDetails(renderer, report);
rendererCategory.setDetail("Delta", partialTicks);
throw new ReportedException(report);
}
}
public <S extends EntityRenderState> void submit(
S renderState, CameraRenderState camera, double x, double y, double z, PoseStack poseStack, SubmitNodeCollector submitNodeCollector
) {
EntityRenderer<?, ? super S> renderer = this.getRenderer(renderState);
try {
Vec3 pos = renderer.getRenderOffset(renderState);
double relativeX = x + pos.x();
double relativeY = y + pos.y();
double relativeZ = z + pos.z();
poseStack.pushPose();
poseStack.translate(relativeX, relativeY, relativeZ);
renderer.submit(renderState, poseStack, submitNodeCollector, camera);
if (renderState.displayFireAnimation) {
submitNodeCollector.submitFlame(poseStack, renderState, Mth.rotationAroundAxis(Mth.Y_AXIS, camera.orientation, new Quaternionf()));
}
if (renderState instanceof AvatarRenderState) {
poseStack.translate(-pos.x(), -pos.y(), -pos.z());
}
if (!renderState.shadowPieces.isEmpty()) {
submitNodeCollector.submitShadow(poseStack, renderState.shadowRadius, renderState.shadowPieces);
}
if (!(renderState instanceof AvatarRenderState)) {
poseStack.translate(-pos.x(), -pos.y(), -pos.z());
}
poseStack.popPose();
} catch (Throwable var19) {
CrashReport report = CrashReport.forThrowable(var19, "Rendering entity in world");
CrashReportCategory entityCat = report.addCategory("EntityRenderState being rendered");
renderState.fillCrashReportCategory(entityCat);
this.fillRendererDetails(renderer, report);
throw new ReportedException(report);
}
}
private <S extends EntityRenderState> CrashReportCategory fillRendererDetails(EntityRenderer<?, S> renderer, CrashReport report) {
CrashReportCategory category = report.addCategory("Renderer details");
category.setDetail("Assigned renderer", renderer);
return category;
}
public void resetCamera() {
this.camera = null;
}
public double distanceToSqr(Entity entity) {
return this.camera.position().distanceToSqr(entity.position());
}
public ItemInHandRenderer getItemInHandRenderer() {
return this.itemInHandRenderer;
}
@Override
public void onResourceManagerReload(ResourceManager resourceManager) {
EntityRendererProvider.Context context = new EntityRendererProvider.Context(
this,
this.blockModelResolver,
this.itemModelResolver,
this.mapRenderer,
resourceManager,
this.entityModels.get(),
this.equipmentAssets,
this.atlasManager,
this.font,
this.playerSkinRenderCache
);
this.renderers = EntityRenderers.createEntityRenderers(context);
this.playerRenderers = EntityRenderers.createAvatarRenderers(context);
this.mannequinRenderers = EntityRenderers.createAvatarRenderers(context);
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
CrashReport.forThrowable()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
ReportedException()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段/返回值
- 引用位置:
-
- 引用位置:
字段/构造调用/返回值 - 关联成员:
ItemInHandRenderer()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段/返回值
- 引用位置:
-
- 引用位置:
方法调用/构造调用 - 关联成员:
Context(), EntityRendererProvider.Context()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
EntityRenderers.createAvatarRenderers(), EntityRenderers.createEntityRenderers()
- 引用位置:
-
- 引用位置:
参数/字段/返回值
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.rotationAroundAxis()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数/字段/返回值
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置: