SelectItemModelProperty.java
net.minecraft.client.renderer.item.properties.select.SelectItemModelProperty
信息
- 全限定名:net.minecraft.client.renderer.item.properties.select.SelectItemModelProperty
- 类型:public interface
- 包:net.minecraft.client.renderer.item.properties.select
- 源码路径:src/main/java/net/minecraft/client/renderer/item/properties/select/SelectItemModelProperty.java
- 起始行号:L21
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
net.minecraft.client.renderer.item.properties.select.SelectItemModelProperty.Type- 类型:
record - 修饰符:
public - 源码定位:
L29 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
T get(ItemStack itemStack, ClientLevel level, LivingEntity owner, int seed, ItemDisplayContext displayContext) @ L22
- 方法名:get
- 源码定位:L22
- 返回类型:T
- 修饰符:package-private
参数:
- itemStack: ItemStack
- level: ClientLevel
- owner: LivingEntity
- seed: int
- displayContext: ItemDisplayContext
说明:
TODO
Codec<T> valueCodec() @ L24
- 方法名:valueCodec
- 源码定位:L24
- 返回类型:Codec
- 修饰符:package-private
参数:
- 无
说明:
TODO
SelectItemModelProperty.Type<?extends SelectItemModelProperty<T>,T> type() @ L26
- 方法名:type
- 源码定位:L26
- 返回类型:SelectItemModelProperty.Type<?extends SelectItemModelProperty
,T> - 修饰符:package-private
参数:
- 无
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public interface SelectItemModelProperty<T> {
@Nullable T get(ItemStack itemStack, @Nullable ClientLevel level, @Nullable LivingEntity owner, int seed, ItemDisplayContext displayContext);
Codec<T> valueCodec();
SelectItemModelProperty.Type<? extends SelectItemModelProperty<T>, T> type();
@OnlyIn(Dist.CLIENT)
public record Type<P extends SelectItemModelProperty<T>, T>(MapCodec<SelectItemModel.UnbakedSwitch<P, T>> switchCodec) {
public static <P extends SelectItemModelProperty<T>, T> SelectItemModelProperty.Type<P, T> create(MapCodec<P> propertyMapCodec, Codec<T> valueCodec) {
MapCodec<SelectItemModel.UnbakedSwitch<P, T>> switchCodec = RecordCodecBuilder.mapCodec(
i -> i.group(
propertyMapCodec.forGetter(SelectItemModel.UnbakedSwitch::property),
createCasesFieldCodec(valueCodec).forGetter(SelectItemModel.UnbakedSwitch::cases)
)
.apply(i, SelectItemModel.UnbakedSwitch::new)
);
return new SelectItemModelProperty.Type<>(switchCodec);
}
public static <T> MapCodec<List<SelectItemModel.SwitchCase<T>>> createCasesFieldCodec(Codec<T> valueCodec) {
return SelectItemModel.SwitchCase.codec(valueCodec).listOf().validate(SelectItemModelProperty.Type::validateCases).fieldOf("cases");
}
private static <T> DataResult<List<SelectItemModel.SwitchCase<T>>> validateCases(List<SelectItemModel.SwitchCase<T>> cases) {
if (cases.isEmpty()) {
return DataResult.error(() -> "Empty case list");
} else {
Multiset<T> counts = HashMultiset.create();
for (SelectItemModel.SwitchCase<T> c : cases) {
counts.addAll(c.values());
}
return counts.size() != counts.entrySet().size()
? DataResult.error(
() -> "Duplicate case conditions: "
+ counts.entrySet().stream().filter(e -> e.getCount() > 1).map(e -> e.getElement().toString()).collect(Collectors.joining(", "))
)
: DataResult.success(cases);
}
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SelectItemModel.SwitchCase.codec()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: