Skip to content

Commit 68b01f5

Browse files
authored
Merge pull request #5320 from SiliconSaga/review/post-di-phase4
review: remove null CoreRegistry, guard null binds/providers, fix Mermaid
2 parents a84ad04 + 55e12c3 commit 68b01f5

4 files changed

Lines changed: 22 additions & 15 deletions

File tree

docs/EngineStartUp/Engine-States.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ graph TD;
2020
subgraph Loading
2121
subgraph LoadingUpdate[Update]
2222
LoadingLoadingScreenUpdate[LoadingScreen::updateStatus] --> LoadingNUIManagerUpdate[NUIManager]
23-
LoadingNUIManagerUpdate--> LoadingStepUpdate[Step Update]
24-
subgraph LoadingStepUpdate
23+
LoadingNUIManagerUpdate--> LoadingStepUpdate
24+
subgraph LoadingStepUpdate[Step Update]
2525
direction TB
2626
RegisterMods --> InitRenderingHeadlessCheck{!headless}
2727
InitRenderingHeadlessCheck -->|true| InitialiseRendering --> InitialiseEntitySystem

engine/src/main/java/org/terasology/engine/core/TerasologyEngine.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -182,13 +182,8 @@ public TerasologyEngine(TimeSubsystem timeSubsystem, Collection<EngineSubsystem>
182182
rootContextRegistry.with(CharacterStateEventPositionMap.class).lifetime(Lifetime.Singleton).use(() -> characterStateEventPositionMap);
183183
DirectionAndOriginPosRecorderList directionAndOriginPosRecorderList = new DirectionAndOriginPosRecorderList();
184184
rootContextRegistry.with(DirectionAndOriginPosRecorderList.class).lifetime(Lifetime.Singleton).use(() -> directionAndOriginPosRecorderList);
185-
/*
186-
* We can't load the engine without core registry yet.
187-
* e.g. the statically created MaterialLoader needs the CoreRegistry to get the AssetManager.
188-
* And the engine loads assets while it gets created.
189-
*/
190-
// TODO: Remove
191-
CoreRegistry.setContext(rootContext);
185+
// Clear any stale context — rootContext is set in initialize().
186+
CoreRegistry.setContext(null);
192187

193188
this.allSubsystems = Queues.newArrayDeque();
194189
configurationSubsystem = new ConfigurationSubsystem();

engine/src/main/java/org/terasology/engine/core/subsystem/config/BindsSubsystem.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -420,11 +420,11 @@ public List<Input> getInputsForBindButton(SimpleUri bindId) {
420420
}
421421
}
422422

423-
if (mouseWheelUpBind.getId().equals(bindId)) {
423+
if (mouseWheelUpBind != null && mouseWheelUpBind.getId().equals(bindId)) {
424424
inputs.add(MouseInput.WHEEL_UP);
425425
}
426426

427-
if (mouseWheelDownBind.getId().equals(bindId)) {
427+
if (mouseWheelDownBind != null && mouseWheelDownBind.getId().equals(bindId)) {
428428
inputs.add(MouseInput.WHEEL_DOWN);
429429
}
430430

engine/src/main/java/org/terasology/engine/persistence/internal/ReadWriteStorageManager.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -267,11 +267,19 @@ private void waitForCompletionOfPreviousSave() {
267267
}
268268

269269
private SaveTransaction createSaveTransaction() {
270+
ChunkProvider chunkProviderInstance = chunkProvider != null ? chunkProvider.get() : null;
271+
NetworkSystem networkSystemInstance = networkSystem != null ? networkSystem.get() : null;
272+
if (chunkProviderInstance == null) {
273+
throw new IllegalStateException("Cannot save: ChunkProvider not available");
274+
}
275+
if (networkSystemInstance == null) {
276+
throw new IllegalStateException("Cannot save: NetworkSystem not available");
277+
}
270278
SaveTransactionBuilder saveTransactionBuilder = new SaveTransactionBuilder(privateEntityManager,
271279
entitySetDeltaRecorder, isStoreChunksInZips(), getStoragePathProvider(), worldDirectoryWriteLock,
272280
recordAndReplaySerializer, recordAndReplayUtils, recordAndReplayCurrentStatus);
273-
addChunksToSaveTransaction(saveTransactionBuilder, chunkProvider.get());
274-
addPlayersToSaveTransaction(saveTransactionBuilder, networkSystem.get());
281+
addChunksToSaveTransaction(saveTransactionBuilder, chunkProviderInstance);
282+
addPlayersToSaveTransaction(saveTransactionBuilder, networkSystemInstance);
275283
addGlobalStoreBuilderToSaveTransaction(saveTransactionBuilder);
276284
addGameManifestToSaveTransaction(saveTransactionBuilder);
277285

@@ -403,9 +411,13 @@ public void update() {
403411
}
404412

405413
private boolean isRunModeAllowSaving() {
414+
if (networkSystem == null || chunkProvider == null) {
415+
return false;
416+
}
406417
NetworkSystem networkSystemInstance = networkSystem.get();
407-
return networkSystemInstance != null && networkSystemInstance.getMode().isAuthority() && chunkProvider.get() != null
408-
&& blockManager != null;
418+
ChunkProvider chunkProviderInstance = chunkProvider.get();
419+
return networkSystemInstance != null && networkSystemInstance.getMode().isAuthority()
420+
&& chunkProviderInstance != null && blockManager != null;
409421
}
410422

411423
private void startSaving() {

0 commit comments

Comments
 (0)