diff --git a/engine/src/main/java/org/terasology/engine/core/modes/loadProcesses/InitialiseRemoteWorld.java b/engine/src/main/java/org/terasology/engine/core/modes/loadProcesses/InitialiseRemoteWorld.java index 0388c963375..f40e914e3cc 100644 --- a/engine/src/main/java/org/terasology/engine/core/modes/loadProcesses/InitialiseRemoteWorld.java +++ b/engine/src/main/java/org/terasology/engine/core/modes/loadProcesses/InitialiseRemoteWorld.java @@ -9,7 +9,7 @@ import org.terasology.engine.core.TerasologyConstants; import org.terasology.engine.core.modes.SingleStepLoadProcess; import org.terasology.engine.core.subsystem.RenderingSubsystemFactory; -import org.terasology.engine.entitySystem.entity.EntityManager; +import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.game.GameManifest; import org.terasology.engine.logic.players.LocalPlayer; import org.terasology.engine.recording.DirectionAndOriginPosRecorderList; @@ -91,7 +91,7 @@ public static final class WorldProviderCoreWorkAround extends EntityAwareWorldPr implements WorldProviderCore, BlockEntityRegistry { @Inject public WorldProviderCoreWorkAround(WorldInfo info, ChunkProvider chunkProvider, BlockManager blockManager, - EntityManager entityManager, ComponentSystemManager componentSystemManager) { + EngineEntityManager entityManager, ComponentSystemManager componentSystemManager) { super(new WorldProviderCoreImpl(info, chunkProvider, blockManager, entityManager), entityManager, componentSystemManager); } } diff --git a/engine/src/main/java/org/terasology/engine/core/modes/loadProcesses/InitialiseWorld.java b/engine/src/main/java/org/terasology/engine/core/modes/loadProcesses/InitialiseWorld.java index 112dd9e3f45..1e874ccc671 100644 --- a/engine/src/main/java/org/terasology/engine/core/modes/loadProcesses/InitialiseWorld.java +++ b/engine/src/main/java/org/terasology/engine/core/modes/loadProcesses/InitialiseWorld.java @@ -15,7 +15,7 @@ import org.terasology.engine.core.modes.SingleStepLoadProcess; import org.terasology.engine.core.modes.StateMainMenu; import org.terasology.engine.core.subsystem.RenderingSubsystemFactory; -import org.terasology.engine.entitySystem.entity.EntityManager; +import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.game.GameManifest; import org.terasology.engine.logic.players.LocalPlayer; import org.terasology.engine.persistence.StorageManager; @@ -160,7 +160,7 @@ public static final class WorldProviderCoreWorkAround extends EntityAwareWorldPr implements WorldProviderCore, BlockEntityRegistry { @Inject public WorldProviderCoreWorkAround(WorldInfo info, ChunkProvider chunkProvider, BlockManager blockManager, - EntityManager entityManager, ComponentSystemManager componentSystemManager) { + EngineEntityManager entityManager, ComponentSystemManager componentSystemManager) { super(new WorldProviderCoreImpl(info, chunkProvider, blockManager, entityManager), entityManager, componentSystemManager); } } diff --git a/engine/src/main/java/org/terasology/engine/core/subsystem/EngineSubsystem.java b/engine/src/main/java/org/terasology/engine/core/subsystem/EngineSubsystem.java index a19713777a4..65c79e00590 100644 --- a/engine/src/main/java/org/terasology/engine/core/subsystem/EngineSubsystem.java +++ b/engine/src/main/java/org/terasology/engine/core/subsystem/EngineSubsystem.java @@ -20,19 +20,19 @@ public interface EngineSubsystem { /** * Called on each system before initialisation. - * This is an opportunity to add anything into the root context that will carry across the entire run of the engine, - * and may be used by other systems. + * This is an opportunity to register services that will be available from the root context + * for the entire run of the engine, and may be used by other systems. * - * @param serviceRegistry the service registry used to create the root context that will carry across the entire run of the engine. + * @param serviceRegistry The service registry used to build the root context for the entire run of the engine */ default void preInitialise(ServiceRegistry serviceRegistry) { } /** - * Called to initialise the system + * Called to initialise the system. * - * @param engine The game engine - * @param serviceRegistry The service registry used to create the context that will carry across the entire run of the engine. + * @param engine The game engine + * @param serviceRegistry The service registry used to build the context for the entire run of the engine */ default void initialise(GameEngine engine, ServiceRegistry serviceRegistry) { } diff --git a/engine/src/main/java/org/terasology/engine/persistence/typeHandling/TypeHandlerLibraryImpl.java b/engine/src/main/java/org/terasology/engine/persistence/typeHandling/TypeHandlerLibraryImpl.java index 0cbfabed82a..8ac14237b24 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/typeHandling/TypeHandlerLibraryImpl.java +++ b/engine/src/main/java/org/terasology/engine/persistence/typeHandling/TypeHandlerLibraryImpl.java @@ -111,11 +111,8 @@ public static TypeHandlerLibrary withReflections(Reflections reflections) { } public static TypeHandlerLibrary forModuleEnvironment(ModuleManager moduleManager, TypeRegistry typeRegistry) { - TypeHandlerLibrary library = new TypeHandlerLibraryImpl(moduleManager, typeRegistry); - - populateWithDefaultHandlers(library); - - return library; + // The @Inject constructor already calls populateWithDefaultHandlers + return new TypeHandlerLibraryImpl(moduleManager, typeRegistry); } private static void populateWithDefaultHandlers(TypeHandlerLibrary serializationLibrary) { diff --git a/engine/src/main/java/org/terasology/engine/world/internal/EntityAwareWorldProvider.java b/engine/src/main/java/org/terasology/engine/world/internal/EntityAwareWorldProvider.java index cee1299afa7..1827f6738d9 100644 --- a/engine/src/main/java/org/terasology/engine/world/internal/EntityAwareWorldProvider.java +++ b/engine/src/main/java/org/terasology/engine/world/internal/EntityAwareWorldProvider.java @@ -77,9 +77,9 @@ public EntityAwareWorldProvider(WorldProviderCore base, Context context) { } @Inject - public EntityAwareWorldProvider(WorldProviderCore base, EntityManager entityManager, ComponentSystemManager componentSystemManager) { + public EntityAwareWorldProvider(WorldProviderCore base, EngineEntityManager entityManager, ComponentSystemManager componentSystemManager) { super(base); - this.entityManager = (EngineEntityManager) entityManager; + this.entityManager = entityManager; componentSystemManager.register(getTime()); } diff --git a/subsystems/TypeHandlerLibrary/src/main/java/org/terasology/persistence/typeHandling/coreTypes/ObjectFieldMapTypeHandler.java b/subsystems/TypeHandlerLibrary/src/main/java/org/terasology/persistence/typeHandling/coreTypes/ObjectFieldMapTypeHandler.java index bedef481a13..80877c13a46 100644 --- a/subsystems/TypeHandlerLibrary/src/main/java/org/terasology/persistence/typeHandling/coreTypes/ObjectFieldMapTypeHandler.java +++ b/subsystems/TypeHandlerLibrary/src/main/java/org/terasology/persistence/typeHandling/coreTypes/ObjectFieldMapTypeHandler.java @@ -119,10 +119,15 @@ public Optional deserialize(PersistedData data) { if (fieldValue.isPresent()) { if (Modifier.isPrivate(field.getModifiers())) { - try { - ReflectionUtil.findSetter(field).invoke(result); - } catch (InvocationTargetException e) { - logger.error("Failed to invoke setter for field {}", field); + Method setter = ReflectionUtil.findSetter(field); + if (setter != null) { + try { + setter.invoke(result, fieldValue.get()); + } catch (InvocationTargetException e) { + logger.error("Failed to invoke setter for field {}", field); + } + } else { + logger.error("Field {} is inaccessible - private and has no setter.", field); } } else { field.set(result, fieldValue.get());