From 7b833faa46498df01724d608c6a06cbc1f5e3918 Mon Sep 17 00:00:00 2001 From: Gegy Date: Thu, 6 Jul 2023 00:00:12 +0200 Subject: [PATCH] Expose loaded RegistryAccess through AddReloadListenerEvent (#9613) --- .../server/ReloadableServerResources.java.patch | 2 +- .../event/AddReloadListenerEvent.java | 15 ++++++++++++++- .../minecraftforge/event/ForgeEventFactory.java | 5 +++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/patches/minecraft/net/minecraft/server/ReloadableServerResources.java.patch b/patches/minecraft/net/minecraft/server/ReloadableServerResources.java.patch index 0d62816ad6..f268742df4 100644 --- a/patches/minecraft/net/minecraft/server/ReloadableServerResources.java.patch +++ b/patches/minecraft/net/minecraft/server/ReloadableServerResources.java.patch @@ -30,7 +30,7 @@ ReloadableServerResources reloadableserverresources = new ReloadableServerResources(p_251163_, p_250212_, p_249301_, p_251126_); - return SimpleReloadInstance.m_203834_(p_248588_, reloadableserverresources.m_206890_(), p_249136_, p_249601_, f_206846_, f_206845_.isDebugEnabled()).m_7237_().whenComplete((p_255534_, p_255535_) -> { + List listeners = new java.util.ArrayList<>(reloadableserverresources.m_206890_()); -+ listeners.addAll(net.minecraftforge.event.ForgeEventFactory.onResourceReload(reloadableserverresources)); ++ listeners.addAll(net.minecraftforge.event.ForgeEventFactory.onResourceReload(reloadableserverresources, p_251163_)); + return SimpleReloadInstance.m_203834_(p_248588_, listeners, p_249136_, p_249601_, f_206846_, f_206845_.isDebugEnabled()).m_7237_().whenComplete((p_214309_, p_214310_) -> { reloadableserverresources.f_214300_.m_254905_(CommandBuildContext.MissingTagAccessPolicy.FAIL); }).thenApply((p_214306_) -> { diff --git a/src/main/java/net/minecraftforge/event/AddReloadListenerEvent.java b/src/main/java/net/minecraftforge/event/AddReloadListenerEvent.java index 2acb1d882a..84e9f2bb85 100644 --- a/src/main/java/net/minecraftforge/event/AddReloadListenerEvent.java +++ b/src/main/java/net/minecraftforge/event/AddReloadListenerEvent.java @@ -6,6 +6,7 @@ package net.minecraftforge.event; import com.google.common.collect.ImmutableList; +import net.minecraft.core.RegistryAccess; import net.minecraft.server.ReloadableServerResources; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.server.packs.resources.PreparableReloadListener; @@ -30,10 +31,12 @@ public class AddReloadListenerEvent extends Event { private final List listeners = new ArrayList<>(); private final ReloadableServerResources serverResources; + private final RegistryAccess registryAccess; - public AddReloadListenerEvent(ReloadableServerResources serverResources) + public AddReloadListenerEvent(ReloadableServerResources serverResources, RegistryAccess registryAccess) { this.serverResources = serverResources; + this.registryAccess = registryAccess; } /** @@ -66,6 +69,16 @@ public class AddReloadListenerEvent extends Event return serverResources.getConditionContext(); } + /** + * Provides access to the loaded registries associated with these server resources. + * All built-in and dynamic registries are loaded and frozen by this point. + * @return The RegistryAccess context for the currently active reload. + */ + public RegistryAccess getRegistryAccess() + { + return registryAccess; + } + private static class WrappedStateAwareListener implements PreparableReloadListener { private final PreparableReloadListener wrapped; diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 6b02d7fbd3..f051e669b4 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -18,6 +18,7 @@ import net.minecraft.advancements.Advancement; import net.minecraft.advancements.AdvancementProgress; import net.minecraft.commands.CommandBuildContext; import net.minecraft.core.Holder; +import net.minecraft.core.RegistryAccess; import net.minecraft.server.MinecraftServer; import net.minecraft.server.ReloadableServerResources; import net.minecraft.server.level.ChunkHolder; @@ -758,9 +759,9 @@ public class ForgeEventFactory return event.getNewTime(); } - public static List onResourceReload(ReloadableServerResources serverResources) + public static List onResourceReload(ReloadableServerResources serverResources, RegistryAccess registryAccess) { - AddReloadListenerEvent event = new AddReloadListenerEvent(serverResources); + AddReloadListenerEvent event = new AddReloadListenerEvent(serverResources, registryAccess); MinecraftForge.EVENT_BUS.post(event); return event.getListeners(); }