70 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			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();
 | |
| 	}
 | |
| }
 |