98 lines
3.9 KiB
Java
98 lines
3.9 KiB
Java
package net.minecraft.server;
|
|
|
|
import com.mojang.logging.LogUtils;
|
|
import java.util.List;
|
|
import java.util.concurrent.CompletableFuture;
|
|
import java.util.concurrent.Executor;
|
|
import net.minecraft.commands.CommandBuildContext;
|
|
import net.minecraft.commands.Commands;
|
|
import net.minecraft.core.HolderLookup;
|
|
import net.minecraft.core.LayeredRegistryAccess;
|
|
import net.minecraft.core.Registry;
|
|
import net.minecraft.server.packs.resources.PreparableReloadListener;
|
|
import net.minecraft.server.packs.resources.ResourceManager;
|
|
import net.minecraft.server.packs.resources.SimpleReloadInstance;
|
|
import net.minecraft.util.Unit;
|
|
import net.minecraft.world.flag.FeatureFlagSet;
|
|
import net.minecraft.world.item.crafting.RecipeManager;
|
|
import org.slf4j.Logger;
|
|
|
|
public class ReloadableServerResources {
|
|
private static final Logger LOGGER = LogUtils.getLogger();
|
|
private static final CompletableFuture<Unit> DATA_RELOAD_INITIAL_TASK = CompletableFuture.completedFuture(Unit.INSTANCE);
|
|
private final ReloadableServerRegistries.Holder fullRegistryHolder;
|
|
private final Commands commands;
|
|
private final RecipeManager recipes;
|
|
private final ServerAdvancementManager advancements;
|
|
private final ServerFunctionLibrary functionLibrary;
|
|
private final List<Registry.PendingTags<?>> postponedTags;
|
|
|
|
private ReloadableServerResources(
|
|
LayeredRegistryAccess<RegistryLayer> p_368059_,
|
|
HolderLookup.Provider p_363207_,
|
|
FeatureFlagSet p_250695_,
|
|
Commands.CommandSelection p_206858_,
|
|
List<Registry.PendingTags<?>> p_364269_,
|
|
int p_206859_
|
|
) {
|
|
this.fullRegistryHolder = new ReloadableServerRegistries.Holder(p_368059_.compositeAccess());
|
|
this.postponedTags = p_364269_;
|
|
this.recipes = new RecipeManager(p_363207_);
|
|
this.commands = new Commands(p_206858_, CommandBuildContext.simple(p_363207_, p_250695_));
|
|
this.advancements = new ServerAdvancementManager(p_363207_);
|
|
this.functionLibrary = new ServerFunctionLibrary(p_206859_, this.commands.getDispatcher());
|
|
}
|
|
|
|
public ServerFunctionLibrary getFunctionLibrary() {
|
|
return this.functionLibrary;
|
|
}
|
|
|
|
public ReloadableServerRegistries.Holder fullRegistries() {
|
|
return this.fullRegistryHolder;
|
|
}
|
|
|
|
public RecipeManager getRecipeManager() {
|
|
return this.recipes;
|
|
}
|
|
|
|
public Commands getCommands() {
|
|
return this.commands;
|
|
}
|
|
|
|
public ServerAdvancementManager getAdvancements() {
|
|
return this.advancements;
|
|
}
|
|
|
|
public List<PreparableReloadListener> listeners() {
|
|
return List.of(this.recipes, this.functionLibrary, this.advancements);
|
|
}
|
|
|
|
public static CompletableFuture<ReloadableServerResources> loadResources(
|
|
ResourceManager p_248588_,
|
|
LayeredRegistryAccess<RegistryLayer> p_330376_,
|
|
List<Registry.PendingTags<?>> p_366334_,
|
|
FeatureFlagSet p_250212_,
|
|
Commands.CommandSelection p_249301_,
|
|
int p_251126_,
|
|
Executor p_249136_,
|
|
Executor p_249601_
|
|
) {
|
|
return ReloadableServerRegistries.reload(p_330376_, p_366334_, p_248588_, p_249136_)
|
|
.thenCompose(
|
|
p_358539_ -> {
|
|
ReloadableServerResources reloadableserverresources = new ReloadableServerResources(
|
|
p_358539_.layers(), p_358539_.lookupWithUpdatedTags(), p_250212_, p_249301_, p_366334_, p_251126_
|
|
);
|
|
return SimpleReloadInstance.create(
|
|
p_248588_, reloadableserverresources.listeners(), p_249136_, p_249601_, DATA_RELOAD_INITIAL_TASK, LOGGER.isDebugEnabled()
|
|
)
|
|
.done()
|
|
.thenApply(p_214306_ -> reloadableserverresources);
|
|
}
|
|
);
|
|
}
|
|
|
|
public void updateStaticRegistryTags() {
|
|
this.postponedTags.forEach(Registry.PendingTags::apply);
|
|
}
|
|
} |