ItemFrameRenderer.java
net.minecraft.client.renderer.entity.ItemFrameRenderer
信息
- 全限定名:net.minecraft.client.renderer.entity.ItemFrameRenderer
- 类型:public class
- 包:net.minecraft.client.renderer.entity
- 源码路径:src/main/java/net/minecraft/client/renderer/entity/ItemFrameRenderer.java
- 起始行号:L28
- 继承:EntityRenderer<T,ItemFrameRenderState>
- 职责:
TODO
字段/常量
-
BLOCK_DISPLAY_CONTEXT- 类型:
BlockDisplayContext - 修饰符:
public static final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
GLOW_FRAME_BRIGHTNESS- 类型:
int - 修饰符:
public static final - 源码定位:
L30 - 说明:
TODO
- 类型:
-
BRIGHT_MAP_LIGHT_ADJUSTMENT- 类型:
int - 修饰符:
public static final - 源码定位:
L31 - 说明:
TODO
- 类型:
-
blockModelResolver- 类型:
BlockModelResolver - 修饰符:
private final - 源码定位:
L32 - 说明:
TODO
- 类型:
-
itemModelResolver- 类型:
ItemModelResolver - 修饰符:
private final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
mapRenderer- 类型:
MapRenderer - 修饰符:
private final - 源码定位:
L34 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public ItemFrameRenderer(EntityRendererProvider.Context context) @ L36
- 构造器名:ItemFrameRenderer
- 源码定位:L36
- 修饰符:public
参数:
- context: EntityRendererProvider.Context
说明:
TODO
方法
下面的方法块按源码顺序生成。
protected int getBlockLightLevel(T entity, BlockPos blockPos) @ L43
- 方法名:getBlockLightLevel
- 源码定位:L43
- 返回类型:int
- 修饰符:protected
参数:
- entity: T
- blockPos: BlockPos
说明:
TODO
public void submit(ItemFrameRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) @ L47
- 方法名:submit
- 源码定位:L47
- 返回类型:void
- 修饰符:public
参数:
- state: ItemFrameRenderState
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- camera: CameraRenderState
说明:
TODO
private int getLightCoords(boolean isGlowFrame, int glowLightCoords, int originalLightCoords) @ L100
- 方法名:getLightCoords
- 源码定位:L100
- 返回类型:int
- 修饰符:private
参数:
- isGlowFrame: boolean
- glowLightCoords: int
- originalLightCoords: int
说明:
TODO
public Vec3 getRenderOffset(ItemFrameRenderState state) @ L104
- 方法名:getRenderOffset
- 源码定位:L104
- 返回类型:Vec3
- 修饰符:public
参数:
- state: ItemFrameRenderState
说明:
TODO
protected boolean shouldShowName(T entity, double distanceToCameraSq) @ L108
- 方法名:shouldShowName
- 源码定位:L108
- 返回类型:boolean
- 修饰符:protected
参数:
- entity: T
- distanceToCameraSq: double
说明:
TODO
protected Component getNameTag(T entity) @ L112
- 方法名:getNameTag
- 源码定位:L112
- 返回类型:Component
- 修饰符:protected
参数:
- entity: T
说明:
TODO
public ItemFrameRenderState createRenderState() @ L116
- 方法名:createRenderState
- 源码定位:L116
- 返回类型:ItemFrameRenderState
- 修饰符:public
参数:
- 无
说明:
TODO
public void extractRenderState(T entity, ItemFrameRenderState state, float partialTicks) @ L120
- 方法名:extractRenderState
- 源码定位:L120
- 返回类型:void
- 修饰符:public
参数:
- entity: T
- state: ItemFrameRenderState
- partialTicks: float
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class ItemFrameRenderer<T extends ItemFrame> extends EntityRenderer<T, ItemFrameRenderState> {
public static final BlockDisplayContext BLOCK_DISPLAY_CONTEXT = BlockDisplayContext.create();
public static final int GLOW_FRAME_BRIGHTNESS = 5;
public static final int BRIGHT_MAP_LIGHT_ADJUSTMENT = 30;
private final BlockModelResolver blockModelResolver;
private final ItemModelResolver itemModelResolver;
private final MapRenderer mapRenderer;
public ItemFrameRenderer(EntityRendererProvider.Context context) {
super(context);
this.blockModelResolver = context.getBlockModelResolver();
this.itemModelResolver = context.getItemModelResolver();
this.mapRenderer = context.getMapRenderer();
}
protected int getBlockLightLevel(T entity, BlockPos blockPos) {
return entity.is(EntityType.GLOW_ITEM_FRAME) ? Math.max(5, super.getBlockLightLevel(entity, blockPos)) : super.getBlockLightLevel(entity, blockPos);
}
public void submit(ItemFrameRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
super.submit(state, poseStack, submitNodeCollector, camera);
poseStack.pushPose();
Direction direction = state.direction;
Vec3 renderOffset = this.getRenderOffset(state);
poseStack.translate(-renderOffset.x(), -renderOffset.y(), -renderOffset.z());
double offs = 0.46875;
poseStack.translate(direction.getStepX() * 0.46875, direction.getStepY() * 0.46875, direction.getStepZ() * 0.46875);
float xRot;
float yRot;
if (direction.getAxis().isHorizontal()) {
xRot = 0.0F;
yRot = 180.0F - direction.toYRot();
} else {
xRot = -90 * direction.getAxisDirection().getStep();
yRot = 180.0F;
}
poseStack.mulPose(Axis.XP.rotationDegrees(xRot));
poseStack.mulPose(Axis.YP.rotationDegrees(yRot));
if (!state.frameModel.isEmpty()) {
poseStack.pushPose();
poseStack.translate(-0.5F, -0.5F, -0.5F);
state.frameModel.submitWithZOffset(poseStack, submitNodeCollector, state.lightCoords, OverlayTexture.NO_OVERLAY, state.outlineColor);
poseStack.popPose();
}
if (state.isInvisible) {
poseStack.translate(0.0F, 0.0F, 0.5F);
} else {
poseStack.translate(0.0F, 0.0F, 0.4375F);
}
if (state.mapId != null) {
int rotation = state.rotation % 4 * 2;
poseStack.mulPose(Axis.ZP.rotationDegrees(rotation * 360.0F / 8.0F));
poseStack.mulPose(Axis.ZP.rotationDegrees(180.0F));
float s = 0.0078125F;
poseStack.scale(0.0078125F, 0.0078125F, 0.0078125F);
poseStack.translate(-64.0F, -64.0F, 0.0F);
poseStack.translate(0.0F, 0.0F, -1.0F);
int lightCoords = this.getLightCoords(state.isGlowFrame, 15728850, state.lightCoords);
this.mapRenderer.render(state.mapRenderState, poseStack, submitNodeCollector, true, lightCoords);
} else if (!state.item.isEmpty()) {
poseStack.mulPose(Axis.ZP.rotationDegrees(state.rotation * 360.0F / 8.0F));
int lightVal = this.getLightCoords(state.isGlowFrame, 15728880, state.lightCoords);
poseStack.scale(0.5F, 0.5F, 0.5F);
state.item.submit(poseStack, submitNodeCollector, lightVal, OverlayTexture.NO_OVERLAY, state.outlineColor);
}
poseStack.popPose();
}
private int getLightCoords(boolean isGlowFrame, int glowLightCoords, int originalLightCoords) {
return isGlowFrame ? glowLightCoords : originalLightCoords;
}
public Vec3 getRenderOffset(ItemFrameRenderState state) {
return new Vec3(state.direction.getStepX() * 0.3F, -0.25, state.direction.getStepZ() * 0.3F);
}
protected boolean shouldShowName(T entity, double distanceToCameraSq) {
return Minecraft.renderNames() && this.entityRenderDispatcher.crosshairPickEntity == entity && entity.getItem().getCustomName() != null;
}
protected Component getNameTag(T entity) {
return entity.getItem().getHoverName();
}
public ItemFrameRenderState createRenderState() {
return new ItemFrameRenderState();
}
public void extractRenderState(T entity, ItemFrameRenderState state, float partialTicks) {
super.extractRenderState(entity, state, partialTicks);
state.direction = entity.getDirection();
ItemStack itemStack = entity.getItem();
this.itemModelResolver.updateForNonLiving(state.item, itemStack, ItemDisplayContext.FIXED, entity);
state.rotation = entity.getRotation();
state.isGlowFrame = entity.is(EntityType.GLOW_ITEM_FRAME);
state.mapId = null;
if (!itemStack.isEmpty()) {
MapId framedMapId = entity.getFramedMapId(itemStack);
if (framedMapId != null) {
MapItemSavedData mapData = entity.level().getMapData(framedMapId);
if (mapData != null) {
this.mapRenderer.extractRenderState(framedMapId, mapData, state.mapRenderState);
state.mapId = framedMapId;
}
}
}
if (!state.isInvisible) {
this.blockModelResolver.updateForItemFrame(state.frameModel, state.isGlowFrame, state.mapId != null);
} else {
state.frameModel.clear();
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Minecraft.renderNames()
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
BlockDisplayContext.create()
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/构造调用/返回值 - 关联成员:
ItemFrameRenderState()
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
构造调用/返回值 - 关联成员:
Vec3()
- 引用位置: