MultiVariantGenerator.java
net.minecraft.client.data.models.blockstates.MultiVariantGenerator
信息
- 全限定名:net.minecraft.client.data.models.blockstates.MultiVariantGenerator
- 类型:public class
- 包:net.minecraft.client.data.models.blockstates
- 源码路径:src/main/java/net/minecraft/client/data/models/blockstates/MultiVariantGenerator.java
- 起始行号:L20
- 实现:BlockModelDefinitionGenerator
- 职责:
TODO
字段/常量
-
block- 类型:
Block - 修饰符:
private final - 源码定位:
L21 - 说明:
TODO
- 类型:
-
entries- 类型:
List<MultiVariantGenerator.Entry> - 修饰符:
private final - 源码定位:
L22 - 说明:
TODO
- 类型:
-
seenProperties- 类型:
Set<Property<?>> - 修饰符:
private final - 源码定位:
L23 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.client.data.models.blockstates.MultiVariantGenerator.Empty- 类型:
class - 修饰符:
public static - 源码定位:
L81 - 说明:
TODO
- 类型:
-
net.minecraft.client.data.models.blockstates.MultiVariantGenerator.Entry- 类型:
record - 修饰符:
private - 源码定位:
L100 - 说明:
TODO
- 类型:
构造器
private MultiVariantGenerator(Block block, List<MultiVariantGenerator.Entry> entries, Set<Property<?>> seenProperties) @ L25
- 构造器名:MultiVariantGenerator
- 源码定位:L25
- 修饰符:private
参数:
- block: Block
- entries: List<MultiVariantGenerator.Entry>
- seenProperties: Set<Property<?>>
说明:
TODO
方法
下面的方法块按源码顺序生成。
private static Set<Property<?>> validateAndExpandProperties(Set<Property<?>> seenProperties, Block block, PropertyDispatch<?> generator) @ L31
- 方法名:validateAndExpandProperties
- 源码定位:L31
- 返回类型:Set<Property<?>>
- 修饰符:private static
参数:
- seenProperties: Set<Property<?>>
- block: Block
- generator: PropertyDispatch<?>
说明:
TODO
public MultiVariantGenerator with(PropertyDispatch<VariantMutator> newStage) @ L45
- 方法名:with
- 源码定位:L45
- 返回类型:MultiVariantGenerator
- 修饰符:public
参数:
- newStage: PropertyDispatch
说明:
TODO
public MultiVariantGenerator with(VariantMutator singleMutator) @ L51
- 方法名:with
- 源码定位:L51
- 返回类型:MultiVariantGenerator
- 修饰符:public
参数:
- singleMutator: VariantMutator
说明:
TODO
public BlockStateModelDispatcher create() @ L56
- 方法名:create
- 源码定位:L56
- 返回类型:BlockStateModelDispatcher
- 修饰符:public
参数:
- 无
说明:
TODO
public Block block() @ L67
- 方法名:block
- 源码定位:L67
- 返回类型:Block
- 修饰符:public
参数:
- 无
说明:
TODO
public static MultiVariantGenerator.Empty dispatch(Block block) @ L72
- 方法名:dispatch
- 源码定位:L72
- 返回类型:MultiVariantGenerator.Empty
- 修饰符:public static
参数:
- block: Block
说明:
TODO
public static MultiVariantGenerator dispatch(Block block, MultiVariant initialModel) @ L76
- 方法名:dispatch
- 源码定位:L76
- 返回类型:MultiVariantGenerator
- 修饰符:public static
参数:
- block: Block
- initialModel: MultiVariant
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class MultiVariantGenerator implements BlockModelDefinitionGenerator {
private final Block block;
private final List<MultiVariantGenerator.Entry> entries;
private final Set<Property<?>> seenProperties;
private MultiVariantGenerator(Block block, List<MultiVariantGenerator.Entry> entries, Set<Property<?>> seenProperties) {
this.block = block;
this.entries = entries;
this.seenProperties = seenProperties;
}
private static Set<Property<?>> validateAndExpandProperties(Set<Property<?>> seenProperties, Block block, PropertyDispatch<?> generator) {
List<Property<?>> addedProperties = generator.getDefinedProperties();
addedProperties.forEach(property -> {
if (block.getStateDefinition().getProperty(property.getName()) != property) {
throw new IllegalStateException("Property " + property + " is not defined for block " + block);
} else if (seenProperties.contains(property)) {
throw new IllegalStateException("Values of property " + property + " already defined for block " + block);
}
});
Set<Property<?>> newSeenProperties = new HashSet<>(seenProperties);
newSeenProperties.addAll(addedProperties);
return newSeenProperties;
}
public MultiVariantGenerator with(PropertyDispatch<VariantMutator> newStage) {
Set<Property<?>> newSeenProperties = validateAndExpandProperties(this.seenProperties, this.block, newStage);
List<MultiVariantGenerator.Entry> newEntries = this.entries.stream().flatMap(entry -> entry.apply(newStage)).toList();
return new MultiVariantGenerator(this.block, newEntries, newSeenProperties);
}
public MultiVariantGenerator with(VariantMutator singleMutator) {
List<MultiVariantGenerator.Entry> newEntries = this.entries.stream().flatMap(entry -> entry.apply(singleMutator)).toList();
return new MultiVariantGenerator(this.block, newEntries, this.seenProperties);
}
@Override
public BlockStateModelDispatcher create() {
Map<String, BlockStateModel.Unbaked> variants = new HashMap<>();
for (MultiVariantGenerator.Entry entry : this.entries) {
variants.put(entry.properties.getKey(), entry.variant.toUnbaked());
}
return new BlockStateModelDispatcher(Optional.of(new BlockStateModelDispatcher.SimpleModelSelectors(variants)), Optional.empty());
}
@Override
public Block block() {
return this.block;
}
public static MultiVariantGenerator.Empty dispatch(Block block) {
return new MultiVariantGenerator.Empty(block);
}
public static MultiVariantGenerator dispatch(Block block, MultiVariant initialModel) {
return new MultiVariantGenerator(block, List.of(new MultiVariantGenerator.Entry(PropertyValueList.EMPTY, initialModel)), Set.of());
}
@OnlyIn(Dist.CLIENT)
public static class Empty {
private final Block block;
public Empty(Block block) {
this.block = block;
}
public MultiVariantGenerator with(PropertyDispatch<MultiVariant> newStage) {
Set<Property<?>> newSeenProperties = MultiVariantGenerator.validateAndExpandProperties(Set.of(), this.block, newStage);
List<MultiVariantGenerator.Entry> newEntries = newStage.getEntries()
.entrySet()
.stream()
.map(e -> new MultiVariantGenerator.Entry(e.getKey(), e.getValue()))
.toList();
return new MultiVariantGenerator(this.block, newEntries, newSeenProperties);
}
}
@OnlyIn(Dist.CLIENT)
private record Entry(PropertyValueList properties, MultiVariant variant) {
public Stream<MultiVariantGenerator.Entry> apply(PropertyDispatch<VariantMutator> stage) {
return stage.getEntries().entrySet().stream().map(property -> {
PropertyValueList newSelector = this.properties.extend(property.getKey());
MultiVariant newVariants = this.variant.with(property.getValue());
return new MultiVariantGenerator.Entry(newSelector, newVariants);
});
}
public Stream<MultiVariantGenerator.Entry> apply(VariantMutator mutator) {
return Stream.of(new MultiVariantGenerator.Entry(this.properties, this.variant.with(mutator)));
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用/构造调用/返回值 - 关联成员:
BlockStateModelDispatcher(), BlockStateModelDispatcher.SimpleModelSelectors(), SimpleModelSelectors()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段/返回值
- 引用位置:
-
- 引用位置:
参数/字段/返回值
- 引用位置: