minecraft-src/net/minecraft/advancements/AdvancementNode.java
2025-07-04 01:41:11 +03:00

70 lines
1.6 KiB
Java

package net.minecraft.advancements;
import com.google.common.annotations.VisibleForTesting;
import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
import java.util.Set;
import org.jetbrains.annotations.Nullable;
public class AdvancementNode {
private final AdvancementHolder holder;
@Nullable
private final AdvancementNode parent;
private final Set<AdvancementNode> children = new ReferenceOpenHashSet<>();
@VisibleForTesting
public AdvancementNode(AdvancementHolder holder, @Nullable AdvancementNode parent) {
this.holder = holder;
this.parent = parent;
}
public Advancement advancement() {
return this.holder.value();
}
public AdvancementHolder holder() {
return this.holder;
}
@Nullable
public AdvancementNode parent() {
return this.parent;
}
public AdvancementNode root() {
return getRoot(this);
}
public static AdvancementNode getRoot(AdvancementNode node) {
AdvancementNode advancementNode = node;
while (true) {
AdvancementNode advancementNode2 = advancementNode.parent();
if (advancementNode2 == null) {
return advancementNode;
}
advancementNode = advancementNode2;
}
}
public Iterable<AdvancementNode> children() {
return this.children;
}
@VisibleForTesting
public void addChild(AdvancementNode child) {
this.children.add(child);
}
public boolean equals(Object object) {
return this == object ? true : object instanceof AdvancementNode advancementNode && this.holder.equals(advancementNode.holder);
}
public int hashCode() {
return this.holder.hashCode();
}
public String toString() {
return this.holder.id().toString();
}
}