AdvancementTree.java
net.minecraft.advancements.AdvancementTree
信息
- 全限定名:net.minecraft.advancements.AdvancementTree
- 类型:public class
- 包:net.minecraft.advancements
- 源码路径:src/main/java/net/minecraft/advancements/AdvancementTree.java
- 起始行号:L16
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L17 - 说明:
TODO
- 类型:
-
nodes- 类型:
Map<Identifier,AdvancementNode> - 修饰符:
private final - 源码定位:
L18 - 说明:
TODO
- 类型:
-
roots- 类型:
Set<AdvancementNode> - 修饰符:
private final - 源码定位:
L19 - 说明:
TODO
- 类型:
-
tasks- 类型:
Set<AdvancementNode> - 修饰符:
private final - 源码定位:
L20 - 说明:
TODO
- 类型:
-
listener- 类型:
AdvancementTree.Listener - 修饰符:
private - 源码定位:
L21 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.advancements.AdvancementTree.Listener- 类型:
interface - 修饰符:
public - 源码定位:
L133 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
private void remove(AdvancementNode node) @ L23
- 方法名:remove
- 源码定位:L23
- 返回类型:void
- 修饰符:private
参数:
- node: AdvancementNode
说明:
TODO
public void remove(Set<Identifier> ids) @ L43
- 方法名:remove
- 源码定位:L43
- 返回类型:void
- 修饰符:public
参数:
- ids: Set
说明:
TODO
public void addAll(Collection<AdvancementHolder> advancements) @ L54
- 方法名:addAll
- 源码定位:L54
- 返回类型:void
- 修饰符:public
参数:
- advancements: Collection
说明:
TODO
private boolean tryInsert(AdvancementHolder holder) @ L67
- 方法名:tryInsert
- 源码定位:L67
- 返回类型:boolean
- 修饰符:private
参数:
- holder: AdvancementHolder
说明:
TODO
public void clear() @ L95
- 方法名:clear
- 源码定位:L95
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public Iterable<AdvancementNode> roots() @ L104
- 方法名:roots
- 源码定位:L104
- 返回类型:Iterable
- 修饰符:public
参数:
- 无
说明:
TODO
public Collection<AdvancementNode> nodes() @ L108
- 方法名:nodes
- 源码定位:L108
- 返回类型:Collection
- 修饰符:public
参数:
- 无
说明:
TODO
public AdvancementNode get(Identifier id) @ L112
- 方法名:get
- 源码定位:L112
- 返回类型:AdvancementNode
- 修饰符:public
参数:
- id: Identifier
说明:
TODO
public AdvancementNode get(AdvancementHolder advancement) @ L116
- 方法名:get
- 源码定位:L116
- 返回类型:AdvancementNode
- 修饰符:public
参数:
- advancement: AdvancementHolder
说明:
TODO
public void setListener(AdvancementTree.Listener listener) @ L120
- 方法名:setListener
- 源码定位:L120
- 返回类型:void
- 修饰符:public
参数:
- listener: AdvancementTree.Listener
说明:
TODO
代码
public class AdvancementTree {
private static final Logger LOGGER = LogUtils.getLogger();
private final Map<Identifier, AdvancementNode> nodes = new Object2ObjectOpenHashMap<>();
private final Set<AdvancementNode> roots = new ObjectLinkedOpenHashSet<>();
private final Set<AdvancementNode> tasks = new ObjectLinkedOpenHashSet<>();
private AdvancementTree.@Nullable Listener listener;
private void remove(AdvancementNode node) {
for (AdvancementNode child : node.children()) {
this.remove(child);
}
LOGGER.info("Forgot about advancement {}", node.holder());
this.nodes.remove(node.holder().id());
if (node.parent() == null) {
this.roots.remove(node);
if (this.listener != null) {
this.listener.onRemoveAdvancementRoot(node);
}
} else {
this.tasks.remove(node);
if (this.listener != null) {
this.listener.onRemoveAdvancementTask(node);
}
}
}
public void remove(Set<Identifier> ids) {
for (Identifier id : ids) {
AdvancementNode advancement = this.nodes.get(id);
if (advancement == null) {
LOGGER.warn("Told to remove advancement {} but I don't know what that is", id);
} else {
this.remove(advancement);
}
}
}
public void addAll(Collection<AdvancementHolder> advancements) {
List<AdvancementHolder> advancementsToAdd = new ArrayList<>(advancements);
while (!advancementsToAdd.isEmpty()) {
if (!advancementsToAdd.removeIf(this::tryInsert)) {
LOGGER.error("Couldn't load advancements: {}", advancementsToAdd);
break;
}
}
LOGGER.info("Loaded {} advancements", this.nodes.size());
}
private boolean tryInsert(AdvancementHolder holder) {
Optional<Identifier> parentId = holder.value().parent();
AdvancementNode parentNode = parentId.map(this.nodes::get).orElse(null);
if (parentNode == null && parentId.isPresent()) {
return false;
} else {
AdvancementNode node = new AdvancementNode(holder, parentNode);
if (parentNode != null) {
parentNode.addChild(node);
}
this.nodes.put(holder.id(), node);
if (parentNode == null) {
this.roots.add(node);
if (this.listener != null) {
this.listener.onAddAdvancementRoot(node);
}
} else {
this.tasks.add(node);
if (this.listener != null) {
this.listener.onAddAdvancementTask(node);
}
}
return true;
}
}
public void clear() {
this.nodes.clear();
this.roots.clear();
this.tasks.clear();
if (this.listener != null) {
this.listener.onAdvancementsCleared();
}
}
public Iterable<AdvancementNode> roots() {
return this.roots;
}
public Collection<AdvancementNode> nodes() {
return this.nodes.values();
}
public @Nullable AdvancementNode get(Identifier id) {
return this.nodes.get(id);
}
public @Nullable AdvancementNode get(AdvancementHolder advancement) {
return this.nodes.get(advancement.id());
}
public void setListener(AdvancementTree.@Nullable Listener listener) {
this.listener = listener;
if (listener != null) {
for (AdvancementNode root : this.roots) {
listener.onAddAdvancementRoot(root);
}
for (AdvancementNode task : this.tasks) {
listener.onAddAdvancementTask(task);
}
}
}
public interface Listener {
void onAddAdvancementRoot(AdvancementNode root);
void onRemoveAdvancementRoot(AdvancementNode root);
void onAddAdvancementTask(AdvancementNode task);
void onRemoveAdvancementTask(AdvancementNode task);
void onAdvancementsCleared();
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段/构造调用/返回值 - 关联成员:
AdvancementNode()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置: