EquipmentLayerRenderer.java
net.minecraft.client.renderer.entity.layers.EquipmentLayerRenderer
信息
- 全限定名:net.minecraft.client.renderer.entity.layers.EquipmentLayerRenderer
- 类型:public class
- 包:net.minecraft.client.renderer.entity.layers
- 源码路径:src/main/java/net/minecraft/client/renderer/entity/layers/EquipmentLayerRenderer.java
- 起始行号:L31
- 职责:
TODO
字段/常量
-
NO_LAYER_COLOR- 类型:
int - 修饰符:
private static final - 源码定位:
L32 - 说明:
TODO
- 类型:
-
equipmentAssets- 类型:
EquipmentAssetManager - 修饰符:
private final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
layerTextureLookup- 类型:
Function<EquipmentLayerRenderer.LayerTextureKey,Identifier> - 修饰符:
private final - 源码定位:
L34 - 说明:
TODO
- 类型:
-
trimSpriteLookup- 类型:
Function<EquipmentLayerRenderer.TrimSpriteKey,TextureAtlasSprite> - 修饰符:
private final - 源码定位:
L35 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.client.renderer.entity.layers.EquipmentLayerRenderer.LayerTextureKey- 类型:
record - 修饰符:
private - 源码定位:
L136 - 说明:
TODO
- 类型:
-
net.minecraft.client.renderer.entity.layers.EquipmentLayerRenderer.TrimSpriteKey- 类型:
record - 修饰符:
private - 源码定位:
L140 - 说明:
TODO
- 类型:
构造器
public EquipmentLayerRenderer(EquipmentAssetManager equipmentAssets, TextureAtlas armorTrimAtlas) @ L37
- 构造器名:EquipmentLayerRenderer
- 源码定位:L37
- 修饰符:public
参数:
- equipmentAssets: EquipmentAssetManager
- armorTrimAtlas: TextureAtlas
说明:
TODO
方法
下面的方法块按源码顺序生成。
public <S> void renderLayers(EquipmentClientInfo.LayerType layerType, ResourceKey<EquipmentAsset> equipmentAssetId, Model<?super S> model, S state, ItemStack itemStack, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int outlineColor) @ L43
- 方法名:renderLayers
- 源码定位:L43
- 返回类型:
void - 修饰符:public
参数:
- layerType: EquipmentClientInfo.LayerType
- equipmentAssetId: ResourceKey
- model: Model<?super S>
- state: S
- itemStack: ItemStack
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- lightCoords: int
- outlineColor: int
说明:
TODO
public <S> void renderLayers(EquipmentClientInfo.LayerType layerType, ResourceKey<EquipmentAsset> equipmentAssetId, Model<?super S> model, S state, ItemStack itemStack, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, Identifier playerTextureOverride, int outlineColor, int order) @ L57
- 方法名:renderLayers
- 源码定位:L57
- 返回类型:
void - 修饰符:public
参数:
- layerType: EquipmentClientInfo.LayerType
- equipmentAssetId: ResourceKey
- model: Model<?super S>
- state: S
- itemStack: ItemStack
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- lightCoords: int
- playerTextureOverride: Identifier
- outlineColor: int
- order: int
说明:
TODO
private static int getColorForLayer(EquipmentClientInfo.Layer layer, int dyeColor) @ L125
- 方法名:getColorForLayer
- 源码定位:L125
- 返回类型:int
- 修饰符:private static
参数:
- layer: EquipmentClientInfo.Layer
- dyeColor: int
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class EquipmentLayerRenderer {
private static final int NO_LAYER_COLOR = 0;
private final EquipmentAssetManager equipmentAssets;
private final Function<EquipmentLayerRenderer.LayerTextureKey, Identifier> layerTextureLookup;
private final Function<EquipmentLayerRenderer.TrimSpriteKey, TextureAtlasSprite> trimSpriteLookup;
public EquipmentLayerRenderer(EquipmentAssetManager equipmentAssets, TextureAtlas armorTrimAtlas) {
this.equipmentAssets = equipmentAssets;
this.layerTextureLookup = Util.memoize(key -> key.layer.getTextureLocation(key.layerType));
this.trimSpriteLookup = Util.memoize(key -> armorTrimAtlas.getSprite(key.spriteId()));
}
public <S> void renderLayers(
EquipmentClientInfo.LayerType layerType,
ResourceKey<EquipmentAsset> equipmentAssetId,
Model<? super S> model,
S state,
ItemStack itemStack,
PoseStack poseStack,
SubmitNodeCollector submitNodeCollector,
int lightCoords,
int outlineColor
) {
this.renderLayers(layerType, equipmentAssetId, model, state, itemStack, poseStack, submitNodeCollector, lightCoords, null, outlineColor, 1);
}
public <S> void renderLayers(
EquipmentClientInfo.LayerType layerType,
ResourceKey<EquipmentAsset> equipmentAssetId,
Model<? super S> model,
S state,
ItemStack itemStack,
PoseStack poseStack,
SubmitNodeCollector submitNodeCollector,
int lightCoords,
@Nullable Identifier playerTextureOverride,
int outlineColor,
int order
) {
List<EquipmentClientInfo.Layer> layers = this.equipmentAssets.get(equipmentAssetId).getLayers(layerType);
if (!layers.isEmpty()) {
int dyeColor = DyedItemColor.getOrDefault(itemStack, 0);
boolean renderFoil = itemStack.hasFoil();
int nextOrder = order;
for (EquipmentClientInfo.Layer layer : layers) {
int color = getColorForLayer(layer, dyeColor);
if (color != 0) {
Identifier layerTexture = layer.usePlayerTexture() && playerTextureOverride != null
? playerTextureOverride
: this.layerTextureLookup.apply(new EquipmentLayerRenderer.LayerTextureKey(layerType, layer));
submitNodeCollector.order(nextOrder++)
.submitModel(
model,
state,
poseStack,
RenderTypes.armorCutoutNoCull(layerTexture),
lightCoords,
OverlayTexture.NO_OVERLAY,
color,
null,
outlineColor,
null
);
if (renderFoil) {
submitNodeCollector.order(nextOrder++)
.submitModel(
model,
state,
poseStack,
RenderTypes.armorEntityGlint(),
lightCoords,
OverlayTexture.NO_OVERLAY,
color,
null,
outlineColor,
null
);
}
renderFoil = false;
}
}
ArmorTrim trim = itemStack.get(DataComponents.TRIM);
if (trim != null && layerType != EquipmentClientInfo.LayerType.HUMANOID_BABY) {
TextureAtlasSprite sprite = this.trimSpriteLookup.apply(new EquipmentLayerRenderer.TrimSpriteKey(trim, layerType, equipmentAssetId));
RenderType renderType = Sheets.armorTrimsSheet(trim.pattern().value().decal());
submitNodeCollector.order(nextOrder++)
.submitModel(model, state, poseStack, renderType, lightCoords, OverlayTexture.NO_OVERLAY, -1, sprite, outlineColor, null);
}
}
}
private static int getColorForLayer(EquipmentClientInfo.Layer layer, int dyeColor) {
Optional<EquipmentClientInfo.Dyeable> dyeable = layer.dyeable();
if (dyeable.isPresent()) {
int colorWhenUndyed = dyeable.get().colorWhenUndyed().map(ARGB::opaque).orElse(0);
return dyeColor != 0 ? dyeColor : colorWhenUndyed;
} else {
return -1;
}
}
@OnlyIn(Dist.CLIENT)
private record LayerTextureKey(EquipmentClientInfo.LayerType layerType, EquipmentClientInfo.Layer layer) {
}
@OnlyIn(Dist.CLIENT)
private record TrimSpriteKey(ArmorTrim trim, EquipmentClientInfo.LayerType layerType, ResourceKey<EquipmentAsset> equipmentAssetId) {
public Identifier spriteId() {
return this.trim.layerAssetId(this.layerType.trimAssetPrefix(), this.equipmentAssetId);
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Sheets.armorTrimsSheet()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RenderTypes.armorCutoutNoCull(), RenderTypes.armorEntityGlint()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.memoize()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DyedItemColor.getOrDefault()
- 引用位置:
-
- 引用位置:
参数
- 引用位置: