HumanoidArmorLayer.java
net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer
信息
- 全限定名:net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer
- 类型:public class
- 包:net.minecraft.client.renderer.entity.layers
- 源码路径:src/main/java/net/minecraft/client/renderer/entity/layers/HumanoidArmorLayer.java
- 起始行号:L19
- 继承:RenderLayer<S,M>
- 职责:
TODO
字段/常量
-
modelSet- 类型:
ArmorModelSet<A> - 修饰符:
private final - 源码定位:
L20 - 说明:
TODO
- 类型:
-
babyModelSet- 类型:
ArmorModelSet<A> - 修饰符:
private final - 源码定位:
L21 - 说明:
TODO
- 类型:
-
equipmentRenderer- 类型:
EquipmentLayerRenderer - 修饰符:
private final - 源码定位:
L22 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public HumanoidArmorLayer(RenderLayerParent<S,M> renderer, ArmorModelSet<A> modelSet, EquipmentLayerRenderer equipmentRenderer) @ L24
- 构造器名:HumanoidArmorLayer
- 源码定位:L24
- 修饰符:public
参数:
- renderer: RenderLayerParent<S,M>
- modelSet: ArmorModelSet
- equipmentRenderer: EquipmentLayerRenderer
说明:
TODO
public HumanoidArmorLayer(RenderLayerParent<S,M> renderer, ArmorModelSet<A> modelSet, ArmorModelSet<A> babyModelSet, EquipmentLayerRenderer equipmentRenderer) @ L28
- 构造器名:HumanoidArmorLayer
- 源码定位:L28
- 修饰符:public
参数:
- renderer: RenderLayerParent<S,M>
- modelSet: ArmorModelSet
- babyModelSet: ArmorModelSet
- equipmentRenderer: EquipmentLayerRenderer
说明:
TODO
方法
下面的方法块按源码顺序生成。
public static boolean shouldRender(ItemStack itemStack, EquipmentSlot slot) @ L37
- 方法名:shouldRender
- 源码定位:L37
- 返回类型:boolean
- 修饰符:public static
参数:
- itemStack: ItemStack
- slot: EquipmentSlot
说明:
TODO
private static boolean shouldRender(Equippable equippable, EquipmentSlot slot) @ L42
- 方法名:shouldRender
- 源码定位:L42
- 返回类型:boolean
- 修饰符:private static
参数:
- equippable: Equippable
- slot: EquipmentSlot
说明:
TODO
public void submit(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, S state, float yRot, float xRot) @ L46
- 方法名:submit
- 源码定位:L46
- 返回类型:void
- 修饰符:public
参数:
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- lightCoords: int
- state: S
- yRot: float
- xRot: float
说明:
TODO
private void renderArmorPiece(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, ItemStack itemStack, EquipmentSlot slot, int lightCoords, S state) @ L53
- 方法名:renderArmorPiece
- 源码定位:L53
- 返回类型:void
- 修饰符:private
参数:
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- itemStack: ItemStack
- slot: EquipmentSlot
- lightCoords: int
- state: S
说明:
TODO
private A getArmorModel(S state, EquipmentSlot slot) @ L69
- 方法名:getArmorModel
- 源码定位:L69
- 返回类型:A
- 修饰符:private
参数:
- state: S
- slot: EquipmentSlot
说明:
TODO
private boolean usesInnerModel(EquipmentSlot slot) @ L73
- 方法名:usesInnerModel
- 源码定位:L73
- 返回类型:boolean
- 修饰符:private
参数:
- slot: EquipmentSlot
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class HumanoidArmorLayer<S extends HumanoidRenderState, M extends HumanoidModel<S>, A extends HumanoidModel<S>> extends RenderLayer<S, M> {
private final ArmorModelSet<A> modelSet;
private final ArmorModelSet<A> babyModelSet;
private final EquipmentLayerRenderer equipmentRenderer;
public HumanoidArmorLayer(RenderLayerParent<S, M> renderer, ArmorModelSet<A> modelSet, EquipmentLayerRenderer equipmentRenderer) {
this(renderer, modelSet, modelSet, equipmentRenderer);
}
public HumanoidArmorLayer(
RenderLayerParent<S, M> renderer, ArmorModelSet<A> modelSet, ArmorModelSet<A> babyModelSet, EquipmentLayerRenderer equipmentRenderer
) {
super(renderer);
this.modelSet = modelSet;
this.babyModelSet = babyModelSet;
this.equipmentRenderer = equipmentRenderer;
}
public static boolean shouldRender(ItemStack itemStack, EquipmentSlot slot) {
Equippable equippable = itemStack.get(DataComponents.EQUIPPABLE);
return equippable != null && shouldRender(equippable, slot);
}
private static boolean shouldRender(Equippable equippable, EquipmentSlot slot) {
return equippable.assetId().isPresent() && equippable.slot() == slot;
}
public void submit(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, S state, float yRot, float xRot) {
this.renderArmorPiece(poseStack, submitNodeCollector, state.chestEquipment, EquipmentSlot.CHEST, lightCoords, state);
this.renderArmorPiece(poseStack, submitNodeCollector, state.legsEquipment, EquipmentSlot.LEGS, lightCoords, state);
this.renderArmorPiece(poseStack, submitNodeCollector, state.feetEquipment, EquipmentSlot.FEET, lightCoords, state);
this.renderArmorPiece(poseStack, submitNodeCollector, state.headEquipment, EquipmentSlot.HEAD, lightCoords, state);
}
private void renderArmorPiece(
PoseStack poseStack, SubmitNodeCollector submitNodeCollector, ItemStack itemStack, EquipmentSlot slot, int lightCoords, S state
) {
Equippable equippable = itemStack.get(DataComponents.EQUIPPABLE);
if (equippable != null && shouldRender(equippable, slot)) {
A model = this.getArmorModel(state, slot);
EquipmentClientInfo.LayerType layerType = state.isBaby && state.entityType != EntityType.ARMOR_STAND
? EquipmentClientInfo.LayerType.HUMANOID_BABY
: (this.usesInnerModel(slot) ? EquipmentClientInfo.LayerType.HUMANOID_LEGGINGS : EquipmentClientInfo.LayerType.HUMANOID);
this.equipmentRenderer
.renderLayers(
layerType, equippable.assetId().orElseThrow(), model, state, itemStack, poseStack, submitNodeCollector, lightCoords, state.outlineColor
);
}
}
private A getArmorModel(S state, EquipmentSlot slot) {
return (state.isBaby ? this.babyModelSet : this.modelSet).get(slot);
}
private boolean usesInnerModel(EquipmentSlot slot) {
return slot == EquipmentSlot.LEGS;
}
}