BannerRenderer.java
net.minecraft.client.renderer.blockentity.BannerRenderer
信息
- 全限定名:net.minecraft.client.renderer.blockentity.BannerRenderer
- 类型:public class
- 包:net.minecraft.client.renderer.blockentity
- 源码路径:src/main/java/net/minecraft/client/renderer/blockentity/BannerRenderer.java
- 起始行号:L40
- 实现:BlockEntityRenderer<BannerBlockEntity,BannerRenderState>
- 职责:
TODO
字段/常量
-
MAX_PATTERNS- 类型:
int - 修饰符:
private static final - 源码定位:
L41 - 说明:
TODO
- 类型:
-
SIZE- 类型:
float - 修饰符:
private static final - 源码定位:
L42 - 说明:
TODO
- 类型:
-
MODEL_SCALE- 类型:
Vector3fc - 修饰符:
private static final - 源码定位:
L43 - 说明:
TODO
- 类型:
-
MODEL_TRANSLATION- 类型:
Vector3fc - 修饰符:
private static final - 源码定位:
L44 - 说明:
TODO
- 类型:
-
TRANSFORMATIONS- 类型:
WallAndGroundTransformations<Transformation> - 修饰符:
public static final - 源码定位:
L45 - 说明:
TODO
- 类型:
-
sprites- 类型:
SpriteGetter - 修饰符:
private final - 源码定位:
L48 - 说明:
TODO
- 类型:
-
standingModel- 类型:
BannerModel - 修饰符:
private final - 源码定位:
L49 - 说明:
TODO
- 类型:
-
wallModel- 类型:
BannerModel - 修饰符:
private final - 源码定位:
L50 - 说明:
TODO
- 类型:
-
standingFlagModel- 类型:
BannerFlagModel - 修饰符:
private final - 源码定位:
L51 - 说明:
TODO
- 类型:
-
wallFlagModel- 类型:
BannerFlagModel - 修饰符:
private final - 源码定位:
L52 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public BannerRenderer(BlockEntityRendererProvider.Context context) @ L54
- 构造器名:BannerRenderer
- 源码定位:L54
- 修饰符:public
参数:
- context: BlockEntityRendererProvider.Context
说明:
TODO
public BannerRenderer(SpecialModelRenderer.BakingContext context) @ L58
- 构造器名:BannerRenderer
- 源码定位:L58
- 修饰符:public
参数:
- context: SpecialModelRenderer.BakingContext
说明:
TODO
public BannerRenderer(EntityModelSet modelSet, SpriteGetter sprites) @ L62
- 构造器名:BannerRenderer
- 源码定位:L62
- 修饰符:public
参数:
- modelSet: EntityModelSet
- sprites: SpriteGetter
说明:
TODO
方法
下面的方法块按源码顺序生成。
public BannerRenderState createRenderState() @ L70
- 方法名:createRenderState
- 源码定位:L70
- 返回类型:BannerRenderState
- 修饰符:public
参数:
- 无
说明:
TODO
public void extractRenderState(BannerBlockEntity blockEntity, BannerRenderState state, float partialTicks, Vec3 cameraPosition, ModelFeatureRenderer.CrumblingOverlay breakProgress) @ L74
- 方法名:extractRenderState
- 源码定位:L74
- 返回类型:void
- 修饰符:public
参数:
- blockEntity: BannerBlockEntity
- state: BannerRenderState
- partialTicks: float
- cameraPosition: Vec3
- breakProgress: ModelFeatureRenderer.CrumblingOverlay
说明:
TODO
private BannerModel bannerModel(BannerBlock.AttachmentType type) @ L98
- 方法名:bannerModel
- 源码定位:L98
- 返回类型:BannerModel
- 修饰符:private
参数:
- type: BannerBlock.AttachmentType
说明:
TODO
private BannerFlagModel flagModel(BannerBlock.AttachmentType type) @ L105
- 方法名:flagModel
- 源码定位:L105
- 返回类型:BannerFlagModel
- 修饰符:private
参数:
- type: BannerBlock.AttachmentType
说明:
TODO
public void submit(BannerRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) @ L112
- 方法名:submit
- 源码定位:L112
- 返回类型:void
- 修饰符:public
参数:
- state: BannerRenderState
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- camera: CameraRenderState
说明:
TODO
public void submitSpecial(BannerBlock.AttachmentType type, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, DyeColor baseColor, BannerPatternLayers patterns, int outlineColor) @ L132
- 方法名:submitSpecial
- 源码定位:L132
- 返回类型:void
- 修饰符:public
参数:
- type: BannerBlock.AttachmentType
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- lightCoords: int
- overlayCoords: int
- baseColor: DyeColor
- patterns: BannerPatternLayers
- outlineColor: int
说明:
TODO
private static void submitBanner(SpriteGetter sprites, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, BannerModel model, BannerFlagModel flagModel, float phase, DyeColor baseColor, BannerPatternLayers patterns, ModelFeatureRenderer.CrumblingOverlay breakProgress, int outlineColor) @ L158
- 方法名:submitBanner
- 源码定位:L158
- 返回类型:void
- 修饰符:private static
参数:
- sprites: SpriteGetter
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- lightCoords: int
- overlayCoords: int
- model: BannerModel
- flagModel: BannerFlagModel
- phase: float
- baseColor: DyeColor
- patterns: BannerPatternLayers
- breakProgress: ModelFeatureRenderer.CrumblingOverlay
- outlineColor: int
说明:
TODO
public static <S> void submitPatterns(SpriteGetter sprites, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, Model<S> model, S state, boolean banner, DyeColor baseColor, BannerPatternLayers patterns, ModelFeatureRenderer.CrumblingOverlay breakProgress) @ L178
- 方法名:submitPatterns
- 源码定位:L178
- 返回类型:
void - 修饰符:public static
参数:
- sprites: SpriteGetter
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- lightCoords: int
- overlayCoords: int
- model: Model
- state: S
- banner: boolean
- baseColor: DyeColor
- patterns: BannerPatternLayers
- breakProgress: ModelFeatureRenderer.CrumblingOverlay
说明:
TODO
private static <S> void submitPatternLayer(SpriteGetter sprites, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, Model<S> model, S state, SpriteId sprite, DyeColor color, ModelFeatureRenderer.CrumblingOverlay breakProgress) @ L211
- 方法名:submitPatternLayer
- 源码定位:L211
- 返回类型:
void - 修饰符:private static
参数:
- sprites: SpriteGetter
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- lightCoords: int
- overlayCoords: int
- model: Model
- state: S
- sprite: SpriteId
- color: DyeColor
- breakProgress: ModelFeatureRenderer.CrumblingOverlay
说明:
TODO
public void getExtents(Consumer<Vector3fc> output) @ L238
- 方法名:getExtents
- 源码定位:L238
- 返回类型:void
- 修饰符:public
参数:
- output: Consumer
说明:
TODO
private static Transformation modelTransformation(float angle) @ L245
- 方法名:modelTransformation
- 源码定位:L245
- 返回类型:Transformation
- 修饰符:private static
参数:
- angle: float
说明:
TODO
private static Transformation createGroundTransformation(int segment) @ L249
- 方法名:createGroundTransformation
- 源码定位:L249
- 返回类型:Transformation
- 修饰符:private static
参数:
- segment: int
说明:
TODO
private static Transformation createWallTransformation(Direction direction) @ L253
- 方法名:createWallTransformation
- 源码定位:L253
- 返回类型:Transformation
- 修饰符:private static
参数:
- direction: Direction
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class BannerRenderer implements BlockEntityRenderer<BannerBlockEntity, BannerRenderState> {
private static final int MAX_PATTERNS = 16;
private static final float SIZE = 0.6666667F;
private static final Vector3fc MODEL_SCALE = new Vector3f(0.6666667F, -0.6666667F, -0.6666667F);
private static final Vector3fc MODEL_TRANSLATION = new Vector3f(0.5F, 0.0F, 0.5F);
public static final WallAndGroundTransformations<Transformation> TRANSFORMATIONS = new WallAndGroundTransformations<>(
BannerRenderer::createWallTransformation, BannerRenderer::createGroundTransformation, 16
);
private final SpriteGetter sprites;
private final BannerModel standingModel;
private final BannerModel wallModel;
private final BannerFlagModel standingFlagModel;
private final BannerFlagModel wallFlagModel;
public BannerRenderer(BlockEntityRendererProvider.Context context) {
this(context.entityModelSet(), context.sprites());
}
public BannerRenderer(SpecialModelRenderer.BakingContext context) {
this(context.entityModelSet(), context.sprites());
}
public BannerRenderer(EntityModelSet modelSet, SpriteGetter sprites) {
this.sprites = sprites;
this.standingModel = new BannerModel(modelSet.bakeLayer(ModelLayers.STANDING_BANNER));
this.wallModel = new BannerModel(modelSet.bakeLayer(ModelLayers.WALL_BANNER));
this.standingFlagModel = new BannerFlagModel(modelSet.bakeLayer(ModelLayers.STANDING_BANNER_FLAG));
this.wallFlagModel = new BannerFlagModel(modelSet.bakeLayer(ModelLayers.WALL_BANNER_FLAG));
}
public BannerRenderState createRenderState() {
return new BannerRenderState();
}
public void extractRenderState(
BannerBlockEntity blockEntity,
BannerRenderState state,
float partialTicks,
Vec3 cameraPosition,
ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress
) {
BlockEntityRenderer.super.extractRenderState(blockEntity, state, partialTicks, cameraPosition, breakProgress);
state.baseColor = blockEntity.getBaseColor();
state.patterns = blockEntity.getPatterns();
BlockState blockState = blockEntity.getBlockState();
if (blockState.getBlock() instanceof BannerBlock) {
state.transformation = TRANSFORMATIONS.freeTransformations(blockState.getValue(BannerBlock.ROTATION));
state.attachmentType = BannerBlock.AttachmentType.GROUND;
} else {
state.transformation = TRANSFORMATIONS.wallTransformation(blockState.getValue(WallBannerBlock.FACING));
state.attachmentType = BannerBlock.AttachmentType.WALL;
}
long gameTime = blockEntity.getLevel() != null ? blockEntity.getLevel().getGameTime() : 0L;
BlockPos blockPos = blockEntity.getBlockPos();
state.phase = ((float)Math.floorMod(blockPos.getX() * 7 + blockPos.getY() * 9 + blockPos.getZ() * 13 + gameTime, 100L) + partialTicks) / 100.0F;
}
private BannerModel bannerModel(BannerBlock.AttachmentType type) {
return switch (type) {
case WALL -> this.wallModel;
case GROUND -> this.standingModel;
};
}
private BannerFlagModel flagModel(BannerBlock.AttachmentType type) {
return switch (type) {
case WALL -> this.wallFlagModel;
case GROUND -> this.standingFlagModel;
};
}
public void submit(BannerRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
poseStack.pushPose();
poseStack.mulPose(state.transformation);
submitBanner(
this.sprites,
poseStack,
submitNodeCollector,
state.lightCoords,
OverlayTexture.NO_OVERLAY,
this.bannerModel(state.attachmentType),
this.flagModel(state.attachmentType),
state.phase,
state.baseColor,
state.patterns,
state.breakProgress,
0
);
poseStack.popPose();
}
public void submitSpecial(
BannerBlock.AttachmentType type,
PoseStack poseStack,
SubmitNodeCollector submitNodeCollector,
int lightCoords,
int overlayCoords,
DyeColor baseColor,
BannerPatternLayers patterns,
int outlineColor
) {
submitBanner(
this.sprites,
poseStack,
submitNodeCollector,
lightCoords,
overlayCoords,
this.bannerModel(type),
this.flagModel(type),
0.0F,
baseColor,
patterns,
null,
outlineColor
);
}
private static void submitBanner(
SpriteGetter sprites,
PoseStack poseStack,
SubmitNodeCollector submitNodeCollector,
int lightCoords,
int overlayCoords,
BannerModel model,
BannerFlagModel flagModel,
float phase,
DyeColor baseColor,
BannerPatternLayers patterns,
ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress,
int outlineColor
) {
SpriteId sprite = Sheets.BANNER_BASE;
submitNodeCollector.submitModel(model, Unit.INSTANCE, poseStack, lightCoords, overlayCoords, -1, sprite, sprites, outlineColor, breakProgress);
submitNodeCollector.submitModel(flagModel, phase, poseStack, lightCoords, overlayCoords, -1, sprite, sprites, outlineColor, breakProgress);
submitPatterns(sprites, poseStack, submitNodeCollector, lightCoords, overlayCoords, flagModel, phase, true, baseColor, patterns, breakProgress);
}
public static <S> void submitPatterns(
SpriteGetter sprites,
PoseStack poseStack,
SubmitNodeCollector submitNodeCollector,
int lightCoords,
int overlayCoords,
Model<S> model,
S state,
boolean banner,
DyeColor baseColor,
BannerPatternLayers patterns,
ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress
) {
submitPatternLayer(
sprites,
poseStack,
submitNodeCollector,
lightCoords,
overlayCoords,
model,
state,
banner ? Sheets.BANNER_PATTERN_BASE : Sheets.SHIELD_PATTERN_BASE,
baseColor,
breakProgress
);
for (int maskIndex = 0; maskIndex < 16 && maskIndex < patterns.layers().size(); maskIndex++) {
BannerPatternLayers.Layer layer = patterns.layers().get(maskIndex);
SpriteId sprite = banner ? Sheets.getBannerSprite(layer.pattern()) : Sheets.getShieldSprite(layer.pattern());
submitPatternLayer(sprites, poseStack, submitNodeCollector, lightCoords, overlayCoords, model, state, sprite, layer.color(), null);
}
}
private static <S> void submitPatternLayer(
SpriteGetter sprites,
PoseStack poseStack,
SubmitNodeCollector submitNodeCollector,
int lightCoords,
int overlayCoords,
Model<S> model,
S state,
SpriteId sprite,
DyeColor color,
ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress
) {
int diffuseColor = color.getTextureDiffuseColor();
submitNodeCollector.submitModel(
model,
state,
poseStack,
sprite.renderType(RenderTypes::bannerPattern),
lightCoords,
overlayCoords,
diffuseColor,
sprites.get(sprite),
0,
breakProgress
);
}
public void getExtents(Consumer<Vector3fc> output) {
PoseStack poseStack = new PoseStack();
this.standingModel.root().getExtentsForGui(poseStack, output);
this.standingFlagModel.setupAnim(0.0F);
this.standingFlagModel.root().getExtentsForGui(poseStack, output);
}
private static Transformation modelTransformation(float angle) {
return new Transformation(MODEL_TRANSLATION, Axis.YP.rotationDegrees(-angle), MODEL_SCALE, null);
}
private static Transformation createGroundTransformation(int segment) {
return modelTransformation(RotationSegment.convertToDegrees(segment));
}
private static Transformation createWallTransformation(Direction direction) {
return modelTransformation(direction.toYRot());
}
}引用的其他类
-
- 引用位置:
参数/构造调用 - 关联成员:
PoseStack()
- 引用位置:
-
- 引用位置:
字段/构造调用/返回值 - 关联成员:
Transformation()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段/构造调用/返回值 - 关联成员:
BannerFlagModel()
- 引用位置:
-
- 引用位置:
参数/字段/构造调用/返回值 - 关联成员:
BannerModel()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Sheets.getBannerSprite(), Sheets.getShieldSprite()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
参数/构造调用/返回值 - 关联成员:
BannerRenderState()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RotationSegment.convertToDegrees()
- 引用位置:
-
- 引用位置:
参数
- 引用位置: