33import dev .compactmods .machines .api .dimension .CompactDimension ;
44import dev .compactmods .machines .api .dimension .MissingDimensionException ;
55import dev .compactmods .machines .api .room .CompactRoomGenerator ;
6- import dev .compactmods .machines .api .room .IRoomApi ;
76import dev .compactmods .machines .api .room .RoomInstance ;
7+ import dev .compactmods .machines .api .room .registration .IRoomRegistrar ;
8+ import dev .compactmods .machines .api .room .spatial .IRoomChunkManager ;
9+ import dev .compactmods .machines .api .room .spatial .IRoomChunks ;
10+ import dev .compactmods .machines .api .room .spawn .IRoomSpawnManagers ;
811import dev .compactmods .machines .api .room .template .RoomTemplate ;
912import dev .compactmods .machines .api .room .data .IRoomDataAttachmentAccessor ;
1013import dev .compactmods .machines .api .room .history .IPlayerHistoryApi ;
1114import dev .compactmods .machines .api .room .upgrade .IRoomUpgradeAccessor ;
12- import dev .compactmods .machines .api .room .upgrade .RoomUpgradeType ;
15+ import dev .compactmods .machines .api .room .upgrade .IRoomUpgradeManager ;
16+ import dev .compactmods .machines .api .room .upgrade .RoomUpgradeComponentType ;
1317import dev .compactmods .machines .api .room .upgrade .data .IRoomUpgradeDataAttachmentAccessor ;
18+ import dev .compactmods .machines .api .server .service .RoomChunkManagerProvider ;
19+ import dev .compactmods .machines .api .server .service .RoomRegistrarProvider ;
20+ import dev .compactmods .machines .api .server .ServerServiceProvider ;
21+ import dev .compactmods .machines .api .server .service .RoomSpawnManagersProvider ;
1422import dev .compactmods .machines .api .util .BlockSpaceUtil ;
1523import net .minecraft .core .Direction ;
1624import net .minecraft .resources .ResourceLocation ;
2331import org .apache .logging .log4j .LogManager ;
2432import org .apache .logging .log4j .Logger ;
2533import org .jetbrains .annotations .ApiStatus ;
26- import org .jetbrains .annotations .Nullable ;
2734
2835import java .util .Optional ;
2936import java .util .ServiceLoader ;
@@ -36,7 +43,7 @@ public class CompactMachines {
3643
3744 //region API Cache - NO TOUCHY - This class gives access to these services, or you can service locate them yourself!
3845 @ ApiStatus .Internal
39- private static IRoomApi ROOM_API ;
46+ private static IRoomRegistrar ROOM_REGISTRAR ;
4047
4148 @ ApiStatus .Internal
4249 private static IRoomDataAttachmentAccessor ROOM_DATA_ACCESSOR ;
@@ -45,31 +52,46 @@ public class CompactMachines {
4552 private static IPlayerHistoryApi PLAYER_HISTORY_API ;
4653
4754 @ ApiStatus .Internal
48- private static IRoomUpgradeAccessor UPGRADE_ACCESSOR ;
55+ private static IRoomSpawnManagers SPAWN_MANAGERS ;
56+
57+ @ ApiStatus .Internal
58+ private static IRoomUpgradeManager UPGRADE_MANAGER ;
4959
5060 @ ApiStatus .Internal
5161 private static IRoomUpgradeDataAttachmentAccessor ROOM_UPGRADE_DATA_ACCESSOR ;
62+
63+ @ ApiStatus .Internal
64+ private static IRoomChunkManager CHUNK_MANAGER ;
5265 //endregion
5366
5467 /**
5568 * Reloads the references to the services this class uses.
5669 * Typically called after a new server fires its starting event; API consumers SHOULD NOT need
5770 * to call this!
5871 */
59- public static void reloadServices () {
60- reloadServices ("dev.compactmods.machines" );
72+ public static void reloadServices (MinecraftServer server ) {
73+ reloadServices ("dev.compactmods.machines" , server );
6174 }
6275
63- public static void reloadServices (String prefix ) {
76+ public static void reloadServices (String prefix , MinecraftServer server ) {
6477 logger .debug ("Reloading Compact services..." );
65- ROOM_API = cmService (IRoomApi .class , prefix );
78+ ROOM_REGISTRAR = serverProvidedService (IRoomRegistrar .class , RoomRegistrarProvider .class , prefix , server );
79+ CHUNK_MANAGER = serverProvidedService (IRoomChunkManager .class , RoomChunkManagerProvider .class , prefix , server );
80+ SPAWN_MANAGERS = serverProvidedService (IRoomSpawnManagers .class , RoomSpawnManagersProvider .class , prefix , server );
81+
6682 ROOM_DATA_ACCESSOR = cmService (IRoomDataAttachmentAccessor .class , prefix );
6783 PLAYER_HISTORY_API = cmService (IPlayerHistoryApi .class , prefix );
68- UPGRADE_ACCESSOR = cmService (IRoomUpgradeAccessor .class , prefix );
84+ UPGRADE_MANAGER = cmService (IRoomUpgradeManager .class , prefix );
6985 ROOM_UPGRADE_DATA_ACCESSOR = cmService (IRoomUpgradeDataAttachmentAccessor .class , prefix );
7086 logger .debug ("Compact services loaded." );
7187 }
7288
89+ private static <T , TP extends ServerServiceProvider <T >> T serverProvidedService (Class <T > ignored , Class <TP > providerClass , String packagePrefix , MinecraftServer server ) {
90+ final var registrarProvider = cmService (providerClass , packagePrefix );
91+ if (registrarProvider == null ) return null ;
92+ return registrarProvider .makeServiceInstance (server );
93+ }
94+
7395 /**
7496 * Uses service locator to try and find the implementations housed in the main mod JAR.
7597 * No touchy; we expose the desired services via locator and methods here.
@@ -104,20 +126,16 @@ public static ResourceLocation modRL(String path) {
104126 return ResourceLocation .fromNamespaceAndPath (MOD_ID , path );
105127 }
106128
107- public static DeferredRegister <RoomUpgradeType <?>> roomUpgradeDR (String namespace ) {
108- return DeferredRegister .create (RoomUpgradeType .REGISTRY_KEY , namespace );
109- }
110-
111- public static IRoomApi roomApi () {
112- return ROOM_API ;
129+ public static DeferredRegister <RoomUpgradeComponentType <?>> roomUpgradeDR (String namespace ) {
130+ return DeferredRegister .create (RoomUpgradeComponentType .REGISTRY_KEY , namespace );
113131 }
114132
115133 public static IPlayerHistoryApi playerHistoryApi () {
116134 return PLAYER_HISTORY_API ;
117135 }
118136
119137 public static Optional <RoomInstance > room (String roomCode ) {
120- return ROOM_API . registrar () .get (roomCode );
138+ return ROOM_REGISTRAR .get (roomCode );
121139 }
122140
123141 /**
@@ -129,7 +147,7 @@ public static Optional<RoomInstance> room(String roomCode) {
129147 * @return
130148 */
131149 public static RoomInstance newRoom (MinecraftServer server , RoomTemplate template , UUID owner ) throws MissingDimensionException {
132- final var instance = ROOM_API . registrar () .createNew (template , owner );
150+ final var instance = ROOM_REGISTRAR .createNew (template , owner );
133151 final var compactDim = CompactDimension .forServer (server );
134152 CompactRoomGenerator .generateRoom (compactDim , instance .boundaries ().outerBounds ());
135153
@@ -139,7 +157,7 @@ public static RoomInstance newRoom(MinecraftServer server, RoomTemplate template
139157 }
140158 }
141159
142- final var spawnManager = ROOM_API . spawnManager (instance .code ());
160+ final var spawnManager = SPAWN_MANAGERS . get (instance .code ());
143161 template .optionalFloor ().ifPresent (floorState -> {
144162 var fixedSpawn = instance .boundaries ()
145163 .defaultSpawn ()
@@ -156,10 +174,6 @@ public static RoomInstance newRoom(MinecraftServer server, RoomTemplate template
156174 return instance ;
157175 }
158176
159- public static boolean isValidRoomCode (String roomCode ) {
160- return ROOM_API .roomCodeValidator ().test (roomCode );
161- }
162-
163177 public static Optional <? extends IAttachmentHolder > existingRoomData (String code ) {
164178 return ROOM_DATA_ACCESSOR .get (code );
165179 }
@@ -172,8 +186,8 @@ public static IAttachmentHolder roomData(String code) {
172186 return ROOM_DATA_ACCESSOR .getOrCreate (code );
173187 }
174188
175- public static IRoomUpgradeAccessor upgradeAccessor () {
176- return UPGRADE_ACCESSOR ;
189+ public static IRoomUpgradeAccessor upgradeAccessor (RoomInstance instance ) {
190+ return UPGRADE_MANAGER . upgradeAccessor ( instance ) ;
177191 }
178192
179193 public static IRoomUpgradeDataAttachmentAccessor upgradeDataAccessor () {
@@ -183,4 +197,24 @@ public static IRoomUpgradeDataAttachmentAccessor upgradeDataAccessor() {
183197 public static IAttachmentHolder roomUpgradeData (String roomCode , UUID upgradeId ) {
184198 return ROOM_UPGRADE_DATA_ACCESSOR .getOrCreate (roomCode , upgradeId );
185199 }
200+
201+ public static IRoomUpgradeManager upgradeManager () {
202+ return UPGRADE_MANAGER ;
203+ }
204+
205+ public static IRoomRegistrar roomRegistrar () {
206+ return ROOM_REGISTRAR ;
207+ }
208+
209+ public static IRoomSpawnManagers spawnManagers () {
210+ return SPAWN_MANAGERS ;
211+ }
212+
213+ public static IRoomChunkManager chunkManager () {
214+ return CHUNK_MANAGER ;
215+ }
216+
217+ public static IRoomChunks roomChunks (String code ) {
218+ return chunkManager ().get (code );
219+ }
186220}
0 commit comments