Skip to content

Commit e624c20

Browse files
committed
no violation of cause
1 parent 3c92e3e commit e624c20

File tree

3 files changed

+22
-6
lines changed

3 files changed

+22
-6
lines changed

src/main/java/org/spongepowered/common/SpongeCommon.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,16 +103,15 @@ public static RegistryAccess.Frozen vanillaRegistryAccess() {
103103
}
104104

105105
public static SpongeRegistryHolder scopedHolder() {
106-
var holder = PhaseTracker.getInstance().currentCause().first(SpongeRegistryHolder.class);
106+
var holder = PhaseTracker.getInstance().startupRegistryHolder();
107107
// If we have a holder in scope use it directly unless it is game
108-
if (holder.isEmpty() || holder.get() == SpongeCommon.game()) {
109-
108+
if (holder == null) {
110109
if (SpongeCommon.game().isServerAvailable()) {
111110
return (SpongeRegistryHolder) SpongeCommon.server();
112111
}
113112
return SpongeCommon.game();
114113
}
115-
return holder.get();
114+
return holder;
116115
}
117116

118117
public static <E> Registry<E> vanillaRegistry(ResourceKey<? extends Registry<? extends E>> key) {

src/main/java/org/spongepowered/common/SpongeLifecycle.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,8 @@ public void beginEstablishServerRegistries(final RegistryHolder server) {
212212

213213
@Override
214214
public void processServerRegistries(final RegistryHolder server, final Stream<? extends org.spongepowered.api.registry.Registry<?>> registries) {
215-
try (var frame = PhaseTracker.getInstance().pushCauseFrame()) {
216-
frame.pushCause(server);
215+
try {
216+
PhaseTracker.getInstance().startupRegistryHolder(server);
217217
final Map<RegistryType<?>, org.spongepowered.api.registry.Registry<?>> map =
218218
registries.collect(Collectors.toMap(org.spongepowered.api.registry.Registry::type, Function.identity()));
219219
if (!map.isEmpty()) {
@@ -222,6 +222,8 @@ public void processServerRegistries(final RegistryHolder server, final Stream<?
222222
map.values().forEach(r -> ((WritableRegistryBridge<?>) r).bridge$markEventCalled());
223223
((SpongeRegistryHolder) server).registryHolder().freezeSpongeDynamicRegistries(false);
224224
}
225+
} finally {
226+
PhaseTracker.getInstance().startupRegistryHolder(null);
225227
}
226228
}
227229

src/main/java/org/spongepowered/common/event/tracking/PhaseTracker.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.spongepowered.api.event.EventContext;
5050
import org.spongepowered.api.event.EventContextKey;
5151
import org.spongepowered.api.event.EventContextKeys;
52+
import org.spongepowered.api.registry.RegistryHolder;
5253
import org.spongepowered.api.scheduler.Task;
5354
import org.spongepowered.api.util.Ticks;
5455
import org.spongepowered.common.SpongeCommon;
@@ -59,6 +60,7 @@
5960
import org.spongepowered.common.event.tracking.phase.plugin.PluginPhase;
6061
import org.spongepowered.common.event.tracking.phase.tick.TickPhase;
6162
import org.spongepowered.common.launch.Launch;
63+
import org.spongepowered.common.registry.SpongeRegistryHolder;
6264
import org.spongepowered.common.util.Constants;
6365
import org.spongepowered.common.util.Preconditions;
6466
import org.spongepowered.common.util.PrettyPrinter;
@@ -259,6 +261,7 @@ public static Block validateBlockForNeighborNotification(final ServerLevel world
259261
private final Deque<PhaseContext<?>> phaseContextProviders = new ArrayDeque<>();
260262
final PhaseStack stack = new PhaseStack();
261263
private final SpongeCauseStackManager api = new SpongeCauseStackManager();
264+
private @Nullable SpongeRegistryHolder startupRegistryHolder;
262265

263266
PhaseTracker() {
264267
for (int i = 0; i < PhaseTracker.INITIAL_POOL_SIZE; i++) {
@@ -868,6 +871,18 @@ public CauseStackManager apiAccess() {
868871
return this.api;
869872
}
870873

874+
public void startupRegistryHolder(final RegistryHolder holder) {
875+
if (holder instanceof SpongeRegistryHolder srh) {
876+
this.startupRegistryHolder = srh;
877+
} else {
878+
this.startupRegistryHolder = null;
879+
}
880+
}
881+
882+
public @Nullable SpongeRegistryHolder startupRegistryHolder() {
883+
return this.startupRegistryHolder;
884+
}
885+
871886
/**
872887
* We insert implicit phases for plugin created frames.
873888
*/

0 commit comments

Comments
 (0)