73 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.server;
 | |
| 
 | |
| import com.google.common.collect.ImmutableMap;
 | |
| import com.google.common.collect.ImmutableMap.Builder;
 | |
| import com.mojang.logging.LogUtils;
 | |
| import java.util.Collection;
 | |
| import java.util.Map;
 | |
| import net.minecraft.advancements.Advancement;
 | |
| import net.minecraft.advancements.AdvancementHolder;
 | |
| import net.minecraft.advancements.AdvancementNode;
 | |
| import net.minecraft.advancements.AdvancementTree;
 | |
| import net.minecraft.advancements.TreeNodePosition;
 | |
| import net.minecraft.core.HolderLookup;
 | |
| import net.minecraft.core.registries.Registries;
 | |
| import net.minecraft.resources.ResourceLocation;
 | |
| import net.minecraft.server.packs.resources.ResourceManager;
 | |
| import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener;
 | |
| import net.minecraft.util.ProblemReporter;
 | |
| import net.minecraft.util.profiling.ProfilerFiller;
 | |
| import org.jetbrains.annotations.Nullable;
 | |
| import org.slf4j.Logger;
 | |
| 
 | |
| public class ServerAdvancementManager extends SimpleJsonResourceReloadListener<Advancement> {
 | |
| 	private static final Logger LOGGER = LogUtils.getLogger();
 | |
| 	private Map<ResourceLocation, AdvancementHolder> advancements = Map.of();
 | |
| 	private AdvancementTree tree = new AdvancementTree();
 | |
| 	private final HolderLookup.Provider registries;
 | |
| 
 | |
| 	public ServerAdvancementManager(HolderLookup.Provider registries) {
 | |
| 		super(registries, Advancement.CODEC, Registries.ADVANCEMENT);
 | |
| 		this.registries = registries;
 | |
| 	}
 | |
| 
 | |
| 	protected void apply(Map<ResourceLocation, Advancement> object, ResourceManager resourceManager, ProfilerFiller profiler) {
 | |
| 		Builder<ResourceLocation, AdvancementHolder> builder = ImmutableMap.builder();
 | |
| 		object.forEach((resourceLocation, advancement) -> {
 | |
| 			this.validate(resourceLocation, advancement);
 | |
| 			builder.put(resourceLocation, new AdvancementHolder(resourceLocation, advancement));
 | |
| 		});
 | |
| 		this.advancements = builder.buildOrThrow();
 | |
| 		AdvancementTree advancementTree = new AdvancementTree();
 | |
| 		advancementTree.addAll(this.advancements.values());
 | |
| 
 | |
| 		for (AdvancementNode advancementNode : advancementTree.roots()) {
 | |
| 			if (advancementNode.holder().value().display().isPresent()) {
 | |
| 				TreeNodePosition.run(advancementNode);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		this.tree = advancementTree;
 | |
| 	}
 | |
| 
 | |
| 	private void validate(ResourceLocation location, Advancement advancement) {
 | |
| 		ProblemReporter.Collector collector = new ProblemReporter.Collector();
 | |
| 		advancement.validate(collector, this.registries);
 | |
| 		if (!collector.isEmpty()) {
 | |
| 			LOGGER.warn("Found validation problems in advancement {}: \n{}", location, collector.getReport());
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	@Nullable
 | |
| 	public AdvancementHolder get(ResourceLocation location) {
 | |
| 		return (AdvancementHolder)this.advancements.get(location);
 | |
| 	}
 | |
| 
 | |
| 	public AdvancementTree tree() {
 | |
| 		return this.tree;
 | |
| 	}
 | |
| 
 | |
| 	public Collection<AdvancementHolder> getAllAdvancements() {
 | |
| 		return this.advancements.values();
 | |
| 	}
 | |
| }
 |