AdvancementRequirements.java
net.minecraft.advancements.AdvancementRequirements
信息
- 全限定名:net.minecraft.advancements.AdvancementRequirements
- 类型:public record
- 包:net.minecraft.advancements
- 源码路径:src/main/java/net/minecraft/advancements/AdvancementRequirements.java
- 起始行号:L13
- 职责:
TODO
字段/常量
-
CODEC- 类型:
Codec<AdvancementRequirements> - 修饰符:
public static final - 源码定位:
L14 - 说明:
TODO
- 类型:
-
EMPTY- 类型:
AdvancementRequirements - 修饰符:
public static final - 源码定位:
L18 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.advancements.AdvancementRequirements.Strategy- 类型:
interface - 修饰符:
public - 源码定位:
L120 - 说明:
TODO
- 类型:
构造器
public AdvancementRequirements(FriendlyByteBuf input) @ L20
- 构造器名:AdvancementRequirements
- 源码定位:L20
- 修饰符:public
参数:
- input: FriendlyByteBuf
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void write(FriendlyByteBuf output) @ L24
- 方法名:write
- 源码定位:L24
- 返回类型:void
- 修饰符:public
参数:
- output: FriendlyByteBuf
说明:
TODO
public static AdvancementRequirements allOf(Collection<String> criteria) @ L28
- 方法名:allOf
- 源码定位:L28
- 返回类型:AdvancementRequirements
- 修饰符:public static
参数:
- criteria: Collection
说明:
TODO
public static AdvancementRequirements anyOf(Collection<String> criteria) @ L32
- 方法名:anyOf
- 源码定位:L32
- 返回类型:AdvancementRequirements
- 修饰符:public static
参数:
- criteria: Collection
说明:
TODO
public int size() @ L36
- 方法名:size
- 源码定位:L36
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean test(Predicate<String> predicate) @ L40
- 方法名:test
- 源码定位:L40
- 返回类型:boolean
- 修饰符:public
参数:
- predicate: Predicate
说明:
TODO
public int count(Predicate<String> predicate) @ L54
- 方法名:count
- 源码定位:L54
- 返回类型:int
- 修饰符:public
参数:
- predicate: Predicate
说明:
TODO
private static boolean anyMatch(List<String> criteria, Predicate<String> predicate) @ L66
- 方法名:anyMatch
- 源码定位:L66
- 返回类型:boolean
- 修饰符:private static
参数:
- criteria: List
- predicate: Predicate
说明:
TODO
public DataResult<AdvancementRequirements> validate(Set<String> expectedCriteria) @ L76
- 方法名:validate
- 源码定位:L76
- 返回类型:DataResult
- 修饰符:public
参数:
- expectedCriteria: Set
说明:
TODO
public boolean isEmpty() @ L101
- 方法名:isEmpty
- 源码定位:L101
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public String toString() @ L105
- 方法名:toString
- 源码定位:L105
- 返回类型:String
- 修饰符:public
参数:
- 无
说明:
TODO
public Set<String> names() @ L110
- 方法名:names
- 源码定位:L110
- 返回类型:Set
- 修饰符:public
参数:
- 无
说明:
TODO
代码
public record AdvancementRequirements(List<List<String>> requirements) {
public static final Codec<AdvancementRequirements> CODEC = Codec.STRING
.listOf()
.listOf()
.xmap(AdvancementRequirements::new, AdvancementRequirements::requirements);
public static final AdvancementRequirements EMPTY = new AdvancementRequirements(List.of());
public AdvancementRequirements(FriendlyByteBuf input) {
this(input.readList(in -> in.readList(FriendlyByteBuf::readUtf)));
}
public void write(FriendlyByteBuf output) {
output.writeCollection(this.requirements, (out, set) -> out.writeCollection(set, FriendlyByteBuf::writeUtf));
}
public static AdvancementRequirements allOf(Collection<String> criteria) {
return new AdvancementRequirements(criteria.stream().map(List::of).toList());
}
public static AdvancementRequirements anyOf(Collection<String> criteria) {
return new AdvancementRequirements(List.of(List.copyOf(criteria)));
}
public int size() {
return this.requirements.size();
}
public boolean test(Predicate<String> predicate) {
if (this.requirements.isEmpty()) {
return false;
} else {
for (List<String> set : this.requirements) {
if (!anyMatch(set, predicate)) {
return false;
}
}
return true;
}
}
public int count(Predicate<String> predicate) {
int count = 0;
for (List<String> set : this.requirements) {
if (anyMatch(set, predicate)) {
count++;
}
}
return count;
}
private static boolean anyMatch(List<String> criteria, Predicate<String> predicate) {
for (String criterion : criteria) {
if (predicate.test(criterion)) {
return true;
}
}
return false;
}
public DataResult<AdvancementRequirements> validate(Set<String> expectedCriteria) {
Set<String> referencedCriteria = new ObjectOpenHashSet<>();
for (List<String> set : this.requirements) {
if (set.isEmpty() && expectedCriteria.isEmpty()) {
return DataResult.error(() -> "Requirement entry cannot be empty");
}
referencedCriteria.addAll(set);
}
if (!expectedCriteria.equals(referencedCriteria)) {
Set<String> missingCriteria = Sets.difference(expectedCriteria, referencedCriteria);
Set<String> unknownCriteria = Sets.difference(referencedCriteria, expectedCriteria);
return DataResult.error(
() -> "Advancement completion requirements did not exactly match specified criteria. Missing: "
+ missingCriteria
+ ". Unknown: "
+ unknownCriteria
);
} else {
return DataResult.success(this);
}
}
public boolean isEmpty() {
return this.requirements.isEmpty();
}
@Override
public String toString() {
return this.requirements.toString();
}
public Set<String> names() {
Set<String> names = new ObjectOpenHashSet<>();
for (List<String> set : this.requirements) {
names.addAll(set);
}
return names;
}
public interface Strategy {
AdvancementRequirements.Strategy AND = AdvancementRequirements::allOf;
AdvancementRequirements.Strategy OR = AdvancementRequirements::anyOf;
AdvancementRequirements create(Collection<String> criteria);
}
}引用的其他类
- FriendlyByteBuf
- 引用位置:
参数
- 引用位置: