BlockEntityRenderDispatcher.java
net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher
信息
- 全限定名:net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher
- 类型:public class
- 包:net.minecraft.client.renderer.blockentity
- 源码路径:src/main/java/net/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher.java
- 起始行号:L31
- 实现:ResourceManagerReloadListener
- 职责:
TODO
字段/常量
-
renderers- 类型:
Map<BlockEntityType<?>,BlockEntityRenderer<?,?>> - 修饰符:
private - 源码定位:
L32 - 说明:
TODO
- 类型:
-
font- 类型:
Font - 修饰符:
private final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
entityModelSet- 类型:
Supplier<EntityModelSet> - 修饰符:
private final - 源码定位:
L34 - 说明:
TODO
- 类型:
-
cameraPos- 类型:
Vec3 - 修饰符:
private - 源码定位:
L35 - 说明:
TODO
- 类型:
-
blockModelResolver- 类型:
BlockModelResolver - 修饰符:
private final - 源码定位:
L36 - 说明:
TODO
- 类型:
-
itemModelResolver- 类型:
ItemModelResolver - 修饰符:
private final - 源码定位:
L37 - 说明:
TODO
- 类型:
-
entityRenderer- 类型:
EntityRenderDispatcher - 修饰符:
private final - 源码定位:
L38 - 说明:
TODO
- 类型:
-
sprites- 类型:
SpriteGetter - 修饰符:
private final - 源码定位:
L39 - 说明:
TODO
- 类型:
-
playerSkinRenderCache- 类型:
PlayerSkinRenderCache - 修饰符:
private final - 源码定位:
L40 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public BlockEntityRenderDispatcher(Font font, Supplier<EntityModelSet> entityModelSet, BlockModelResolver blockModelResolver, ItemModelResolver itemModelResolver, EntityRenderDispatcher entityRenderer, SpriteGetter sprites, PlayerSkinRenderCache playerSkinRenderCache) @ L42
- 构造器名:BlockEntityRenderDispatcher
- 源码定位:L42
- 修饰符:public
参数:
- font: Font
- entityModelSet: Supplier
- blockModelResolver: BlockModelResolver
- itemModelResolver: ItemModelResolver
- entityRenderer: EntityRenderDispatcher
- sprites: SpriteGetter
- playerSkinRenderCache: PlayerSkinRenderCache
说明:
TODO
方法
下面的方法块按源码顺序生成。
public <E extends BlockEntity,S extends BlockEntityRenderState> BlockEntityRenderer<E,S> getRenderer(E blockEntity) @ L60
- 方法名:getRenderer
- 源码定位:L60
- 返回类型:<E extends BlockEntity,S extends BlockEntityRenderState> BlockEntityRenderer<E,S>
- 修饰符:public
参数:
- blockEntity: E
说明:
TODO
public <E extends BlockEntity,S extends BlockEntityRenderState> BlockEntityRenderer<E,S> getRenderer(S state) @ L64
- 方法名:getRenderer
- 源码定位:L64
- 返回类型:<E extends BlockEntity,S extends BlockEntityRenderState> BlockEntityRenderer<E,S>
- 修饰符:public
参数:
- state: S
说明:
TODO
public void prepare(Vec3 cameraPos) @ L68
- 方法名:prepare
- 源码定位:L68
- 返回类型:void
- 修饰符:public
参数:
- cameraPos: Vec3
说明:
TODO
public <E extends BlockEntity,S extends BlockEntityRenderState> S tryExtractRenderState(E blockEntity, float partialTicks, ModelFeatureRenderer.CrumblingOverlay breakProgress) @ L72
- 方法名:tryExtractRenderState
- 源码定位:L72
- 返回类型:<E extends BlockEntity,S extends BlockEntityRenderState> S
- 修饰符:public
参数:
- blockEntity: E
- partialTicks: float
- breakProgress: ModelFeatureRenderer.CrumblingOverlay
说明:
TODO
public <S extends BlockEntityRenderState> void submit(S state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) @ L90
- 方法名:submit
- 源码定位:L90
- 返回类型:
void - 修饰符:public
参数:
- state: S
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- camera: CameraRenderState
说明:
TODO
public void onResourceManagerReload(ResourceManager resourceManager) @ L104
- 方法名:onResourceManagerReload
- 源码定位:L104
- 返回类型:void
- 修饰符:public
参数:
- resourceManager: ResourceManager
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class BlockEntityRenderDispatcher implements ResourceManagerReloadListener {
private Map<BlockEntityType<?>, BlockEntityRenderer<?, ?>> renderers = ImmutableMap.of();
private final Font font;
private final Supplier<EntityModelSet> entityModelSet;
private Vec3 cameraPos;
private final BlockModelResolver blockModelResolver;
private final ItemModelResolver itemModelResolver;
private final EntityRenderDispatcher entityRenderer;
private final SpriteGetter sprites;
private final PlayerSkinRenderCache playerSkinRenderCache;
public BlockEntityRenderDispatcher(
Font font,
Supplier<EntityModelSet> entityModelSet,
BlockModelResolver blockModelResolver,
ItemModelResolver itemModelResolver,
EntityRenderDispatcher entityRenderer,
SpriteGetter sprites,
PlayerSkinRenderCache playerSkinRenderCache
) {
this.blockModelResolver = blockModelResolver;
this.itemModelResolver = itemModelResolver;
this.entityRenderer = entityRenderer;
this.font = font;
this.entityModelSet = entityModelSet;
this.sprites = sprites;
this.playerSkinRenderCache = playerSkinRenderCache;
}
public <E extends BlockEntity, S extends BlockEntityRenderState> @Nullable BlockEntityRenderer<E, S> getRenderer(E blockEntity) {
return (BlockEntityRenderer<E, S>)this.renderers.get(blockEntity.getType());
}
public <E extends BlockEntity, S extends BlockEntityRenderState> @Nullable BlockEntityRenderer<E, S> getRenderer(S state) {
return (BlockEntityRenderer<E, S>)this.renderers.get(state.blockEntityType);
}
public void prepare(Vec3 cameraPos) {
this.cameraPos = cameraPos;
}
public <E extends BlockEntity, S extends BlockEntityRenderState> @Nullable S tryExtractRenderState(
E blockEntity, float partialTicks, ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress
) {
BlockEntityRenderer<E, S> renderer = this.getRenderer(blockEntity);
if (renderer == null) {
return null;
} else if (!blockEntity.hasLevel() || !blockEntity.getType().isValid(blockEntity.getBlockState())) {
return null;
} else if (!renderer.shouldRender(blockEntity, this.cameraPos)) {
return null;
} else {
Vec3 cameraPosition = this.cameraPos;
S state = renderer.createRenderState();
renderer.extractRenderState(blockEntity, state, partialTicks, cameraPosition, breakProgress);
return state;
}
}
public <S extends BlockEntityRenderState> void submit(S state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
BlockEntityRenderer<?, S> renderer = this.getRenderer(state);
if (renderer != null) {
try {
renderer.submit(state, poseStack, submitNodeCollector, camera);
} catch (Throwable var9) {
CrashReport report = CrashReport.forThrowable(var9, "Rendering Block Entity");
CrashReportCategory category = report.addCategory("Block Entity Details");
state.fillCrashReportCategory(category);
throw new ReportedException(report);
}
}
}
@Override
public void onResourceManagerReload(ResourceManager resourceManager) {
BlockEntityRendererProvider.Context context = new BlockEntityRendererProvider.Context(
this,
this.blockModelResolver,
this.itemModelResolver,
this.entityRenderer,
this.entityModelSet.get(),
this.font,
this.sprites,
this.playerSkinRenderCache
);
this.renderers = BlockEntityRenderers.createEntityRenderers(context);
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
CrashReport.forThrowable()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
ReportedException()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
字段/返回值
- 引用位置:
-
- 引用位置:
方法调用/构造调用 - 关联成员:
BlockEntityRendererProvider.Context(), Context()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
BlockEntityRenderers.createEntityRenderers()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置: