AdvancementVisibilityEvaluator.java
net.minecraft.server.advancements.AdvancementVisibilityEvaluator
信息
- 全限定名:net.minecraft.server.advancements.AdvancementVisibilityEvaluator
- 类型:public class
- 包:net.minecraft.server.advancements
- 源码路径:src/main/java/net/minecraft/server/advancements/AdvancementVisibilityEvaluator.java
- 起始行号:L11
- 职责:
TODO
字段/常量
VISIBILITY_DEPTH- 类型:
int - 修饰符:
private static final - 源码定位:
L12 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.server.advancements.AdvancementVisibilityEvaluator.Output- 类型:
interface - 修饰符:
public - 源码定位:
L73 - 说明:
TODO
- 类型:
-
net.minecraft.server.advancements.AdvancementVisibilityEvaluator.VisibilityRule- 类型:
enum - 修饰符:
private static - 源码定位:
L77 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
private static AdvancementVisibilityEvaluator.VisibilityRule evaluateVisibilityRule(Advancement advancement, boolean isDone) @ L14
- 方法名:evaluateVisibilityRule
- 源码定位:L14
- 返回类型:AdvancementVisibilityEvaluator.VisibilityRule
- 修饰符:private static
参数:
- advancement: Advancement
- isDone: boolean
说明:
TODO
private static boolean evaluateVisiblityForUnfinishedNode(Stack<AdvancementVisibilityEvaluator.VisibilityRule> ascendants) @ L25
- 方法名:evaluateVisiblityForUnfinishedNode
- 源码定位:L25
- 返回类型:boolean
- 修饰符:private static
参数:
- ascendants: Stack<AdvancementVisibilityEvaluator.VisibilityRule>
说明:
TODO
private static boolean evaluateVisibility(AdvancementNode node, Stack<AdvancementVisibilityEvaluator.VisibilityRule> ascendants, Predicate<AdvancementNode> isDoneTest, AdvancementVisibilityEvaluator.Output output) @ L40
- 方法名:evaluateVisibility
- 源码定位:L40
- 返回类型:boolean
- 修饰符:private static
参数:
- node: AdvancementNode
- ascendants: Stack<AdvancementVisibilityEvaluator.VisibilityRule>
- isDoneTest: Predicate
- output: AdvancementVisibilityEvaluator.Output
说明:
TODO
public static void evaluateVisibility(AdvancementNode node, Predicate<AdvancementNode> isDone, AdvancementVisibilityEvaluator.Output output) @ L61
- 方法名:evaluateVisibility
- 源码定位:L61
- 返回类型:void
- 修饰符:public static
参数:
- node: AdvancementNode
- isDone: Predicate
- output: AdvancementVisibilityEvaluator.Output
说明:
TODO
代码
public class AdvancementVisibilityEvaluator {
private static final int VISIBILITY_DEPTH = 2;
private static AdvancementVisibilityEvaluator.VisibilityRule evaluateVisibilityRule(Advancement advancement, boolean isDone) {
Optional<DisplayInfo> display = advancement.display();
if (display.isEmpty()) {
return AdvancementVisibilityEvaluator.VisibilityRule.HIDE;
} else if (isDone) {
return AdvancementVisibilityEvaluator.VisibilityRule.SHOW;
} else {
return display.get().isHidden() ? AdvancementVisibilityEvaluator.VisibilityRule.HIDE : AdvancementVisibilityEvaluator.VisibilityRule.NO_CHANGE;
}
}
private static boolean evaluateVisiblityForUnfinishedNode(Stack<AdvancementVisibilityEvaluator.VisibilityRule> ascendants) {
for (int i = 0; i <= 2; i++) {
AdvancementVisibilityEvaluator.VisibilityRule visibility = ascendants.peek(i);
if (visibility == AdvancementVisibilityEvaluator.VisibilityRule.SHOW) {
return true;
}
if (visibility == AdvancementVisibilityEvaluator.VisibilityRule.HIDE) {
return false;
}
}
return false;
}
private static boolean evaluateVisibility(
AdvancementNode node,
Stack<AdvancementVisibilityEvaluator.VisibilityRule> ascendants,
Predicate<AdvancementNode> isDoneTest,
AdvancementVisibilityEvaluator.Output output
) {
boolean isSelfDone = isDoneTest.test(node);
AdvancementVisibilityEvaluator.VisibilityRule descendantVisibility = evaluateVisibilityRule(node.advancement(), isSelfDone);
boolean isSelfOrDescendantDone = isSelfDone;
ascendants.push(descendantVisibility);
for (AdvancementNode child : node.children()) {
isSelfOrDescendantDone |= evaluateVisibility(child, ascendants, isDoneTest, output);
}
boolean visiblity = isSelfOrDescendantDone || evaluateVisiblityForUnfinishedNode(ascendants);
ascendants.pop();
output.accept(node, visiblity);
return isSelfOrDescendantDone;
}
public static void evaluateVisibility(AdvancementNode node, Predicate<AdvancementNode> isDone, AdvancementVisibilityEvaluator.Output output) {
AdvancementNode root = node.root();
Stack<AdvancementVisibilityEvaluator.VisibilityRule> visibilityStack = new ObjectArrayList<>();
for (int i = 0; i <= 2; i++) {
visibilityStack.push(AdvancementVisibilityEvaluator.VisibilityRule.NO_CHANGE);
}
evaluateVisibility(root, visibilityStack, isDone, output);
}
@FunctionalInterface
public interface Output {
void accept(AdvancementNode advancement, boolean visible);
}
private static enum VisibilityRule {
SHOW,
HIDE,
NO_CHANGE;
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: