Skip to content

Commit fd4ed05

Browse files
committed
Update Gander to latest beta, working on chunk loading upgrade
[no ci]
1 parent 2ff36b8 commit fd4ed05

File tree

102 files changed

+1262
-754
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+1262
-754
lines changed

core-api/src/main/java/dev/compactmods/machines/api/CompactMachines.java

Lines changed: 59 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,22 @@
33
import dev.compactmods.machines.api.dimension.CompactDimension;
44
import dev.compactmods.machines.api.dimension.MissingDimensionException;
55
import dev.compactmods.machines.api.room.CompactRoomGenerator;
6-
import dev.compactmods.machines.api.room.IRoomApi;
76
import 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;
811
import dev.compactmods.machines.api.room.template.RoomTemplate;
912
import dev.compactmods.machines.api.room.data.IRoomDataAttachmentAccessor;
1013
import dev.compactmods.machines.api.room.history.IPlayerHistoryApi;
1114
import 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;
1317
import 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;
1422
import dev.compactmods.machines.api.util.BlockSpaceUtil;
1523
import net.minecraft.core.Direction;
1624
import net.minecraft.resources.ResourceLocation;
@@ -23,7 +31,6 @@
2331
import org.apache.logging.log4j.LogManager;
2432
import org.apache.logging.log4j.Logger;
2533
import org.jetbrains.annotations.ApiStatus;
26-
import org.jetbrains.annotations.Nullable;
2734

2835
import java.util.Optional;
2936
import 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
}

core-api/src/main/java/dev/compactmods/machines/api/attachment/CMDataAttachments.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import dev.compactmods.machines.api.machine.MachineColor;
77
import dev.compactmods.machines.api.room.history.RoomEntryPoint;
88
import dev.compactmods.machines.api.room.upgrade.RoomUpgradeInstance;
9-
import dev.compactmods.machines.api.room.upgrade.components.RoomUpgradeList;
9+
import dev.compactmods.machines.api.room.upgrade.component.RoomUpgradeComponentList;
1010
import dev.compactmods.machines.api.room.upgrade.inventory.RoomUpgradeInventory;
1111
import net.minecraft.Util;
1212
import net.minecraft.core.BlockPos;
@@ -30,18 +30,18 @@ public interface CMDataAttachments {
3030
.serialize(RoomEntryPoint.CODEC)
3131
.build());
3232

33-
Supplier<AttachmentType<RoomUpgradeInventory>> UPGRADE_ITEMS = ATTACHMENT_TYPES.register("upgrades", () -> AttachmentType
34-
.serializable(RoomUpgradeInventory::new)
33+
Supplier<AttachmentType<RoomUpgradeInventory>> UPGRADE_ITEMS = ATTACHMENT_TYPES.register("components", () -> AttachmentType
34+
.serializable(() -> new RoomUpgradeInventory())
3535
.build());
3636

3737
Supplier<AttachmentType<GlobalPos>> OPEN_MACHINE_POS = ATTACHMENT_TYPES.register("open_machine", () -> AttachmentType
3838
.builder(() -> GlobalPos.of(Level.OVERWORLD, BlockPos.ZERO))
3939
.serialize(GlobalPos.CODEC, Predicates.alwaysFalse())
4040
.build());
4141

42-
Supplier<AttachmentType<RoomUpgradeList>> PERMANENT_UPGRADES = ATTACHMENT_TYPES.register("permanent_upgrades", () -> AttachmentType
43-
.builder(() -> new RoomUpgradeList(List.of()))
44-
.serialize(RoomUpgradeList.CODEC)
42+
Supplier<AttachmentType<RoomUpgradeComponentList>> PERMANENT_UPGRADES = ATTACHMENT_TYPES.register("permanent_upgrades", () -> AttachmentType
43+
.builder(() -> new RoomUpgradeComponentList(List.of()))
44+
.serialize(RoomUpgradeComponentList.CODEC)
4545
.build());
4646

4747
Supplier<AttachmentType<String>> CURRENT_ROOM_CODE = ATTACHMENT_TYPES.register("current_room_code", () -> AttachmentType

core-api/src/main/java/dev/compactmods/machines/api/component/CMDataComponents.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.mojang.serialization.Codec;
44
import dev.compactmods.machines.api.CompactMachines;
55
import dev.compactmods.machines.api.machine.MachineColor;
6-
import dev.compactmods.machines.api.room.upgrade.components.RoomUpgradeList;
6+
import dev.compactmods.machines.api.room.upgrade.component.RoomUpgradeComponentList;
77
import net.minecraft.core.UUIDUtil;
88
import net.minecraft.core.component.DataComponentType;
99
import net.minecraft.core.registries.Registries;
@@ -22,10 +22,10 @@ public interface CMDataComponents {
2222
String KEY_ROOM_CODE = "room_code";
2323
String KEY_MACHINE_COLOR = "machine_color";
2424

25-
DeferredHolder<DataComponentType<?>, DataComponentType<RoomUpgradeList>> UPGRADE_LIST_COMPONENT = DATA_COMPONENTS
25+
DeferredHolder<DataComponentType<?>, DataComponentType<RoomUpgradeComponentList>> UPGRADE_LIST_COMPONENT = DATA_COMPONENTS
2626
.registerComponentType("room_upgrades", (builder) -> builder
27-
.persistent(RoomUpgradeList.CODEC)
28-
.networkSynchronized(RoomUpgradeList.STREAM_CODEC));
27+
.persistent(RoomUpgradeComponentList.CODEC)
28+
.networkSynchronized(RoomUpgradeComponentList.STREAM_CODEC));
2929

3030
/**
3131
* Only on bound room items - given by a crafting process or when a bound machine block is broken
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package dev.compactmods.machines.api.data;
2+
3+
public interface Saveable {
4+
void save();
5+
}

core-api/src/main/java/dev/compactmods/machines/api/room/IRoomApi.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

core-api/src/main/java/dev/compactmods/machines/api/room/RoomInstance.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
import dev.compactmods.machines.api.room.capability.CompactRoomCapability;
66
import dev.compactmods.machines.api.room.capability.RoomCapabilities;
77
import dev.compactmods.machines.api.room.spatial.IRoomBoundaries;
8+
import net.minecraft.resources.ResourceKey;
89
import net.minecraft.server.MinecraftServer;
910
import net.minecraft.server.level.ServerLevel;
11+
import net.minecraft.world.level.Level;
1012
import net.neoforged.neoforge.attachment.IAttachmentHolder;
1113
import org.jetbrains.annotations.Nullable;
1214

1315
import java.util.function.Supplier;
1416

15-
public record RoomInstance(MinecraftServer server, ServerLevel level, String code, MachineColor defaultMachineColor, IRoomBoundaries boundaries) implements IForwardingAttachmentHolder {
17+
public record RoomInstance(MinecraftServer server, ResourceKey<Level> levelKey, String code, MachineColor defaultMachineColor, IRoomBoundaries boundaries) implements IForwardingAttachmentHolder {
18+
19+
public ServerLevel level() {
20+
return server.getLevel(levelKey);
21+
}
1622

1723
public <T, C> T getCapability(CompactRoomCapability<T, C> capability) {
1824
return capability.getCapability(server, code, null);

core-api/src/main/java/dev/compactmods/machines/api/room/capability/RoomCapabilities.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.compactmods.machines.api.room.capability;
22

33
import dev.compactmods.machines.api.CompactMachines;
4+
import dev.compactmods.machines.api.room.upgrade.IRoomUpgradeAccessor;
45
import net.neoforged.neoforge.attachment.IAttachmentHolder;
56

67
import java.util.UUID;
@@ -10,4 +11,6 @@ public interface RoomCapabilities {
1011
CompactRoomCapability<IAttachmentHolder, Void> ROOM_DATA_ATTACHMENTS = CompactRoomCapability.createVoid(CompactMachines.modRL("data_attachments"), IAttachmentHolder.class);
1112

1213
CompactRoomCapability<IAttachmentHolder, UUID> UPGRADE_DATA_ATTACHMENTS = CompactRoomCapability.create(CompactMachines.modRL("upgrade_data_attachments"), IAttachmentHolder.class, UUID.class);
14+
15+
CompactRoomCapability<IRoomUpgradeAccessor, Void> UPGRADES = CompactRoomCapability.createVoid(CompactMachines.modRL("components"), IRoomUpgradeAccessor.class);
1316
}
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package dev.compactmods.machines.api.room.data;
22

3+
import dev.compactmods.machines.api.data.Saveable;
34
import net.neoforged.neoforge.attachment.IAttachmentHolder;
45

56
import java.util.Optional;
67

7-
public interface IRoomDataAttachmentAccessor {
8+
public interface IRoomDataAttachmentAccessor extends Saveable {
89
Optional<? extends IAttachmentHolder> get(String roomCode);
910

1011
IAttachmentHolder getOrCreate(String roomCode);
11-
12-
void save();
1312
}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package dev.compactmods.machines.api.room.history;
22

3-
public interface IPlayerHistoryApi {
3+
import dev.compactmods.machines.api.data.Saveable;
44

5-
IPlayerEntryPointHistoryManager entryPoints();
5+
public interface IPlayerHistoryApi extends Saveable {
66

7-
void save();
7+
IPlayerEntryPointHistoryManager entryPoints();
8+
89
}

core-api/src/main/java/dev/compactmods/machines/api/room/registration/IRoomRegistrar.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.compactmods.machines.api.room.registration;
22

3+
import dev.compactmods.machines.api.data.Saveable;
34
import dev.compactmods.machines.api.room.RoomInstance;
45
import dev.compactmods.machines.api.room.template.RoomTemplate;
56
import net.minecraft.server.MinecraftServer;
@@ -11,7 +12,7 @@
1112
import java.util.function.Consumer;
1213
import java.util.stream.Stream;
1314

14-
public interface IRoomRegistrar {
15+
public interface IRoomRegistrar extends Saveable {
1516

1617
default MinecraftServer server() {
1718
return ServerLifecycleHooks.getCurrentServer();

0 commit comments

Comments
 (0)