diff --git a/core-api/src/main/java/dev/compactmods/machines/api/room/RoomApi.java b/core-api/src/main/java/dev/compactmods/machines/api/CompactMachines.java similarity index 51% rename from core-api/src/main/java/dev/compactmods/machines/api/room/RoomApi.java rename to core-api/src/main/java/dev/compactmods/machines/api/CompactMachines.java index b4960bf7..59842182 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/room/RoomApi.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/CompactMachines.java @@ -1,52 +1,45 @@ -package dev.compactmods.machines.api.room; +package dev.compactmods.machines.api; -import dev.compactmods.machines.api.room.owner.IRoomOwners; -import dev.compactmods.machines.api.room.spatial.IRoomChunkManager; -import dev.compactmods.machines.api.room.spatial.IRoomChunks; -import dev.compactmods.machines.api.room.spawn.IRoomSpawnManager; import dev.compactmods.machines.api.dimension.CompactDimension; import dev.compactmods.machines.api.dimension.MissingDimensionException; +import dev.compactmods.machines.api.room.CompactRoomGenerator; +import dev.compactmods.machines.api.room.IRoomApi; +import dev.compactmods.machines.api.room.RoomInstance; +import dev.compactmods.machines.api.room.RoomTemplate; +import dev.compactmods.machines.api.room.data.IRoomDataAttachmentAccessor; +import dev.compactmods.machines.api.room.history.IPlayerHistoryApi; import dev.compactmods.machines.api.room.upgrade.RoomUpgradeDefinition; -import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; +import net.neoforged.neoforge.attachment.AttachmentHolder; +import net.neoforged.neoforge.attachment.IAttachmentHolder; import net.neoforged.neoforge.registries.DeferredRegister; import org.jetbrains.annotations.ApiStatus; import java.util.Optional; import java.util.UUID; -import java.util.function.Predicate; -public class RoomApi { +public class CompactMachines { + public final static String MOD_ID = "compactmachines"; - /** - * Set up when the server or single-player instance changes. - * NOT for API consumers to use! Use the methods provided here for safety. - * - * @since 3.0.0 - */ - @ApiStatus.Internal - public static IRoomApi INSTANCE; + public static ResourceLocation modRL(String path) { + return ResourceLocation.fromNamespaceAndPath(MOD_ID, path); + } public static DeferredRegister> roomUpgradeDR(String namespace) { return DeferredRegister.create(RoomUpgradeDefinition.REG_KEY, namespace); } - public static Predicate roomCodeValidator() { - return INSTANCE.roomCodeValidator(); + public static IRoomApi roomApi() { + return Internal.ROOM_API; } - public static boolean isValidRoomCode(String roomCode) { - return INSTANCE.roomCodeValidator().test(roomCode); + public static IPlayerHistoryApi playerHistoryApi() { + return Internal.PLAYER_HISTORY_API; } - /** - * Fetches a room instance from the registrar. - * - * @param roomCode The room identifier. - * @since 3.0.0 - */ public static Optional room(String roomCode) { - return INSTANCE.registrar().get(roomCode); + return Internal.ROOM_API.registrar().get(roomCode); } /** @@ -58,7 +51,7 @@ public static Optional room(String roomCode) { * @return */ public static RoomInstance newRoom(MinecraftServer server, RoomTemplate template, UUID owner) throws MissingDimensionException { - final var instance = INSTANCE.registrar().createNew(template, owner); + final var instance = CompactMachines.roomApi().registrar().createNew(template, owner); final var compactDim = CompactDimension.forServer(server); CompactRoomGenerator.generateRoom(compactDim, instance.boundaries().outerBounds()); @@ -71,24 +64,30 @@ public static RoomInstance newRoom(MinecraftServer server, RoomTemplate template return instance; } - public static IRoomRegistrar registrar() { - return INSTANCE.registrar(); + public static boolean isValidRoomCode(String roomCode) { + return Internal.ROOM_API.roomCodeValidator().test(roomCode); } - public static IRoomSpawnManager spawnManager(String roomCode) { - return INSTANCE.spawnManager(roomCode); + public static Optional existingRoomData(String code) { + return Internal.ROOM_DATA_ACCESSOR.get(code); } - public static IRoomChunkManager chunkManager() { - return INSTANCE.chunkManager(); + public static IAttachmentHolder roomData(String code) { + return Internal.ROOM_DATA_ACCESSOR.getOrCreate(code); } - public static IRoomChunks chunks(String roomCode) { - return INSTANCE.chunks(roomCode); - } - public static Registry getTemplates(MinecraftServer server) { - final var regAccess = server.registryAccess(); - return regAccess.registryOrThrow(RoomTemplate.REGISTRY_KEY); + /** + * Set up when the server or single-player instance changes. + * NOT for API consumers to use! Use the methods provided here for safety. + * + * @since 6.0.0 + */ + @ApiStatus.Internal + @Deprecated + public final class Internal { + public static IRoomApi ROOM_API; + public static IRoomDataAttachmentAccessor ROOM_DATA_ACCESSOR; + public static IPlayerHistoryApi PLAYER_HISTORY_API; } } diff --git a/core-api/src/main/java/dev/compactmods/machines/api/CompactMachinesApi.java b/core-api/src/main/java/dev/compactmods/machines/api/CompactMachinesApi.java deleted file mode 100644 index 74a4465d..00000000 --- a/core-api/src/main/java/dev/compactmods/machines/api/CompactMachinesApi.java +++ /dev/null @@ -1,11 +0,0 @@ -package dev.compactmods.machines.api; - -import net.minecraft.resources.ResourceLocation; - -public interface CompactMachinesApi { - String MOD_ID = "compactmachines"; - - static ResourceLocation modRL(String path) { - return ResourceLocation.fromNamespaceAndPath(MOD_ID, path); - } -} diff --git a/core-api/src/main/java/dev/compactmods/machines/api/Translations.java b/core-api/src/main/java/dev/compactmods/machines/api/Translations.java index 73bc8488..42b250ab 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/Translations.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/Translations.java @@ -21,9 +21,9 @@ public interface Translations { .withStyle(ChatFormatting.ITALIC); interface IDs { - String TELEPORT_OUT_OF_BOUNDS = Util.makeDescriptionId("messages", CompactMachinesApi.modRL("teleport_oob")); - String HOW_DID_YOU_GET_HERE = Util.makeDescriptionId("messages", CompactMachinesApi.modRL("how_did_you_get_here")); - String HINT_HOLD_SHIFT = Util.makeDescriptionId("messages", CompactMachinesApi.modRL("hint.hold_shift")); - String UNBREAKABLE_BLOCK = Util.makeDescriptionId("messages", CompactMachinesApi.modRL("solid_wall")); + String TELEPORT_OUT_OF_BOUNDS = Util.makeDescriptionId("messages", CompactMachines.modRL("teleport_oob")); + String HOW_DID_YOU_GET_HERE = Util.makeDescriptionId("messages", CompactMachines.modRL("how_did_you_get_here")); + String HINT_HOLD_SHIFT = Util.makeDescriptionId("messages", CompactMachines.modRL("hint.hold_shift")); + String UNBREAKABLE_BLOCK = Util.makeDescriptionId("messages", CompactMachines.modRL("solid_wall")); } } diff --git a/core-api/src/main/java/dev/compactmods/machines/api/advancement/Advancements.java b/core-api/src/main/java/dev/compactmods/machines/api/advancement/Advancements.java index c29ffac2..2b19e4f8 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/advancement/Advancements.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/advancement/Advancements.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.api.advancement; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import net.minecraft.resources.ResourceLocation; /** @@ -11,67 +11,67 @@ public interface Advancements { * Granted when the player is teleported out by leaving room boundaries, or * when in an invalid state (such as trying to leave a machine room with no entry history) */ - ResourceLocation HOW_DID_YOU_GET_HERE = CompactMachinesApi.modRL("how_did_you_get_here"); + ResourceLocation HOW_DID_YOU_GET_HERE = CompactMachines.modRL("how_did_you_get_here"); /** * Root advancement. Required for vanilla's tree design. */ - ResourceLocation ROOT = CompactMachinesApi.modRL("root"); + ResourceLocation ROOT = CompactMachines.modRL("root"); /** * Granted when a player first crafts machine items. */ - ResourceLocation FOUNDATIONS = CompactMachinesApi.modRL("foundations"); + ResourceLocation FOUNDATIONS = CompactMachines.modRL("foundations"); /** * Granted on first pickup of a PSD item. */ - ResourceLocation GOT_SHRINKING_DEVICE = CompactMachinesApi.modRL("got_shrinking_device"); + ResourceLocation GOT_SHRINKING_DEVICE = CompactMachines.modRL("got_shrinking_device"); /** * Granted if a player tries to enter a machine room they're currently in. */ - ResourceLocation RECURSIVE_ROOMS = CompactMachinesApi.modRL("recursion"); + ResourceLocation RECURSIVE_ROOMS = CompactMachines.modRL("recursion"); /** * Was granted when players gained a tiny machine item. TBR in 1.20 once tiny machines are no longer * part of the mod. */ @Deprecated(since = "2.0.0", forRemoval = true) - ResourceLocation CLAIMED_TINY_MACHINE = CompactMachinesApi.modRL("claimed_machine_tiny"); + ResourceLocation CLAIMED_TINY_MACHINE = CompactMachines.modRL("claimed_machine_tiny"); /** * Was granted when players gained a small machine item. TBR in 1.20 once small machines are no longer * part of the mod. */ @Deprecated(since = "2.0.0", forRemoval = true) - ResourceLocation CLAIMED_SMALL_MACHINE = CompactMachinesApi.modRL("claimed_machine_small"); + ResourceLocation CLAIMED_SMALL_MACHINE = CompactMachines.modRL("claimed_machine_small"); /** * Was granted when players gained a normal machine item. TBR in 1.20 once normal machines are no longer * part of the mod. */ @Deprecated(since = "2.0.0", forRemoval = true) - ResourceLocation CLAIMED_NORMAL_MACHINE = CompactMachinesApi.modRL("claimed_machine_normal"); + ResourceLocation CLAIMED_NORMAL_MACHINE = CompactMachines.modRL("claimed_machine_normal"); /** * Was granted when players gained a large machine item. TBR in 1.20 once large machines are no longer * part of the mod. */ @Deprecated(since = "2.0.0", forRemoval = true) - ResourceLocation CLAIMED_LARGE_MACHINE = CompactMachinesApi.modRL("claimed_machine_large"); + ResourceLocation CLAIMED_LARGE_MACHINE = CompactMachines.modRL("claimed_machine_large"); /** * Was granted when players gained a giant machine item. TBR in 1.20 once giant machines are no longer * part of the mod. */ @Deprecated(since = "2.0.0", forRemoval = true) - ResourceLocation CLAIMED_GIANT_MACHINE = CompactMachinesApi.modRL("claimed_machine_giant"); + ResourceLocation CLAIMED_GIANT_MACHINE = CompactMachines.modRL("claimed_machine_giant"); /** * Was granted when players gained a maximum-size machine item. TBR in 1.20 once maximum-size machines are no longer * part of the mod. */ @Deprecated(since = "2.0.0", forRemoval = true) - ResourceLocation CLAIMED_MAX_MACHINE = CompactMachinesApi.modRL("claimed_machine_max"); + ResourceLocation CLAIMED_MAX_MACHINE = CompactMachines.modRL("claimed_machine_max"); } diff --git a/core-api/src/main/java/dev/compactmods/machines/api/command/CommandTranslations.java b/core-api/src/main/java/dev/compactmods/machines/api/command/CommandTranslations.java index ac480478..06d7d494 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/command/CommandTranslations.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/command/CommandTranslations.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.api.command; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import net.minecraft.Util; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Player; @@ -16,15 +16,15 @@ public interface CommandTranslations { .translatableWithFallback(IDs.MACHINE_GIVEN, "Created a new machine item and gave it to %s.", player.getDisplayName()); interface IDs { - String CANNOT_GIVE_MACHINE = Util.makeDescriptionId("commands.machines", CompactMachinesApi.modRL("cannot_give_machine_item")); + String CANNOT_GIVE_MACHINE = Util.makeDescriptionId("commands.machines", CompactMachines.modRL("cannot_give_machine_item")); - String MACHINE_GIVEN = Util.makeDescriptionId("commands.machines", CompactMachinesApi.modRL("machine_given_successfully")); + String MACHINE_GIVEN = Util.makeDescriptionId("commands.machines", CompactMachines.modRL("machine_given_successfully")); /** * Used for displaying the number of registered rooms via summary commands. */ - String ROOM_COUNT = Util.makeDescriptionId("commands.rooms", CompactMachinesApi.modRL("room_reg_count")); + String ROOM_COUNT = Util.makeDescriptionId("commands.rooms", CompactMachines.modRL("room_reg_count")); - String SPAWN_CHANGED_SUCCESSFULLY = Util.makeDescriptionId("commands.rooms", CompactMachinesApi.modRL("spawn_changed_successfully")); + String SPAWN_CHANGED_SUCCESSFULLY = Util.makeDescriptionId("commands.rooms", CompactMachines.modRL("spawn_changed_successfully")); } } diff --git a/core-api/src/main/java/dev/compactmods/machines/api/dimension/CompactDimension.java b/core-api/src/main/java/dev/compactmods/machines/api/dimension/CompactDimension.java index 1698feda..dd052598 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/dimension/CompactDimension.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/dimension/CompactDimension.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.api.dimension; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; @@ -18,10 +18,10 @@ public abstract class CompactDimension { public static final ResourceKey LEVEL_KEY = ResourceKey - .create(Registries.DIMENSION, CompactMachinesApi.modRL("compact_world")); + .create(Registries.DIMENSION, CompactMachines.modRL("compact_world")); public static final ResourceKey DIM_TYPE_KEY = ResourceKey - .create(Registries.DIMENSION_TYPE, CompactMachinesApi.modRL("compact_world")); + .create(Registries.DIMENSION_TYPE, CompactMachines.modRL("compact_world")); private CompactDimension() {} diff --git a/core-api/src/main/java/dev/compactmods/machines/api/machine/MachineConstants.java b/core-api/src/main/java/dev/compactmods/machines/api/machine/MachineConstants.java index ae39979b..41cbf5b3 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/machine/MachineConstants.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/machine/MachineConstants.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.api.machine; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.util.KeyHelper; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; @@ -10,15 +10,15 @@ public interface MachineConstants { - ResourceLocation BOUND_MACHINE_BLOCK_ID = CompactMachinesApi.modRL( "machine"); - ResourceLocation BOUND_MACHINE_ENTITY = CompactMachinesApi.modRL( "machine"); + ResourceLocation BOUND_MACHINE_BLOCK_ID = CompactMachines.modRL( "machine"); + ResourceLocation BOUND_MACHINE_ENTITY = CompactMachines.modRL( "machine"); ResourceKey BOUND_MACHINE_BLOCK_RESKEY = KeyHelper.blockResKey("machine"); ResourceKey BOUND_MACHINE_ITEM_RESKEY = KeyHelper.itemResKey("machine"); - ResourceLocation UNBOUND_MACHINE_BLOCK_ID = CompactMachinesApi.modRL( "new_machine"); - ResourceLocation UNBOUND_MACHINE_ITEM_ID = CompactMachinesApi.modRL( "new_machine"); - ResourceLocation UNBOUND_MACHINE_ENTITY = CompactMachinesApi.modRL( "new_machine"); + ResourceLocation UNBOUND_MACHINE_BLOCK_ID = CompactMachines.modRL( "new_machine"); + ResourceLocation UNBOUND_MACHINE_ITEM_ID = CompactMachines.modRL( "new_machine"); + ResourceLocation UNBOUND_MACHINE_ENTITY = CompactMachines.modRL( "new_machine"); ResourceKey UNBOUND_MACHINE_BLOCK_RESKEY = KeyHelper.blockResKey("new_machine"); ResourceKey UNBOUND_MACHINE_ITEM_RESKEY = KeyHelper.itemResKey("new_machine"); diff --git a/core-api/src/main/java/dev/compactmods/machines/api/machine/MachineTranslations.java b/core-api/src/main/java/dev/compactmods/machines/api/machine/MachineTranslations.java index 230bd6f0..5b1cf46e 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/machine/MachineTranslations.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/machine/MachineTranslations.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.api.machine; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import net.minecraft.ChatFormatting; import net.minecraft.Util; import net.minecraft.core.BlockPos; @@ -16,9 +16,9 @@ public interface MachineTranslations { .withStyle(ChatFormatting.YELLOW); interface IDs { - String OWNER = Util.makeDescriptionId("machine", CompactMachinesApi.modRL("machine.owner")); - String SIZE = Util.makeDescriptionId("machine", CompactMachinesApi.modRL("machine.size")); - String BOUND_TO = Util.makeDescriptionId("machine", CompactMachinesApi.modRL("machine.bound_to")); - String NEW_MACHINE = Util.makeDescriptionId("machine", CompactMachinesApi.modRL("new_machine")); + String OWNER = Util.makeDescriptionId("machine", CompactMachines.modRL("machine.owner")); + String SIZE = Util.makeDescriptionId("machine", CompactMachines.modRL("machine.size")); + String BOUND_TO = Util.makeDescriptionId("machine", CompactMachines.modRL("machine.bound_to")); + String NEW_MACHINE = Util.makeDescriptionId("machine", CompactMachines.modRL("new_machine")); } } diff --git a/core-api/src/main/java/dev/compactmods/machines/api/room/IRoomApi.java b/core-api/src/main/java/dev/compactmods/machines/api/room/IRoomApi.java index bd1e9598..b5dab103 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/room/IRoomApi.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/room/IRoomApi.java @@ -1,5 +1,6 @@ package dev.compactmods.machines.api.room; +import dev.compactmods.machines.api.room.registration.IRoomRegistrar; import dev.compactmods.machines.api.room.spatial.IRoomChunkManager; import dev.compactmods.machines.api.room.spatial.IRoomChunks; import dev.compactmods.machines.api.room.spawn.IRoomSpawnManager; diff --git a/core-api/src/main/java/dev/compactmods/machines/api/room/RoomTemplate.java b/core-api/src/main/java/dev/compactmods/machines/api/room/RoomTemplate.java index 183b62ac..7c143ddb 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/room/RoomTemplate.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/room/RoomTemplate.java @@ -2,7 +2,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.machine.MachineColor; import dev.compactmods.machines.api.machine.MachineTranslations; import net.minecraft.ChatFormatting; @@ -34,9 +34,9 @@ public record RoomTemplate(RoomDimensions internalDimensions, MachineColor defaultMachineColor, List structures) implements TooltipProvider { - public static final ResourceKey> REGISTRY_KEY = ResourceKey.createRegistryKey(CompactMachinesApi.modRL("room_templates")); + public static final ResourceKey> REGISTRY_KEY = ResourceKey.createRegistryKey(CompactMachines.modRL("room_templates")); - public static final ResourceLocation NO_TEMPLATE = CompactMachinesApi.modRL("empty"); + public static final ResourceLocation NO_TEMPLATE = CompactMachines.modRL("empty"); public static final RoomTemplate INVALID_TEMPLATE = new RoomTemplate(0, 0); diff --git a/core-api/src/main/java/dev/compactmods/machines/api/room/RoomTranslations.java b/core-api/src/main/java/dev/compactmods/machines/api/room/RoomTranslations.java index 576faacb..e2b25347 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/room/RoomTranslations.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/room/RoomTranslations.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.api.room; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.room.function.PlayerAndRoomCodeFunction; import dev.compactmods.machines.api.util.AABBHelper; import net.minecraft.ChatFormatting; @@ -39,20 +39,20 @@ public interface RoomTranslations { .withStyle(ChatFormatting.GREEN); interface IDs { - String ROOM_SPAWNPOINT_SET = Util.makeDescriptionId("rooms", CompactMachinesApi.modRL("spawnpoint_set")); + String ROOM_SPAWNPOINT_SET = Util.makeDescriptionId("rooms", CompactMachines.modRL("spawnpoint_set")); - String PLAYER_ROOM_INFO = Util.makeDescriptionId("rooms", CompactMachinesApi.modRL("player_room_info")); + String PLAYER_ROOM_INFO = Util.makeDescriptionId("rooms", CompactMachines.modRL("player_room_info")); - String MACHINE_ROOM_INFO = Util.makeDescriptionId("machine", CompactMachinesApi.modRL("machine_room_info")); + String MACHINE_ROOM_INFO = Util.makeDescriptionId("machine", CompactMachines.modRL("machine_room_info")); interface Errors { - String UNKNOWN_ROOM_BY_CODE = Util.makeDescriptionId("rooms.errors", CompactMachinesApi.modRL("room_not_found")); + String UNKNOWN_ROOM_BY_CODE = Util.makeDescriptionId("rooms.errors", CompactMachines.modRL("room_not_found")); - String CANNOT_ENTER_ROOM = Util.makeDescriptionId("rooms.errors", CompactMachinesApi.modRL("cannot_enter")); + String CANNOT_ENTER_ROOM = Util.makeDescriptionId("rooms.errors", CompactMachines.modRL("cannot_enter")); - String UNKNOWN_ROOM_BY_PLAYER_CHUNK = Util.makeDescriptionId("rooms.errors", CompactMachinesApi.modRL("unknown_room_chunk")); + String UNKNOWN_ROOM_BY_PLAYER_CHUNK = Util.makeDescriptionId("rooms.errors", CompactMachines.modRL("unknown_room_chunk")); - String PLAYER_NOT_IN_COMPACT_DIM = Util.makeDescriptionId("rooms.errors", CompactMachinesApi.modRL("player_not_in_compact_dimension")); + String PLAYER_NOT_IN_COMPACT_DIM = Util.makeDescriptionId("rooms.errors", CompactMachines.modRL("player_not_in_compact_dimension")); } } } diff --git a/core-api/src/main/java/dev/compactmods/machines/api/room/data/CMRoomDataLocations.java b/core-api/src/main/java/dev/compactmods/machines/api/room/data/CMRoomDataLocations.java new file mode 100644 index 00000000..c92cb47a --- /dev/null +++ b/core-api/src/main/java/dev/compactmods/machines/api/room/data/CMRoomDataLocations.java @@ -0,0 +1,25 @@ +package dev.compactmods.machines.api.room.data; + +import dev.compactmods.machines.api.CompactMachines; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.level.storage.LevelResource; + +import java.nio.file.Path; +import java.util.function.Function; + +public interface CMRoomDataLocations { + + Function REGISTRATION_DATA = (server) -> server.getWorldPath(LevelResource.ROOT) + .resolve(CompactMachines.MOD_ID) + .resolve("data"); + + Function SPAWN_DATA = (server) -> server.getWorldPath(LevelResource.ROOT) + .resolve(CompactMachines.MOD_ID) + .resolve("data") + .resolve("spawn_data"); + + Function ROOM_DATA_ATTACHMENTS = (server) -> server.getWorldPath(LevelResource.ROOT) + .resolve(CompactMachines.MOD_ID) + .resolve("data") + .resolve("room_data"); +} diff --git a/core-api/src/main/java/dev/compactmods/machines/api/room/data/IRoomDataAttachmentAccessor.java b/core-api/src/main/java/dev/compactmods/machines/api/room/data/IRoomDataAttachmentAccessor.java index 0c9f9fb0..bda4998e 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/room/data/IRoomDataAttachmentAccessor.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/room/data/IRoomDataAttachmentAccessor.java @@ -1,6 +1,11 @@ package dev.compactmods.machines.api.room.data; -public interface IRoomDataAttachmentAccessor { +import net.neoforged.neoforge.attachment.IAttachmentHolder; + +import java.util.Optional; +public interface IRoomDataAttachmentAccessor { + Optional get(String roomCode); + IAttachmentHolder getOrCreate(String roomCode); } diff --git a/core-api/src/main/java/dev/compactmods/machines/api/room/history/PlayerHistoryApi.java b/core-api/src/main/java/dev/compactmods/machines/api/room/history/PlayerHistoryApi.java deleted file mode 100644 index fa3a7ce3..00000000 --- a/core-api/src/main/java/dev/compactmods/machines/api/room/history/PlayerHistoryApi.java +++ /dev/null @@ -1,19 +0,0 @@ -package dev.compactmods.machines.api.room.history; - -import org.jetbrains.annotations.ApiStatus; - -public class PlayerHistoryApi { - - /** - * Set up when the server or single-player instance changes. - * NOT for API consumers to use! Use the methods provided here for safety. - * - * @since 3.0.0 - */ - @ApiStatus.Internal - public static IPlayerHistoryApi INSTANCE; - - public static IPlayerEntryPointHistoryManager historyManager() { - return INSTANCE.entryPoints(); - } -} diff --git a/core-api/src/main/java/dev/compactmods/machines/api/room/IRoomRegistrar.java b/core-api/src/main/java/dev/compactmods/machines/api/room/registration/IRoomRegistrar.java similarity index 87% rename from core-api/src/main/java/dev/compactmods/machines/api/room/IRoomRegistrar.java rename to core-api/src/main/java/dev/compactmods/machines/api/room/registration/IRoomRegistrar.java index 13236ae1..5b7fb79f 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/room/IRoomRegistrar.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/room/registration/IRoomRegistrar.java @@ -1,5 +1,7 @@ -package dev.compactmods.machines.api.room; +package dev.compactmods.machines.api.room.registration; +import dev.compactmods.machines.api.room.RoomInstance; +import dev.compactmods.machines.api.room.RoomTemplate; import dev.compactmods.machines.api.room.registration.IRoomBuilder; import net.minecraft.world.phys.AABB; diff --git a/core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgrade.java b/core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgrade.java index edb0d7c0..c209e330 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgrade.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgrade.java @@ -1,7 +1,7 @@ package dev.compactmods.machines.api.room.upgrade; import com.mojang.serialization.Codec; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.room.upgrade.events.RoomUpgradeEvent; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; @@ -15,7 +15,7 @@ public interface RoomUpgrade extends TooltipProvider { Codec DISPATCH_CODEC = Codec.lazyInitialized(() -> { - @SuppressWarnings("unchecked") final var reg = (Registry>) BuiltInRegistries.REGISTRY.get(CompactMachinesApi.modRL("room_upgrades")); + @SuppressWarnings("unchecked") final var reg = (Registry>) BuiltInRegistries.REGISTRY.get(CompactMachines.modRL("room_upgrades")); if (reg != null) { var upgradeRegistry = reg.byNameCodec(); diff --git a/core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgradeDefinition.java b/core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgradeDefinition.java index 27d5064d..e7002da4 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgradeDefinition.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/room/upgrade/RoomUpgradeDefinition.java @@ -1,13 +1,13 @@ package dev.compactmods.machines.api.room.upgrade; import com.mojang.serialization.MapCodec; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; public record RoomUpgradeDefinition(MapCodec codec) { public static final ResourceKey>> REG_KEY = ResourceKey - .createRegistryKey(CompactMachinesApi.modRL("room_upgrades")); + .createRegistryKey(CompactMachines.modRL("room_upgrades")); } \ No newline at end of file diff --git a/core-api/src/main/java/dev/compactmods/machines/api/shrinking/PSDTags.java b/core-api/src/main/java/dev/compactmods/machines/api/shrinking/PSDTags.java index d33a30f6..06912f9c 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/shrinking/PSDTags.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/shrinking/PSDTags.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.api.shrinking; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import net.minecraft.core.registries.Registries; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; @@ -9,5 +9,5 @@ public interface PSDTags { /** * Marks an item as a personal shrinking device. */ - TagKey ITEM = TagKey.create(Registries.ITEM, CompactMachinesApi.modRL("shrinking_device")); + TagKey ITEM = TagKey.create(Registries.ITEM, CompactMachines.modRL("shrinking_device")); } diff --git a/core-api/src/main/java/dev/compactmods/machines/api/util/KeyHelper.java b/core-api/src/main/java/dev/compactmods/machines/api/util/KeyHelper.java index 5fa727ca..bbdac9c2 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/util/KeyHelper.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/util/KeyHelper.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.api.util; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagKey; @@ -11,19 +11,19 @@ public class KeyHelper { public static ResourceKey blockResKey(String id) { - return ResourceKey.create(Registries.BLOCK, CompactMachinesApi.modRL(id)); + return ResourceKey.create(Registries.BLOCK, CompactMachines.modRL(id)); } @NotNull public static TagKey itemTagKey(String id) { - return TagKey.create(Registries.ITEM, CompactMachinesApi.modRL(id)); + return TagKey.create(Registries.ITEM, CompactMachines.modRL(id)); } public static TagKey blockTag(String id) { - return TagKey.create(Registries.BLOCK, CompactMachinesApi.modRL(id)); + return TagKey.create(Registries.BLOCK, CompactMachines.modRL(id)); } public static ResourceKey itemResKey(String id) { - return ResourceKey.create(Registries.ITEM, CompactMachinesApi.modRL(id)); + return ResourceKey.create(Registries.ITEM, CompactMachines.modRL(id)); } } diff --git a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/DataGeneration.java b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/DataGeneration.java index 92ce7af7..289b348f 100644 --- a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/DataGeneration.java +++ b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/DataGeneration.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.datagen; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.datagen.compat.curios.CurioEntityGenerator; import dev.compactmods.machines.datagen.compat.curios.CurioSlotGenerator; import dev.compactmods.machines.datagen.lang.EnglishLangGenerator; @@ -17,7 +17,7 @@ import java.util.Collections; import java.util.List; -@EventBusSubscriber(modid = CompactMachinesApi.MOD_ID, bus = EventBusSubscriber.Bus.MOD) +@EventBusSubscriber(modid = CompactMachines.MOD_ID, bus = EventBusSubscriber.Bus.MOD) public class DataGeneration { @SubscribeEvent diff --git a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/DatapackRegisteredStuff.java b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/DatapackRegisteredStuff.java index 78d0f511..1d811514 100644 --- a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/DatapackRegisteredStuff.java +++ b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/DatapackRegisteredStuff.java @@ -1,7 +1,7 @@ package dev.compactmods.machines.datagen; import dev.compactmods.machines.api.room.RoomTemplate; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.dimension.CompactDimension; import dev.compactmods.machines.datagen.util.DimensionTypeBuilder; import dev.compactmods.machines.dimension.Dimension; @@ -32,7 +32,7 @@ import java.util.concurrent.CompletableFuture; public class DatapackRegisteredStuff extends DatapackBuiltinEntriesProvider { - private static final ResourceLocation COMPACT_BIOME = CompactMachinesApi.modRL("machine"); + private static final ResourceLocation COMPACT_BIOME = CompactMachines.modRL("machine"); private static final int DIMENSION_HEIGHT = 48; private static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() @@ -42,7 +42,7 @@ public class DatapackRegisteredStuff extends DatapackBuiltinEntriesProvider { .add(RoomTemplate.REGISTRY_KEY, DatapackRegisteredStuff::addRoomTemplates); DatapackRegisteredStuff(PackOutput packOutput, CompletableFuture registries) { - super(packOutput, registries, BUILDER, Set.of(CompactMachinesApi.MOD_ID)); + super(packOutput, registries, BUILDER, Set.of(CompactMachines.MOD_ID)); } private static void generateBiomes(BootstrapContext ctx) { @@ -106,6 +106,6 @@ private static void addRoomTemplates(BootstrapContext ctx) { } private static void roomTemplate(BootstrapContext ctx, String name, RoomTemplate template) { - ctx.register(ResourceKey.create(RoomTemplate.REGISTRY_KEY, CompactMachinesApi.modRL(name)), template); + ctx.register(ResourceKey.create(RoomTemplate.REGISTRY_KEY, CompactMachines.modRL(name)), template); } } diff --git a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/ItemModelGenerator.java b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/ItemModelGenerator.java index 7bb67996..cc26fe31 100644 --- a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/ItemModelGenerator.java +++ b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/ItemModelGenerator.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.datagen; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.machine.Machines; import dev.compactmods.machines.shrinking.Shrinking; import net.minecraft.core.registries.BuiltInRegistries; @@ -16,7 +16,7 @@ public class ItemModelGenerator extends ItemModelProvider { public ItemModelGenerator(PackOutput packOutput, ExistingFileHelper existingFileHelper) { - super(packOutput, CompactMachinesApi.MOD_ID, existingFileHelper); + super(packOutput, CompactMachines.MOD_ID, existingFileHelper); } @Override diff --git a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/RecipeGenerator.java b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/RecipeGenerator.java index e3e4099d..6868f9ee 100644 --- a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/RecipeGenerator.java +++ b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/RecipeGenerator.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.datagen; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.room.RoomTemplate; import dev.compactmods.machines.machine.Machines; import dev.compactmods.machines.room.Rooms; @@ -76,22 +76,22 @@ protected void buildRecipes(RecipeOutput recipeOutput) { } private void addMachineRecipes(RecipeOutput consumer) { - registerMachineRecipe(consumer, CompactMachinesApi.modRL("tiny"), + registerMachineRecipe(consumer, CompactMachines.modRL("tiny"), new RoomTemplate(3, FastColor.ARGB32.color(255, 201, 91, 19)), Tags.Items.INGOTS_COPPER); - registerMachineRecipe(consumer, CompactMachinesApi.modRL("small"), + registerMachineRecipe(consumer, CompactMachines.modRL("small"), new RoomTemplate(5, FastColor.ARGB32.color(255, 212, 210, 210)), Tags.Items.INGOTS_IRON); - registerMachineRecipe(consumer, CompactMachinesApi.modRL("normal"), + registerMachineRecipe(consumer, CompactMachines.modRL("normal"), new RoomTemplate(7, FastColor.ARGB32.color(255, 251, 242, 54)), Tags.Items.INGOTS_GOLD); - registerMachineRecipe(consumer, CompactMachinesApi.modRL("large"), + registerMachineRecipe(consumer, CompactMachines.modRL("large"), new RoomTemplate(9, FastColor.ARGB32.color(255, 33, 27, 46)), Tags.Items.GEMS_DIAMOND); - registerMachineRecipe(consumer, CompactMachinesApi.modRL("giant"), + registerMachineRecipe(consumer, CompactMachines.modRL("giant"), new RoomTemplate(11, FastColor.ARGB32.color(255, 67, 214, 205)), Tags.Items.OBSIDIANS); - registerMachineRecipe(consumer, CompactMachinesApi.modRL("colossal"), + registerMachineRecipe(consumer, CompactMachines.modRL("colossal"), new RoomTemplate(13, FastColor.ARGB32.color(255, 66, 63, 66)), Tags.Items.INGOTS_NETHERITE); } @@ -107,7 +107,7 @@ protected void registerMachineRecipe(RecipeOutput consumer, ResourceLocation tem recipe.unlockedBy("has_recipe", has(Rooms.Items.BREAKABLE_WALL)); - final var recipeId = CompactMachinesApi.modRL("new_machine_" + temId.getPath()); + final var recipeId = CompactMachines.modRL("new_machine_" + temId.getPath()); recipe.save(consumer, recipeId); } } diff --git a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/StateGenerator.java b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/StateGenerator.java index 5c258c24..fff3c9d0 100644 --- a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/StateGenerator.java +++ b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/StateGenerator.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.datagen; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.machine.Machines; import dev.compactmods.machines.room.Rooms; import net.minecraft.data.PackOutput; @@ -11,7 +11,7 @@ public class StateGenerator extends BlockStateProvider { public StateGenerator(PackOutput packOutput, ExistingFileHelper exFileHelper) { - super(packOutput, CompactMachinesApi.MOD_ID, exFileHelper); + super(packOutput, CompactMachines.MOD_ID, exFileHelper); } @Override diff --git a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/compat/curios/CurioEntityGenerator.java b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/compat/curios/CurioEntityGenerator.java index 68ebad33..c539c3bc 100644 --- a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/compat/curios/CurioEntityGenerator.java +++ b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/compat/curios/CurioEntityGenerator.java @@ -2,7 +2,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import net.minecraft.core.HolderLookup; import net.minecraft.data.PackOutput; import net.minecraft.server.packs.PackType; @@ -22,12 +22,12 @@ public record CurioEntityDefinition(List entities, List slots) { } public CurioEntityGenerator(PackOutput output, CompletableFuture lookupProvider, ExistingFileHelper existingFileHelper) { - super(output, PackOutput.Target.DATA_PACK, "curios/entities", PackType.SERVER_DATA, CurioEntityDefinition.CODEC, lookupProvider, CompactMachinesApi.MOD_ID, existingFileHelper); + super(output, PackOutput.Target.DATA_PACK, "curios/entities", PackType.SERVER_DATA, CurioEntityDefinition.CODEC, lookupProvider, CompactMachines.MOD_ID, existingFileHelper); } @Override protected void gather() { var psdDef = new CurioEntityDefinition(List.of("player"), List.of("psd")); - unconditional(CompactMachinesApi.modRL("psd"), psdDef); + unconditional(CompactMachines.modRL("psd"), psdDef); } } diff --git a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/compat/curios/CurioSlotGenerator.java b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/compat/curios/CurioSlotGenerator.java index e1ecb82b..897e23a7 100644 --- a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/compat/curios/CurioSlotGenerator.java +++ b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/compat/curios/CurioSlotGenerator.java @@ -2,7 +2,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import net.minecraft.core.HolderLookup; import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; @@ -24,12 +24,12 @@ public record CurioSlot(int size, String operation, ResourceLocation icon) { } public CurioSlotGenerator(PackOutput output, CompletableFuture lookupProvider, ExistingFileHelper existingFileHelper) { - super(output, PackOutput.Target.DATA_PACK, "curios/slots", PackType.SERVER_DATA, CurioSlot.CODEC, lookupProvider, CompactMachinesApi.MOD_ID, existingFileHelper); + super(output, PackOutput.Target.DATA_PACK, "curios/slots", PackType.SERVER_DATA, CurioSlot.CODEC, lookupProvider, CompactMachines.MOD_ID, existingFileHelper); } @Override protected void gather() { - var cmPSDSlot = new CurioSlot(1, "SET", CompactMachinesApi.modRL("slot/empty_psd")); - unconditional(CompactMachinesApi.modRL("psd"), cmPSDSlot); + var cmPSDSlot = new CurioSlot(1, "SET", CompactMachines.modRL("slot/empty_psd")); + unconditional(CompactMachines.modRL("psd"), cmPSDSlot); } } diff --git a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/lang/BaseLangGenerator.java b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/lang/BaseLangGenerator.java index 2129427b..39ac3e7b 100644 --- a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/lang/BaseLangGenerator.java +++ b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/lang/BaseLangGenerator.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.datagen.lang; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import net.minecraft.Util; import net.minecraft.core.Direction; import net.minecraft.data.DataGenerator; @@ -14,7 +14,7 @@ public abstract class BaseLangGenerator extends LanguageProvider { private final String locale; public BaseLangGenerator(DataGenerator gen, String locale) { - super(gen.getPackOutput(), CompactMachinesApi.MOD_ID, locale); + super(gen.getPackOutput(), CompactMachines.MOD_ID, locale); this.locale = locale; } @@ -30,7 +30,7 @@ protected String getMachineTranslation() { protected void addTranslations() { // Direction Names for (var dir : Direction.values()) { - add(Util.makeDescriptionId("direction", CompactMachinesApi.modRL(dir.getSerializedName())), getDirectionTranslation(dir)); + add(Util.makeDescriptionId("direction", CompactMachines.modRL(dir.getSerializedName())), getDirectionTranslation(dir)); } } diff --git a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/lang/EnglishLangGenerator.java b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/lang/EnglishLangGenerator.java index 5b898ae6..f48e3826 100644 --- a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/lang/EnglishLangGenerator.java +++ b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/lang/EnglishLangGenerator.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.datagen.lang; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.Translations; import dev.compactmods.machines.api.advancement.Advancements; import dev.compactmods.machines.api.command.CommandTranslations; @@ -45,15 +45,15 @@ protected void addTranslations() { commands(); advancements(); - add(CompactMachinesApi.MOD_ID + ".direction.side", "Side: %s"); - add(CompactMachinesApi.MOD_ID + ".connected_block", "Connected: %s"); + add(CompactMachines.MOD_ID + ".direction.side", "Side: %s"); + add(CompactMachines.MOD_ID + ".connected_block", "Connected: %s"); add(Translations.IDs.UNBREAKABLE_BLOCK, "Warning! Unbreakable for non-creative players!"); add(Translations.IDs.HINT_HOLD_SHIFT, "Hold shift for details."); addCreativeTab(CreativeTabs.MAIN_RL, "Compact Machines"); - add("biome." + CompactMachinesApi.MOD_ID + ".machine", "Compact Machine"); + add("biome." + CompactMachines.MOD_ID + ".machine", "Compact Machine"); add("jei.compactmachines.machines", "Machines are used to make pocket dimensions. Craft a machine and place it in world, then use a Personal Shrinking Device to go inside."); add("jei.compactmachines.shrinking_device", "Use the Personal Shrinking Device (PSD) on a machine in order to enter a compact space."); @@ -85,7 +85,7 @@ private void blocksAndItems() { addItem(Shrinking.PERSONAL_SHRINKING_DEVICE, "Personal Shrinking Device"); addItem(Shrinking.SHRINKING_MODULE, "Atom Shrinking Module"); addItem(Shrinking.ENLARGING_MODULE, "Atom Enlarging Module"); - add(Util.makeDescriptionId("block", CompactMachinesApi.modRL("bound_machine_fallback")), machineTranslation); + add(Util.makeDescriptionId("block", CompactMachines.modRL("bound_machine_fallback")), machineTranslation); } protected void advancements() { diff --git a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/tags/BlockTagGenerator.java b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/tags/BlockTagGenerator.java index 25beacd5..66287d36 100644 --- a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/tags/BlockTagGenerator.java +++ b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/tags/BlockTagGenerator.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.datagen.tags; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.machine.MachineConstants; import dev.compactmods.machines.machine.Machines; import dev.compactmods.machines.room.Rooms; @@ -15,7 +15,7 @@ public class BlockTagGenerator extends BlockTagsProvider { public BlockTagGenerator(PackOutput packOut, ExistingFileHelper files, CompletableFuture lookup) { - super(packOut, lookup, CompactMachinesApi.MOD_ID, files); + super(packOut, lookup, CompactMachines.MOD_ID, files); } @Override diff --git a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/tags/PointOfInterestTagGenerator.java b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/tags/PointOfInterestTagGenerator.java index 88b9a094..ab299d39 100644 --- a/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/tags/PointOfInterestTagGenerator.java +++ b/neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/tags/PointOfInterestTagGenerator.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.datagen.tags; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.villager.Villagers; import net.minecraft.core.HolderLookup; import net.minecraft.data.PackOutput; @@ -14,7 +14,7 @@ public class PointOfInterestTagGenerator extends PoiTypeTagsProvider { public PointOfInterestTagGenerator(PackOutput packOut, CompletableFuture lookup, ExistingFileHelper existingFiles) { - super(packOut, lookup, CompactMachinesApi.MOD_ID, existingFiles); + super(packOut, lookup, CompactMachines.MOD_ID, existingFiles); } @Override diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/CMRegistries.java b/neoforge-main/src/main/java/dev/compactmods/machines/CMRegistries.java index d58532c0..d8a98639 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/CMRegistries.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/CMRegistries.java @@ -1,7 +1,7 @@ package dev.compactmods.machines; import dev.compactmods.machines.api.room.RoomTemplate; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.shrinking.Shrinking; import net.minecraft.commands.synchronization.ArgumentTypeInfo; import net.minecraft.core.registries.BuiltInRegistries; @@ -25,30 +25,30 @@ public interface CMRegistries { // Machines, Walls, Shrinking - DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(CompactMachinesApi.MOD_ID); - DeferredRegister.Items ITEMS = DeferredRegister.createItems(CompactMachinesApi.MOD_ID); + DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(CompactMachines.MOD_ID); + DeferredRegister.Items ITEMS = DeferredRegister.createItems(CompactMachines.MOD_ID); - DeferredRegister TABS = DeferredRegister.create(BuiltInRegistries.CREATIVE_MODE_TAB, CompactMachinesApi.MOD_ID); + DeferredRegister TABS = DeferredRegister.create(BuiltInRegistries.CREATIVE_MODE_TAB, CompactMachines.MOD_ID); - DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create(BuiltInRegistries.BLOCK_ENTITY_TYPE, CompactMachinesApi.MOD_ID); + DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create(BuiltInRegistries.BLOCK_ENTITY_TYPE, CompactMachines.MOD_ID); // UIRegistration - DeferredRegister> CONTAINERS = DeferredRegister.create(BuiltInRegistries.MENU, CompactMachinesApi.MOD_ID); + DeferredRegister> CONTAINERS = DeferredRegister.create(BuiltInRegistries.MENU, CompactMachines.MOD_ID); // Commands - DeferredRegister> COMMAND_ARGUMENT_TYPES = DeferredRegister.create(BuiltInRegistries.COMMAND_ARGUMENT_TYPE, CompactMachinesApi.MOD_ID); + DeferredRegister> COMMAND_ARGUMENT_TYPES = DeferredRegister.create(BuiltInRegistries.COMMAND_ARGUMENT_TYPE, CompactMachines.MOD_ID); // LootFunctions - DeferredRegister> LOOT_FUNCTIONS = DeferredRegister.create(BuiltInRegistries.LOOT_FUNCTION_TYPE, CompactMachinesApi.MOD_ID); + DeferredRegister> LOOT_FUNCTIONS = DeferredRegister.create(BuiltInRegistries.LOOT_FUNCTION_TYPE, CompactMachines.MOD_ID); // Villagers - DeferredRegister VILLAGERS = DeferredRegister.create(BuiltInRegistries.VILLAGER_PROFESSION, CompactMachinesApi.MOD_ID); + DeferredRegister VILLAGERS = DeferredRegister.create(BuiltInRegistries.VILLAGER_PROFESSION, CompactMachines.MOD_ID); - DeferredRegister POINTS_OF_INTEREST = DeferredRegister.create(BuiltInRegistries.POINT_OF_INTEREST_TYPE, CompactMachinesApi.MOD_ID); + DeferredRegister POINTS_OF_INTEREST = DeferredRegister.create(BuiltInRegistries.POINT_OF_INTEREST_TYPE, CompactMachines.MOD_ID); - DeferredRegister> ATTACHMENT_TYPES = DeferredRegister.create(NeoForgeRegistries.ATTACHMENT_TYPES, CompactMachinesApi.MOD_ID); + DeferredRegister> ATTACHMENT_TYPES = DeferredRegister.create(NeoForgeRegistries.ATTACHMENT_TYPES, CompactMachines.MOD_ID); - DeferredRegister.DataComponents DATA_COMPONENTS = DeferredRegister.createDataComponents(CompactMachinesApi.MOD_ID); + DeferredRegister.DataComponents DATA_COMPONENTS = DeferredRegister.createDataComponents(CompactMachines.MOD_ID); static Item basicItem() { return new Item(new Item.Properties()); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/CompactMachines.java b/neoforge-main/src/main/java/dev/compactmods/machines/CompactMachinesCommon.java similarity index 69% rename from neoforge-main/src/main/java/dev/compactmods/machines/CompactMachines.java rename to neoforge-main/src/main/java/dev/compactmods/machines/CompactMachinesCommon.java index 2e5e9505..b0192f84 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/CompactMachines.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/CompactMachinesCommon.java @@ -1,16 +1,11 @@ package dev.compactmods.machines; -import dev.compactmods.machines.api.CompactMachinesApi; -import dev.compactmods.machines.api.dimension.CompactDimension; -import dev.compactmods.machines.client.CompactMachinesClient; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.command.Commands; -import dev.compactmods.machines.client.config.ClientConfig; -import dev.compactmods.machines.client.creative.CreativeTabs; import dev.compactmods.machines.compat.InterModCompat; import dev.compactmods.machines.config.CommonConfig; import dev.compactmods.machines.config.ServerConfig; import dev.compactmods.machines.data.functions.LootFunctions; -import dev.compactmods.machines.data.room.RoomAttachmentDataManager; import dev.compactmods.machines.dimension.Dimension; import dev.compactmods.machines.dimension.WorldBorderFixer; import dev.compactmods.machines.machine.Machines; @@ -21,23 +16,19 @@ import dev.compactmods.machines.shrinking.Shrinking; import dev.compactmods.machines.villager.Villagers; import net.minecraft.util.FastColor; -import net.minecraft.world.level.Level; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; import net.neoforged.fml.common.Mod; import net.neoforged.fml.config.ModConfig; -import net.neoforged.fml.loading.FMLEnvironment; import net.neoforged.neoforge.common.NeoForge; -import net.neoforged.neoforge.event.level.LevelEvent; -import net.neoforged.neoforge.event.server.ServerStoppingEvent; -@Mod(CompactMachinesApi.MOD_ID) -public class CompactMachines { +@Mod(CompactMachines.MOD_ID) +public class CompactMachinesCommon { public static final int BRAND_MACHINE_COLOR = FastColor.ARGB32.color(255, 248, 246, 76); @SuppressWarnings("unused") - public CompactMachines(IEventBus modBus, ModContainer modContainer) { + public CompactMachinesCommon(IEventBus modBus, ModContainer modContainer) { initConfigs(modContainer); prepare(); registerEvents(modBus); @@ -46,7 +37,6 @@ public CompactMachines(IEventBus modBus, ModContainer modContainer) { } private static void initConfigs(ModContainer modContainer) { - modContainer.registerConfig(ModConfig.Type.CLIENT, ClientConfig.CONFIG); modContainer.registerConfig(ModConfig.Type.COMMON, CommonConfig.CONFIG); modContainer.registerConfig(ModConfig.Type.SERVER, ServerConfig.CONFIG); } @@ -60,10 +50,6 @@ private static void prepare() { Commands.prepare(); LootFunctions.prepare(); Villagers.prepare(); - - if(FMLEnvironment.dist.isClient()) { - CreativeTabs.prepare(); - } } private static void registerEvents(IEventBus modBus) { @@ -76,9 +62,5 @@ private static void registerEvents(IEventBus modBus) { NeoForge.EVENT_BUS.addListener(Commands::onCommandsRegister); NeoForge.EVENT_BUS.addListener(ProtectedBlockEventHandler::leftClickBlock); - - if(FMLEnvironment.dist.isClient()) { - CompactMachinesClient.registerEvents(modBus); - } } } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/LoggingUtil.java b/neoforge-main/src/main/java/dev/compactmods/machines/LoggingUtil.java index 5240b299..06b4b9c6 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/LoggingUtil.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/LoggingUtil.java @@ -1,12 +1,12 @@ package dev.compactmods.machines; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class LoggingUtil { public static Logger modLog() { - return LogManager.getLogger(CompactMachinesApi.MOD_ID); + return LogManager.getLogger(CompactMachines.MOD_ID); } } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/client/CompactMachinesClient.java b/neoforge-main/src/main/java/dev/compactmods/machines/client/CompactMachinesClient.java index d097a9f4..52c26375 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/client/CompactMachinesClient.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/client/CompactMachinesClient.java @@ -1,14 +1,29 @@ package dev.compactmods.machines.client; +import dev.compactmods.machines.api.CompactMachines; +import dev.compactmods.machines.client.config.ClientConfig; +import dev.compactmods.machines.client.creative.CreativeTabs; import dev.compactmods.machines.client.machine.MachinesClient; import dev.compactmods.machines.client.room.RoomsClient; +import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; +@Mod(value = CompactMachines.MOD_ID, dist = Dist.CLIENT) public class CompactMachinesClient { + public CompactMachinesClient(ModContainer modContainer, IEventBus modBus) { + modContainer.registerConfig(ModConfig.Type.CLIENT, ClientConfig.CONFIG); + + CreativeTabs.prepare(); + + registerEvents(modBus); + } + public static void registerEvents(IEventBus modBus) { MachinesClient.registerEvents(modBus); RoomsClient.registerEvents(modBus); } - } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/client/creative/CreativeTabs.java b/neoforge-main/src/main/java/dev/compactmods/machines/client/creative/CreativeTabs.java index 8b263dd6..43b0b589 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/client/creative/CreativeTabs.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/client/creative/CreativeTabs.java @@ -1,7 +1,7 @@ package dev.compactmods.machines.client.creative; import dev.compactmods.machines.api.room.RoomTemplate; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.machine.Machines; import dev.compactmods.machines.room.Rooms; import dev.compactmods.machines.shrinking.Shrinking; @@ -13,7 +13,7 @@ public interface CreativeTabs { - ResourceLocation MAIN_RL = CompactMachinesApi.modRL("main"); + ResourceLocation MAIN_RL = CompactMachines.modRL("main"); static void prepare() { TABS.register(MAIN_RL.getPath(), () -> CreativeModeTab.builder() diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/client/keybinds/room/RoomExitKeyMapping.java b/neoforge-main/src/main/java/dev/compactmods/machines/client/keybinds/room/RoomExitKeyMapping.java index 10422fa7..584ff4e2 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/client/keybinds/room/RoomExitKeyMapping.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/client/keybinds/room/RoomExitKeyMapping.java @@ -1,7 +1,7 @@ package dev.compactmods.machines.client.keybinds.room; import com.mojang.blaze3d.platform.InputConstants; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.dimension.CompactDimension; import dev.compactmods.machines.network.PlayerRequestedLeavePacket; import net.minecraft.Util; @@ -13,8 +13,8 @@ public class RoomExitKeyMapping { public interface I18n { - String CATEGORY = Util.makeDescriptionId("key.category", CompactMachinesApi.modRL("general")); - String NAME = Util.makeDescriptionId("key.mapping", CompactMachinesApi.modRL("exit_room")); + String CATEGORY = Util.makeDescriptionId("key.category", CompactMachines.modRL("general")); + String NAME = Util.makeDescriptionId("key.mapping", CompactMachines.modRL("exit_room")); } public static final IKeyConflictContext CONFLICT_CONTEXT = new IKeyConflictContext() { diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/client/keybinds/room/RoomUpgradeUIMapping.java b/neoforge-main/src/main/java/dev/compactmods/machines/client/keybinds/room/RoomUpgradeUIMapping.java index 36f3422e..f92c67e5 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/client/keybinds/room/RoomUpgradeUIMapping.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/client/keybinds/room/RoomUpgradeUIMapping.java @@ -1,7 +1,7 @@ package dev.compactmods.machines.client.keybinds.room; import com.mojang.blaze3d.platform.InputConstants; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.dimension.CompactDimension; import dev.compactmods.machines.network.PlayerRequestedUpgradeUIPacket; import dev.compactmods.machines.room.Rooms; @@ -13,8 +13,8 @@ public class RoomUpgradeUIMapping { - public static final String CATEGORY = Util.makeDescriptionId("key.category", CompactMachinesApi.modRL("general")); - public static final String NAME = Util.makeDescriptionId("key.mapping", CompactMachinesApi.modRL("open_upgrade_screen")); + public static final String CATEGORY = Util.makeDescriptionId("key.category", CompactMachines.modRL("general")); + public static final String NAME = Util.makeDescriptionId("key.mapping", CompactMachines.modRL("open_upgrade_screen")); public static final IKeyConflictContext CONFLICT_CONTEXT = new IKeyConflictContext() { @Override diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/client/room/RoomClientEvents.java b/neoforge-main/src/main/java/dev/compactmods/machines/client/room/RoomClientEvents.java index 0ad83dc2..a1515525 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/client/room/RoomClientEvents.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/client/room/RoomClientEvents.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.client.room; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.client.keybinds.room.RoomExitKeyMapping; import dev.compactmods.machines.client.keybinds.room.RoomUpgradeUIMapping; import dev.compactmods.machines.room.Rooms; @@ -32,6 +32,6 @@ public static void handleKeybinds(final ClientTickEvent.Post clientTick) { } public static void onOverlayRegistration(final RegisterGuiLayersEvent layers) { - layers.registerAbove(VanillaGuiLayers.DEBUG_OVERLAY, CompactMachinesApi.modRL("room_meta_debug"), new RoomMetadataDebugOverlay()); + layers.registerAbove(VanillaGuiLayers.DEBUG_OVERLAY, CompactMachines.modRL("room_meta_debug"), new RoomMetadataDebugOverlay()); } } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/command/Commands.java b/neoforge-main/src/main/java/dev/compactmods/machines/command/Commands.java index 5166f65d..432751c0 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/command/Commands.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/command/Commands.java @@ -1,7 +1,7 @@ package dev.compactmods.machines.command; import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.room.upgrade.components.RoomUpgradeList; import dev.compactmods.machines.command.subcommand.CMEjectSubcommand; import dev.compactmods.machines.command.subcommand.CMGiveMachineSubcommand; @@ -25,7 +25,7 @@ public class Commands { // TODO: /cm spawn set static final LiteralArgumentBuilder CM_COMMAND_ROOT - = LiteralArgumentBuilder.literal(CompactMachinesApi.MOD_ID); + = LiteralArgumentBuilder.literal(CompactMachines.MOD_ID); public static void prepare() { diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/command/argument/Suggestors.java b/neoforge-main/src/main/java/dev/compactmods/machines/command/argument/Suggestors.java index 1023df23..c824afcb 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/command/argument/Suggestors.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/command/argument/Suggestors.java @@ -2,7 +2,7 @@ import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.suggestion.SuggestionProvider; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.room.RoomTemplate; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.SharedSuggestionProvider; @@ -13,30 +13,31 @@ import java.util.Set; public class Suggestors { - public static final SuggestionProvider ROOM_TEMPLATES = (ctx, builder) -> - SharedSuggestionProvider.suggestResource(getRegistryValues(ctx, RoomTemplate.REGISTRY_KEY), builder); + public static final SuggestionProvider ROOM_TEMPLATES = (ctx, builder) -> + SharedSuggestionProvider.suggestResource(getRegistryValues(ctx, RoomTemplate.REGISTRY_KEY), builder); // public static final SuggestionProvider OWNED_ROOM_CODES = (ctx, builder) -> { // final var owner = ctx.getSource().getPlayerOrException(); // -// final var codes = RoomApi.owners() +// final var codes = CompactMachines.roomApi().owners() // .findByOwner(owner.getUUID()) // .toList(); // // return SharedSuggestionProvider.suggest(codes, builder); // }; - public static final SuggestionProvider ROOM_CODES = (ctx, builder) -> { - final var codes = RoomApi.registrar() - .allRoomCodes() - .toList(); + public static final SuggestionProvider ROOM_CODES = (ctx, builder) -> { + final var codes = CompactMachines.roomApi() + .registrar() + .allRoomCodes() + .toList(); - return SharedSuggestionProvider.suggest(codes, builder); - }; + return SharedSuggestionProvider.suggest(codes, builder); + }; - private static Set getRegistryValues(CommandContext ctx, ResourceKey> keyType) { - return ctx.getSource().registryAccess() - .registryOrThrow(keyType) - .keySet(); - } + private static Set getRegistryValues(CommandContext ctx, ResourceKey> keyType) { + return ctx.getSource().registryAccess() + .registryOrThrow(keyType) + .keySet(); + } } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMEjectSubcommand.java b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMEjectSubcommand.java index d6c4c007..a02a256a 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMEjectSubcommand.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMEjectSubcommand.java @@ -3,8 +3,7 @@ import com.mojang.brigadier.builder.ArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import dev.compactmods.machines.api.dimension.MissingDimensionException; -import dev.compactmods.machines.api.room.history.PlayerHistoryApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.util.PlayerUtil; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; @@ -38,7 +37,7 @@ private static int execExecutingPlayer(CommandContext ctx) t final MinecraftServer server = ctx.getSource().getServer(); server.submitAsync(() -> { - PlayerHistoryApi.historyManager().clearHistory(player); + CompactMachines.playerHistoryApi().entryPoints().clearHistory(player); }); PlayerUtil.teleportPlayerToRespawnOrOverworld(ctx.getSource().getServer(), player); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMGiveMachineSubcommand.java b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMGiveMachineSubcommand.java index 2968c36e..ebdbecf6 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMGiveMachineSubcommand.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMGiveMachineSubcommand.java @@ -4,7 +4,7 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.room.RoomTemplate; import dev.compactmods.machines.LoggingUtil; import dev.compactmods.machines.api.command.CommandTranslations; @@ -125,7 +125,7 @@ private static void createAndGiveNewMachine(CommandSourceStack src, ResourceLoca } private static void createAndGiveExistingRoom(String roomCode, ServerPlayer player, CommandSourceStack src) { - RoomApi.registrar().get(roomCode).ifPresentOrElse(room -> { + CompactMachines.roomApi().registrar().get(roomCode).ifPresentOrElse(room -> { ItemStack newItem = Machines.Items.boundToRoom(room.code(), room.defaultMachineColor()); if (!player.addItem(newItem)) { src.sendFailure(CommandTranslations.CANNOT_GIVE_MACHINE.get()); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMRebindSubcommand.java b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMRebindSubcommand.java index dc66d347..4fe9aa11 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMRebindSubcommand.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMRebindSubcommand.java @@ -4,8 +4,8 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.machine.MachineTranslations; -import dev.compactmods.machines.api.room.RoomApi; import dev.compactmods.machines.LoggingUtil; import dev.compactmods.machines.config.ServerConfig; import dev.compactmods.machines.machine.block.BoundCompactMachineBlockEntity; @@ -32,7 +32,7 @@ private static int doRebind(CommandContext ctx) throws Comma final var LOGS = LoggingUtil.modLog(); - final var roomProvider = RoomApi.registrar(); + final var roomProvider = CompactMachines.roomApi().registrar(); final var rebindingMachine = BlockPosArgument.getLoadedBlockPos(ctx, "pos"); final var roomCode = StringArgumentType.getString(ctx, "bindTo"); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMRoomsSubcommand.java b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMRoomsSubcommand.java index 44b57d79..c9c602f9 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMRoomsSubcommand.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMRoomsSubcommand.java @@ -3,8 +3,8 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.machine.MachineTranslations; -import dev.compactmods.machines.api.room.RoomApi; import dev.compactmods.machines.api.command.CommandTranslations; import dev.compactmods.machines.api.dimension.CompactDimension; import dev.compactmods.machines.api.machine.MachineConstants; @@ -74,7 +74,7 @@ private static int exec(CommandContext ctx) { // long grandTotal = ls.build().sum(); // src.sendSuccess(() -> Component.translatable(CommandTranslations.IDs.MACHINE_REG_TOTAL, grandTotal).withStyle(ChatFormatting.GOLD), false); - final var roomCount = RoomApi.registrar().count(); + final var roomCount = CompactMachines.roomApi().registrar().count(); src.sendSuccess(() -> Component.translatable(CommandTranslations.IDs.ROOM_COUNT, roomCount), false); return 0; @@ -83,7 +83,7 @@ private static int exec(CommandContext ctx) { private static int fetchByChunkPos(CommandContext ctx) { final var chunkPos = ColumnPosArgument.getColumnPos(ctx, "chunk"); - final var m = RoomApi.chunkManager() + final var m = CompactMachines.roomApi().chunkManager() .findRoomByChunk(chunkPos.toChunkPos()) // FIXME Translations @@ -106,7 +106,7 @@ private static int fetchByMachineBlock(CommandContext ctx) t if (level.getBlockEntity(block) instanceof BoundCompactMachineBlockEntity be) { final var roomCode = be.connectedRoom(); - RoomApi.registrar().get(roomCode).ifPresent(roomInfo -> { + CompactMachines.roomApi().registrar().get(roomCode).ifPresent(roomInfo -> { ctx.getSource().sendSuccess(() -> RoomTranslations.MACHINE_ROOM_INFO.apply(block, roomInfo), false); }); } else { @@ -127,7 +127,7 @@ private static int findByContainingPlayer(CommandContext ctx return -1; } - final var m = RoomApi.chunkManager() + final var m = CompactMachines.roomApi().chunkManager() .findRoomByChunk(player.chunkPosition()) .map(code -> RoomTranslations.PLAYER_ROOM_INFO.apply(player, code)) .orElse(RoomTranslations.UNKNOWN_ROOM_BY_PLAYER_CHUNK.apply(player)); @@ -141,7 +141,7 @@ public static int findByOwner(CommandContext ctx) throws Com final var owner = EntityArgument.getPlayer(ctx, "owner"); final var source = ctx.getSource(); -// final var owned = RoomApi.owners().findByOwner(owner.getUUID()).toList(); +// final var owned = CompactMachines.roomApi().owners().findByOwner(owner.getUUID()).toList(); // // // TODO Localization // if (owned.isEmpty()) { diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMTeleportSubcommand.java b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMTeleportSubcommand.java index 48559ad7..6ef01a5f 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMTeleportSubcommand.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMTeleportSubcommand.java @@ -4,8 +4,8 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import dev.compactmods.machines.api.room.RoomApi; import dev.compactmods.machines.LoggingUtil; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.dimension.MissingDimensionException; import dev.compactmods.machines.api.room.RoomTranslations; import dev.compactmods.machines.api.room.history.RoomEntryPoint; @@ -40,7 +40,7 @@ public static LiteralArgumentBuilder make() { } private static void teleportToRoom(CommandSourceStack src, MinecraftServer server, ServerPlayer player, String roomCode) { - RoomApi.registrar().get(roomCode).ifPresentOrElse(room -> { + CompactMachines.roomApi().registrar().get(roomCode).ifPresentOrElse(room -> { try { RoomHelper.teleportPlayerIntoRoom(server, player, room, RoomEntryPoint.playerUsingCommand(player)); } catch (MissingDimensionException e) { diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/SpawnSubcommand.java b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/SpawnSubcommand.java index 3fc5e937..2ffaff53 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/SpawnSubcommand.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/SpawnSubcommand.java @@ -3,7 +3,7 @@ import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.builder.ArgumentBuilder; import com.mojang.brigadier.context.CommandContext; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.command.CommandTranslations; import dev.compactmods.machines.config.ServerConfig; import net.minecraft.commands.CommandSourceStack; @@ -29,7 +29,7 @@ private static int resetRoomSpawn(CommandContext ctx) { final var src = ctx.getSource(); final var roomCode = StringArgumentType.getString(ctx, "room"); - final var spawnManager = RoomApi.spawnManager(roomCode); + final var spawnManager = CompactMachines.roomApi().spawnManager(roomCode); // FIXME roomProvider.setDefaultSpawn(); src.sendSuccess(() -> Component.translatable(CommandTranslations.IDs.SPAWN_CHANGED_SUCCESSFULLY, roomCode), true); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/compat/jade/BoundMachineProviders.java b/neoforge-main/src/main/java/dev/compactmods/machines/compat/jade/BoundMachineProviders.java index 09d61892..89b56458 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/compat/jade/BoundMachineProviders.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/compat/jade/BoundMachineProviders.java @@ -3,7 +3,7 @@ //import com.mojang.authlib.GameProfile; //import dev.compactmods.machines.api.CompactMachinesApi; //import dev.compactmods.machines.api.machine.MachineTranslations; -//import dev.compactmods.machines.api.room.RoomApi; +//import dev.compactmods.machines.api.room.CompactMachines.roomApi(); //import dev.compactmods.machines.machine.block.BoundCompactMachineBlockEntity; //import net.minecraft.ChatFormatting; //import net.minecraft.Util; @@ -56,7 +56,7 @@ // var owner = machine.getOwnerUUID().orElse(Util.NIL_UUID); // tag.putUUID("owner", owner); // -// RoomApi.room(machine.connectedRoom()).ifPresent(inst -> { +// CompactMachines.roomApi().room(machine.connectedRoom()).ifPresent(inst -> { // tag.putString("room_code", inst.code()); // }); // } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/compat/jei/CompactMachinesJeiPlugin.java b/neoforge-main/src/main/java/dev/compactmods/machines/compat/jei/CompactMachinesJeiPlugin.java index 64590299..744f2a60 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/compat/jei/CompactMachinesJeiPlugin.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/compat/jei/CompactMachinesJeiPlugin.java @@ -1,7 +1,7 @@ //package dev.compactmods.machines.compat.jei; // //import dev.compactmods.machines.api.CompactMachinesApi; -//import dev.compactmods.machines.api.room.RoomApi; +//import dev.compactmods.machines.api.room.CompactMachines.roomApi(); //import dev.compactmods.machines.CompactMachines; //import dev.compactmods.machines.machine.Machines; //import dev.compactmods.machines.shrinking.Shrinking; @@ -32,7 +32,7 @@ // Component.translatable("jei.compactmachines.machines")); // // // Add all known template JEI infos -// RoomApi.getTemplates(ServerLifecycleHooks.getCurrentServer()) +// CompactMachines.roomApi().getTemplates(ServerLifecycleHooks.getCurrentServer()) // .entrySet() // .stream() // .map(t -> Machines.Items.forNewRoom(t.getKey().location(), t.getValue())) diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/data/CMDataAttachmentFileManager.java b/neoforge-main/src/main/java/dev/compactmods/machines/data/CMDataAttachmentFileManager.java deleted file mode 100644 index 406e3a68..00000000 --- a/neoforge-main/src/main/java/dev/compactmods/machines/data/CMDataAttachmentFileManager.java +++ /dev/null @@ -1,54 +0,0 @@ -package dev.compactmods.machines.data; - -import dev.compactmods.machines.LoggingUtil; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtIo; -import net.minecraft.server.MinecraftServer; -import net.neoforged.neoforge.attachment.AttachmentHolder; - -import java.io.IOException; -import java.util.HashMap; -import java.util.function.BiFunction; - -public class CMDataAttachmentFileManager { - - protected final MinecraftServer server; - private final BiFunction creator; - private final HashMap cache; - - protected CMDataAttachmentFileManager(MinecraftServer server, BiFunction creator) { - this.server = server; - this.creator = creator; - this.cache = new HashMap<>(); - } - - public T data(Key key) { - return cache.computeIfAbsent(key, k -> creator.apply(server, key)); - } - - public void save(HolderLookup.Provider provider) { - cache.forEach((key, data) -> { - CompoundTag fullTag = new CompoundTag(); - fullTag.putString("version", "1.0"); - - if(data.hasAttachments()) { - var ad = data.serializeAttachments(provider); - if(ad != null) - fullTag.put("attachments", ad); - } - - try { - var path = data.getDataLocation(server).resolve(key.toString() + ".dat"); - NbtIo.writeCompressed(fullTag, path); - } catch (IOException e) { - LoggingUtil.modLog().error("Failed to write data: " + e.getMessage(), e); - } - }); - } - - public boolean hasData(String code) { - return cache.containsKey(code); - } - -} diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/data/CMDataFile.java b/neoforge-main/src/main/java/dev/compactmods/machines/data/CMDataFile.java index 1217a095..e4bfcead 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/data/CMDataFile.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/data/CMDataFile.java @@ -1,11 +1,7 @@ package dev.compactmods.machines.data; -import dev.compactmods.machines.api.CompactMachinesApi; import net.minecraft.server.MinecraftServer; -import net.minecraft.world.level.storage.LevelResource; -import java.io.IOException; -import java.nio.file.Files; import java.nio.file.Path; public interface CMDataFile { @@ -14,19 +10,5 @@ default String getDataVersion() { return "1.0.0"; } - default Path getDataLocation(MinecraftServer server) { - return server.getWorldPath(LevelResource.ROOT) - .resolve(CompactMachinesApi.MOD_ID) - .resolve("data"); - } - - static void ensureDirExists(Path dir) { - if(!Files.exists(dir)) { - try { - Files.createDirectories(dir); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } + Path getDataLocation(MinecraftServer server); } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/data/DataFileUtil.java b/neoforge-main/src/main/java/dev/compactmods/machines/data/DataFileUtil.java new file mode 100644 index 00000000..5afa5bf0 --- /dev/null +++ b/neoforge-main/src/main/java/dev/compactmods/machines/data/DataFileUtil.java @@ -0,0 +1,37 @@ +package dev.compactmods.machines.data; + +import com.mojang.serialization.Codec; +import dev.compactmods.machines.room.RoomRegistrar; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtAccounter; +import net.minecraft.nbt.NbtIo; +import net.minecraft.nbt.NbtOps; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +public class DataFileUtil { + + public static void ensureDirExists(Path dir) { + if(!Files.exists(dir)) { + try { + Files.createDirectories(dir); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + public static T loadFileWithCodec(File file, Codec codec) { + try (var is = new FileInputStream(file)) { + final var tag = NbtIo.readCompressed(is, NbtAccounter.unlimitedHeap()); + return codec.parse(NbtOps.INSTANCE, tag.contains("data") ? tag.getCompound("data") : new CompoundTag()) + .getOrThrow(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/data/DataManagerBuilder.java b/neoforge-main/src/main/java/dev/compactmods/machines/data/DataManagerBuilder.java deleted file mode 100644 index b5bef2d9..00000000 --- a/neoforge-main/src/main/java/dev/compactmods/machines/data/DataManagerBuilder.java +++ /dev/null @@ -1,55 +0,0 @@ -package dev.compactmods.machines.data; - -import dev.compactmods.machines.data.manager.CMKeyedDataFileManager; -import dev.compactmods.machines.data.manager.CMSingletonDataFileManager; -import dev.compactmods.machines.data.manager.IDataFileManager; -import dev.compactmods.machines.data.manager.IKeyedDataFileManager; -import dev.compactmods.machines.data.room.RoomDataAttachments; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; - -import java.util.function.BiFunction; -import java.util.function.Function; - -public class DataManagerBuilder { - - public static > DataManagerBuilder.Keyed keyed(MinecraftServer server, ResourceLocation id) { - return new Keyed<>(server, id); - } - - public static > DataManagerBuilder.Singleton singleton(MinecraftServer server, ResourceLocation id) { - return new Singleton<>(server, id); - } - - public static class Keyed> { - - private final MinecraftServer server; - private final ResourceLocation id; - private BiFunction factory; - - public Keyed(MinecraftServer server, ResourceLocation id) { - this.server = server; - this.id = id; - } - - public IKeyedDataFileManager build() { - return new CMKeyedDataFileManager<>(server, factory); - } - } - - public static class Singleton> { - - private final MinecraftServer server; - private final ResourceLocation id; - private Function factory; - - public Singleton(MinecraftServer server, ResourceLocation id) { - this.server = server; - this.id = id; - } - - public IDataFileManager build() { - return new CMSingletonDataFileManager<>(server, "", factory); - } - } -} diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/data/manager/CMKeyedDataFileManager.java b/neoforge-main/src/main/java/dev/compactmods/machines/data/manager/CMKeyedDataFileManager.java index cbda9e38..f9c904da 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/data/manager/CMKeyedDataFileManager.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/data/manager/CMKeyedDataFileManager.java @@ -1,19 +1,18 @@ package dev.compactmods.machines.data.manager; -import com.mojang.serialization.Codec; import dev.compactmods.machines.LoggingUtil; import dev.compactmods.machines.data.CMDataFile; import dev.compactmods.machines.data.CodecHolder; +import dev.compactmods.machines.data.DataFileUtil; +import dev.compactmods.machines.room.RoomRegistrar; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtAccounter; import net.minecraft.nbt.NbtIo; import net.minecraft.nbt.NbtOps; import net.minecraft.server.MinecraftServer; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.util.HashMap; +import java.util.Optional; import java.util.function.BiFunction; public class CMKeyedDataFileManager> implements IKeyedDataFileManager { @@ -33,11 +32,17 @@ public T data(Key key) { return cache.computeIfAbsent(key, k -> { var inst = creator.apply(server, k); var dir = inst.getDataLocation(server); - CMDataFile.ensureDirExists(dir); - return loadItem(dir.resolve(k.toString() + ".dat").toFile(), inst.codec()); + DataFileUtil.ensureDirExists(dir); + final var file = dir.resolve(k.toString() + ".dat").toFile(); + return !file.exists() ? inst : DataFileUtil.loadFileWithCodec(file, inst.codec()); }); } + @Override + public Optional optionalData(Key key) { + return hasData(key) ? Optional.ofNullable(data(key)) : Optional.empty(); + } + public void save() { cache.forEach((key, data) -> { var fullData = new CompoundTag(); @@ -57,18 +62,7 @@ public void save() { }); } - protected T loadItem(File file, Codec codec) { - try (var is = new FileInputStream(file)) { - final var tag = NbtIo.readCompressed(is, NbtAccounter.unlimitedHeap()); - return codec.parse(NbtOps.INSTANCE, tag.contains("data") ? tag.getCompound("data") : new CompoundTag()) - .getOrThrow(); - - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - public boolean hasData(String code) { - return cache.containsKey(code); + public boolean hasData(Key key) { + return cache.containsKey(key); } } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/data/manager/CMSingletonDataFileManager.java b/neoforge-main/src/main/java/dev/compactmods/machines/data/manager/CMSingletonDataFileManager.java index 88039f6d..fc77e0a9 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/data/manager/CMSingletonDataFileManager.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/data/manager/CMSingletonDataFileManager.java @@ -1,48 +1,41 @@ package dev.compactmods.machines.data.manager; -import com.mojang.serialization.Codec; import dev.compactmods.machines.LoggingUtil; import dev.compactmods.machines.data.CMDataFile; import dev.compactmods.machines.data.CodecHolder; +import dev.compactmods.machines.data.DataFileUtil; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtAccounter; import net.minecraft.nbt.NbtIo; import net.minecraft.nbt.NbtOps; import net.minecraft.server.MinecraftServer; -import org.jetbrains.annotations.Nullable; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.util.function.Function; public class CMSingletonDataFileManager> implements IDataFileManager { protected final MinecraftServer server; - private final Function creator; private final String dataKey; - private @Nullable T instance; + private final T instance; - public CMSingletonDataFileManager(MinecraftServer server, String dataKey, Function creator) { + public CMSingletonDataFileManager(MinecraftServer server, String dataKey, T instance) { this.server = server; this.dataKey = dataKey; - this.creator = creator; + this.instance = instance; } public T data() { - if (instance == null) { - var inst = creator.apply(server); - var dir = inst.getDataLocation(server); - CMDataFile.ensureDirExists(dir); - final var file = dir.resolve(dataKey + ".dat").toFile(); - instance = file.exists() ? loadItem(file, inst.codec()) : inst; - } - return this.instance; } + private void ensureFileReady() { + var dir = instance.getDataLocation(server); + DataFileUtil.ensureDirExists(dir); + } + public void save() { if (instance != null) { + ensureFileReady(); + var fullData = new CompoundTag(); fullData.putString("version", instance.getDataVersion()); @@ -60,14 +53,5 @@ public void save() { } } - protected T loadItem(File file, Codec codec) { - try (var is = new FileInputStream(file)) { - final var tag = NbtIo.readCompressed(is, NbtAccounter.unlimitedHeap()); - return codec.parse(NbtOps.INSTANCE, tag.contains("data") ? tag.getCompound("data") : new CompoundTag()) - .getOrThrow(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/data/manager/IKeyedDataFileManager.java b/neoforge-main/src/main/java/dev/compactmods/machines/data/manager/IKeyedDataFileManager.java index 80100e52..a0b14622 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/data/manager/IKeyedDataFileManager.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/data/manager/IKeyedDataFileManager.java @@ -3,8 +3,14 @@ import dev.compactmods.machines.data.CMDataFile; import dev.compactmods.machines.data.CodecHolder; +import java.util.Optional; + public interface IKeyedDataFileManager> { T data(Key key); + Optional optionalData(Key key); + void save(); + } + diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/data/room/RoomAttachmentDataManager.java b/neoforge-main/src/main/java/dev/compactmods/machines/data/room/RoomAttachmentDataManager.java deleted file mode 100644 index cc6f80e5..00000000 --- a/neoforge-main/src/main/java/dev/compactmods/machines/data/room/RoomAttachmentDataManager.java +++ /dev/null @@ -1,16 +0,0 @@ -package dev.compactmods.machines.data.room; - -import dev.compactmods.machines.api.room.data.IRoomDataAttachmentAccessor; -import dev.compactmods.machines.data.CMDataAttachmentFileManager; -import net.minecraft.server.MinecraftServer; - -public class RoomAttachmentDataManager extends CMDataAttachmentFileManager implements IRoomDataAttachmentAccessor { - - public RoomAttachmentDataManager(MinecraftServer server) { - super(server, (serv, key) -> new RoomDataAttachments(key)); - } - - public RoomDataAttachments roomData(String roomCode) { - return data(roomCode); - } -} diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/data/room/RoomDataAttachments.java b/neoforge-main/src/main/java/dev/compactmods/machines/data/room/RoomDataAttachments.java index 679dd846..56584a6d 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/data/room/RoomDataAttachments.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/data/room/RoomDataAttachments.java @@ -1,29 +1,41 @@ package dev.compactmods.machines.data.room; import com.mojang.serialization.Codec; -import dev.compactmods.machines.api.CompactMachinesApi; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.compactmods.machines.api.room.data.CMRoomDataLocations; import dev.compactmods.machines.data.CMDataFile; import dev.compactmods.machines.data.CodecHolder; +import net.minecraft.nbt.CompoundTag; import net.minecraft.server.MinecraftServer; -import net.minecraft.world.level.storage.LevelResource; import net.neoforged.neoforge.attachment.AttachmentHolder; +import net.neoforged.neoforge.attachment.IAttachmentHolder; import java.nio.file.Path; -public class RoomDataAttachments extends AttachmentHolder implements CMDataFile, CodecHolder { +public class RoomDataAttachments extends AttachmentHolder implements CMDataFile, CodecHolder, IAttachmentHolder { private final String roomCode; + private final Codec codec; - RoomDataAttachments(String roomCode) { + public RoomDataAttachments(MinecraftServer server, String roomCode) { this.roomCode = roomCode; + this.codec = makeCodec(server); + } + + public static Codec makeCodec(MinecraftServer server) { + return RecordCodecBuilder.create(i -> i.group( + Codec.STRING.fieldOf("room_code").forGetter(RoomDataAttachments::roomCode), + CompoundTag.CODEC.fieldOf("attachments").forGetter(inst -> inst.serializeAttachments(server.registryAccess())) + ).apply(i, (roomCode, ct) -> { + var inst = new RoomDataAttachments(server, roomCode); + inst.deserializeAttachments(server.registryAccess(), ct); + return inst; + })); } @Override public Path getDataLocation(MinecraftServer server) { - return server.getWorldPath(LevelResource.ROOT) - .resolve(CompactMachinesApi.MOD_ID) - .resolve("data") - .resolve("room_data"); + return CMRoomDataLocations.ROOM_DATA_ATTACHMENTS.apply(server); } public String roomCode() { @@ -32,6 +44,6 @@ public String roomCode() { @Override public Codec codec() { - return null; + return codec; } } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlock.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlock.java index d2b0b1e4..64667086 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlock.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlock.java @@ -1,7 +1,7 @@ package dev.compactmods.machines.machine.block; import dev.compactmods.machines.LoggingUtil; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.shrinking.PSDTags; import dev.compactmods.machines.machine.config.EnumMachinePlayersBreakHandling; import dev.compactmods.machines.config.ServerConfig; @@ -119,7 +119,7 @@ protected InteractionResult useWithoutItem(BlockState state, Level level, BlockP if (!level.isClientSide && !(player instanceof FakePlayer)) { level.getBlockEntity(pos, Machines.BlockEntities.MACHINE.get()).ifPresent(machine -> { final var roomCode = machine.connectedRoom(); - RoomApi.room(roomCode).ifPresent(inst -> { + CompactMachines.room(roomCode).ifPresent(inst -> { if (player instanceof ServerPlayer sp) { sp.setData(Rooms.DataAttachments.OPEN_MACHINE_POS, machine.getLevelPosition()); sp.openMenu(MachineRoomMenu.provider(sp.server, inst), (buf) -> { diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlockEntity.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlockEntity.java index fb11dea4..c577f7e8 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlockEntity.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlockEntity.java @@ -1,7 +1,7 @@ package dev.compactmods.machines.machine.block; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.machine.block.IBoundCompactMachineBlockEntity; -import dev.compactmods.machines.api.room.RoomApi; import dev.compactmods.machines.machine.Machines; import net.minecraft.core.BlockPos; import net.minecraft.core.GlobalPos; @@ -21,135 +21,135 @@ public class BoundCompactMachineBlockEntity extends BlockEntity implements IBoundCompactMachineBlockEntity { - protected UUID owner; - private String roomCode; + protected UUID owner; + private String roomCode; - @Nullable - private Component customName; + @Nullable + private Component customName; - public BoundCompactMachineBlockEntity(BlockPos pos, BlockState state) { - super(Machines.BlockEntities.MACHINE.get(), pos, state); - } + public BoundCompactMachineBlockEntity(BlockPos pos, BlockState state) { + super(Machines.BlockEntities.MACHINE.get(), pos, state); + } - @Override - protected void loadAdditional(CompoundTag nbt, HolderLookup.Provider holders) { - super.loadAdditional(nbt, holders); - if (nbt.contains(NBT_ROOM_CODE)) { - this.roomCode = nbt.getString(NBT_ROOM_CODE); - } + @Override + protected void loadAdditional(CompoundTag nbt, HolderLookup.Provider holders) { + super.loadAdditional(nbt, holders); + if (nbt.contains(NBT_ROOM_CODE)) { + this.roomCode = nbt.getString(NBT_ROOM_CODE); + } - if (nbt.contains(NBT_OWNER)) { - owner = nbt.getUUID(NBT_OWNER); - } else { - owner = null; - } - } + if (nbt.contains(NBT_OWNER)) { + owner = nbt.getUUID(NBT_OWNER); + } else { + owner = null; + } + } - @Override - protected void saveAdditional(@NotNull CompoundTag nbt, HolderLookup.Provider holders) { - super.saveAdditional(nbt, holders); + @Override + protected void saveAdditional(@NotNull CompoundTag nbt, HolderLookup.Provider holders) { + super.saveAdditional(nbt, holders); - if (owner != null) { - nbt.putUUID(NBT_OWNER, this.owner); - } + if (owner != null) { + nbt.putUUID(NBT_OWNER, this.owner); + } - if (roomCode != null) - nbt.putString(NBT_ROOM_CODE, roomCode); - } + if (roomCode != null) + nbt.putString(NBT_ROOM_CODE, roomCode); + } - @Override - public CompoundTag getUpdateTag(HolderLookup.Provider provider) { - var data = super.getUpdateTag(provider); - saveAdditional(data, provider); + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider provider) { + var data = super.getUpdateTag(provider); + saveAdditional(data, provider); - if (this.roomCode != null) { - // data.putString(ROOM_POS_NBT, room); - data.putString(NBT_ROOM_CODE, roomCode); - } + if (this.roomCode != null) { + // data.putString(ROOM_POS_NBT, room); + data.putString(NBT_ROOM_CODE, roomCode); + } - if (this.owner != null) - data.putUUID("owner", this.owner); + if (this.owner != null) + data.putUUID("owner", this.owner); - return data; - } + return data; + } - @Override - public void handleUpdateTag(CompoundTag tag, HolderLookup.Provider provider) { - super.handleUpdateTag(tag, provider); + @Override + public void handleUpdateTag(CompoundTag tag, HolderLookup.Provider provider) { + super.handleUpdateTag(tag, provider); - if(tag.contains(NBT_ROOM_CODE)) - this.roomCode = tag.getString(NBT_ROOM_CODE); + if (tag.contains(NBT_ROOM_CODE)) + this.roomCode = tag.getString(NBT_ROOM_CODE); - if (tag.contains("players")) { - CompoundTag players = tag.getCompound("players"); - // playerData = CompactMachinePlayerData.fromNBT(players); + if (tag.contains("players")) { + CompoundTag players = tag.getCompound("players"); + // playerData = CompactMachinePlayerData.fromNBT(players); - } + } - if (tag.contains("owner")) - owner = tag.getUUID("owner"); - } + if (tag.contains("owner")) + owner = tag.getUUID("owner"); + } - public Optional getOwnerUUID() { - return Optional.ofNullable(this.owner); - } + public Optional getOwnerUUID() { + return Optional.ofNullable(this.owner); + } - public void setOwner(UUID owner) { - this.owner = owner; - } + public void setOwner(UUID owner) { + this.owner = owner; + } - public boolean hasPlayersInside() { - // TODO - return false; - } + public boolean hasPlayersInside() { + // TODO + return false; + } - public GlobalPos getLevelPosition() { - return GlobalPos.of(level.dimension(), worldPosition); - } + public GlobalPos getLevelPosition() { + return GlobalPos.of(level.dimension(), worldPosition); + } - public void setConnectedRoom(String roomCode) { - if (level instanceof ServerLevel sl) { - // FIXME: Register machine location in room's connection graph + public void setConnectedRoom(String roomCode) { + if (level instanceof ServerLevel sl) { + // FIXME: Register machine location in room's connection graph // final var dimMachines = DimensionMachineGraph.forDimension(sl); // if (this.roomCode != null) { // dimMachines.unregisterMachine(worldPosition); // } // // dimMachines.register(worldPosition, roomCode); - this.roomCode = roomCode; - - RoomApi.room(roomCode).ifPresentOrElse(inst -> { - this.setData(Machines.Attachments.MACHINE_COLOR, inst.defaultMachineColor()); - }, - () -> { - this.setData(Machines.Attachments.MACHINE_COLOR, DyeColor.WHITE.getTextColor()); - }); - - this.setChanged(); - } - } - - public void disconnect() { - if (level instanceof ServerLevel sl) { - // FIXME: Room machine graph unregister + this.roomCode = roomCode; + + CompactMachines.room(roomCode).ifPresentOrElse(inst -> { + this.setData(Machines.Attachments.MACHINE_COLOR, inst.defaultMachineColor()); + }, + () -> { + this.setData(Machines.Attachments.MACHINE_COLOR, DyeColor.WHITE.getTextColor()); + }); + + this.setChanged(); + } + } + + public void disconnect() { + if (level instanceof ServerLevel sl) { + // FIXME: Room machine graph unregister // final var dimMachines = DimensionMachineGraph.forDimension(sl); // dimMachines.unregisterMachine(worldPosition); - sl.setBlock(worldPosition, Machines.Blocks.UNBOUND_MACHINE.get().defaultBlockState(), Block.UPDATE_ALL); - } - } + sl.setBlock(worldPosition, Machines.Blocks.UNBOUND_MACHINE.get().defaultBlockState(), Block.UPDATE_ALL); + } + } - @NotNull - public String connectedRoom() { - return roomCode; - } + @NotNull + public String connectedRoom() { + return roomCode; + } - public Optional getCustomName() { - return Optional.ofNullable(customName); - } + public Optional getCustomName() { + return Optional.ofNullable(customName); + } - public void setCustomName(Component customName) { - this.customName = customName; - this.setChanged(); - } + public void setCustomName(Component customName) { + this.customName = customName; + this.setChanged(); + } } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineBlock.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineBlock.java index c34c46ef..6abfcd28 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineBlock.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineBlock.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.machine.block; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.room.RoomTemplate; import dev.compactmods.machines.LoggingUtil; import dev.compactmods.machines.api.dimension.MissingDimensionException; @@ -73,7 +73,7 @@ protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Lev try { // Generate a new machine room - final var newRoom = RoomApi.newRoom(server, template, sp.getUUID()); + final var newRoom = CompactMachines.newRoom(server, template, sp.getUUID()); // Change into a bound machine block level.setBlock(pos, Machines.Blocks.BOUND_MACHINE.get().defaultBlockState(), Block.UPDATE_ALL); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/item/BoundCompactMachineItem.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/item/BoundCompactMachineItem.java index ffc28ccc..01af4fa4 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/item/BoundCompactMachineItem.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/item/BoundCompactMachineItem.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.machine.item; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.machine.MachineTranslations; import dev.compactmods.machines.machine.Machines; import net.minecraft.Util; @@ -17,7 +17,7 @@ public class BoundCompactMachineItem extends BlockItem { public static final String NBT_ROOM_DIMENSIONS = "room_dimensions"; - private static final String FALLBACK_ID = Util.makeDescriptionId("block", CompactMachinesApi.modRL("bound_machine_fallback")); + private static final String FALLBACK_ID = Util.makeDescriptionId("block", CompactMachines.modRL("bound_machine_fallback")); public BoundCompactMachineItem(Properties builder) { super(Machines.Blocks.BOUND_MACHINE.get(), builder); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedLeavePacket.java b/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedLeavePacket.java index 6024d0ad..e01ef78e 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedLeavePacket.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedLeavePacket.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.network; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.room.RoomHelper; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.level.ServerPlayer; @@ -8,7 +8,7 @@ public record PlayerRequestedLeavePacket() implements CustomPacketPayload { - public static final Type TYPE = new Type<>(CompactMachinesApi.modRL("player_requested_to_leave_room")); + public static final Type TYPE = new Type<>(CompactMachines.modRL("player_requested_to_leave_room")); public static final IPayloadHandler HANDLER = (pkt, ctx) -> { final var player = ctx.player(); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedRoomUIPacket.java b/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedRoomUIPacket.java index 4def0458..1a772b1a 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedRoomUIPacket.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedRoomUIPacket.java @@ -1,7 +1,6 @@ package dev.compactmods.machines.network; -import dev.compactmods.machines.api.CompactMachinesApi; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.room.Rooms; import dev.compactmods.machines.room.ui.preview.MachineRoomMenu; import net.minecraft.core.GlobalPos; @@ -14,7 +13,7 @@ import java.util.Optional; public record PlayerRequestedRoomUIPacket(String roomCode) implements CustomPacketPayload { - public static final Type TYPE = new Type<>(CompactMachinesApi.modRL("player_wants_to_open_room_ui")); + public static final Type TYPE = new Type<>(CompactMachines.modRL("player_wants_to_open_room_ui")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ByteBufCodecs.STRING_UTF8, PlayerRequestedRoomUIPacket::roomCode, @@ -23,7 +22,7 @@ public record PlayerRequestedRoomUIPacket(String roomCode) implements CustomPack public static final IPayloadHandler HANDLER = (pkt, ctx) -> { final var player = ctx.player(); - RoomApi.room(pkt.roomCode).ifPresent(inst -> { + CompactMachines.room(pkt.roomCode).ifPresent(inst -> { final var server = player.getServer(); player.openMenu(MachineRoomMenu.provider(server, inst), buf -> { final var pos = player.getData(Rooms.DataAttachments.OPEN_MACHINE_POS); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedTeleportPacket.java b/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedTeleportPacket.java index c9ecf286..9f5fc5b5 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedTeleportPacket.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedTeleportPacket.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.network; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.room.RoomHelper; import net.minecraft.core.GlobalPos; import net.minecraft.network.FriendlyByteBuf; @@ -12,7 +12,7 @@ public record PlayerRequestedTeleportPacket(GlobalPos machine, String room) implements CustomPacketPayload { - public static final Type TYPE = new Type<>(CompactMachinesApi.modRL("player_teleport")); + public static final Type TYPE = new Type<>(CompactMachines.modRL("player_teleport")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( GlobalPos.STREAM_CODEC, PlayerRequestedTeleportPacket::machine, diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedUpgradeUIPacket.java b/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedUpgradeUIPacket.java index ea2452b9..2776df3f 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedUpgradeUIPacket.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/network/PlayerRequestedUpgradeUIPacket.java @@ -1,7 +1,6 @@ package dev.compactmods.machines.network; -import dev.compactmods.machines.api.CompactMachinesApi; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.room.ui.upgrades.RoomUpgradeMenu; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; @@ -11,11 +10,11 @@ public record PlayerRequestedUpgradeUIPacket(String roomCode, boolean isIsolated) implements CustomPacketPayload { - public static final Type TYPE = new Type<>(CompactMachinesApi.modRL("player_wants_to_open_room_upgrade_menu")); + public static final Type TYPE = new Type<>(CompactMachines.modRL("player_wants_to_open_room_upgrade_menu")); public static final IPayloadHandler HANDLER = (pkt, ctx) -> { final var player = ctx.player(); - RoomApi.room(pkt.roomCode()).ifPresent(inst -> { + CompactMachines.room(pkt.roomCode()).ifPresent(inst -> { player.openMenu(RoomUpgradeMenu.provider(inst), buf -> { buf.writeBoolean(pkt.isIsolated); buf.writeUtf(pkt.roomCode()); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/network/SyncRoomMetadataPacket.java b/neoforge-main/src/main/java/dev/compactmods/machines/network/SyncRoomMetadataPacket.java index 82267973..ffc6fa60 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/network/SyncRoomMetadataPacket.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/network/SyncRoomMetadataPacket.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.network; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.client.room.ClientRoomPacketHandler; import net.minecraft.core.UUIDUtil; import net.minecraft.network.FriendlyByteBuf; @@ -13,7 +13,7 @@ public record SyncRoomMetadataPacket(String roomCode, UUID owner) implements CustomPacketPayload { - public static final Type TYPE = new Type<>(CompactMachinesApi.modRL("sync_room_metadata")); + public static final Type TYPE = new Type<>(CompactMachines.modRL("sync_room_metadata")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ByteBufCodecs.STRING_UTF8, SyncRoomMetadataPacket::roomCode, diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/network/machine/MachineColorSyncPacket.java b/neoforge-main/src/main/java/dev/compactmods/machines/network/machine/MachineColorSyncPacket.java index b7995113..d2438528 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/network/machine/MachineColorSyncPacket.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/network/machine/MachineColorSyncPacket.java @@ -2,7 +2,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import net.minecraft.core.GlobalPos; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; @@ -11,7 +11,7 @@ import net.neoforged.neoforge.network.handling.IPayloadHandler; public record MachineColorSyncPacket(GlobalPos position, int color) implements CustomPacketPayload { - public static final Type TYPE = new Type<>(CompactMachinesApi.modRL("update_machine_color")); + public static final Type TYPE = new Type<>(CompactMachines.modRL("update_machine_color")); public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( GlobalPos.CODEC.fieldOf("position").forGetter(MachineColorSyncPacket::position), diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/player/PlayerEntryPointHistoryManager.java b/neoforge-main/src/main/java/dev/compactmods/machines/player/PlayerEntryPointHistoryManager.java index 4b167822..dfed95bf 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/player/PlayerEntryPointHistoryManager.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/player/PlayerEntryPointHistoryManager.java @@ -6,9 +6,9 @@ import dev.compactmods.feather.edge.impl.EmptyEdge; import dev.compactmods.feather.node.Node; import dev.compactmods.feather.traversal.GraphNodeTransformationFunction; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.dimension.CompactDimension; import dev.compactmods.machines.api.room.history.IPlayerEntryPointHistoryManager; -import dev.compactmods.machines.api.room.RoomApi; import dev.compactmods.machines.api.room.history.PlayerRoomHistoryEntry; import dev.compactmods.machines.api.room.history.RoomEntryPoint; import dev.compactmods.machines.api.room.history.RoomEntryResult; @@ -138,7 +138,7 @@ private Map> playerRoomHistory() { } public RoomEntryResult enterRoom(UUID player, PlayerRoomHistoryEntry history) { - if (!RoomApi.isValidRoomCode(history.roomCode())) + if (!CompactMachines.isValidRoomCode(history.roomCode())) return RoomEntryResult.FAILED_ROOM_INVALID; PlayerReferenceNode playerNode = getOrCreatePlayer(player); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomApiInstance.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomApiInstance.java deleted file mode 100644 index 7e4476bc..00000000 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomApiInstance.java +++ /dev/null @@ -1,28 +0,0 @@ -package dev.compactmods.machines.room; - -import dev.compactmods.machines.api.room.IRoomApi; -import dev.compactmods.machines.api.room.IRoomRegistrar; -import dev.compactmods.machines.api.room.spatial.IRoomChunkManager; -import dev.compactmods.machines.api.room.spatial.IRoomChunks; -import dev.compactmods.machines.api.room.spawn.IRoomSpawnManager; -import dev.compactmods.machines.api.room.spawn.IRoomSpawnManagers; - -import java.util.function.Predicate; - -public record RoomApiInstance( - Predicate roomCodeValidator, - IRoomRegistrar registrar, - IRoomSpawnManagers spawnManagers, - IRoomChunkManager chunkManager -) implements IRoomApi { - - @Override - public IRoomSpawnManager spawnManager(String roomCode) { - return spawnManagers.get(roomCode); - } - - @Override - public IRoomChunks chunks(String roomCode) { - return chunkManager.get(roomCode); - } -} diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomBlocks.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomBlocks.java index 7d648340..4eaff215 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomBlocks.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomBlocks.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.room; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.dimension.CompactDimension; import dev.compactmods.machines.api.dimension.MissingDimensionException; import dev.compactmods.machines.api.room.RoomInstance; @@ -21,7 +21,7 @@ public static CompletableFuture getInternalBlocks(MinecraftSe final var compactDim = server.getLevel(CompactDimension.LEVEL_KEY); final var chunkSource = compactDim.getChunkSource(); - final var chunkLoading = RoomApi.chunks(room.code()) + final var chunkLoading = CompactMachines.roomApi().chunks(room.code()) .stream() .map(cp -> chunkSource.getChunkFuture(cp.x, cp.z, ChunkStatus.FULL, true)) .toList(); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomEventHandler.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomEventHandler.java index 609f55ae..c10ee291 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomEventHandler.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomEventHandler.java @@ -1,8 +1,8 @@ package dev.compactmods.machines.room; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.Translations; import dev.compactmods.machines.api.dimension.CompactDimension; -import dev.compactmods.machines.api.room.RoomApi; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; @@ -76,9 +76,9 @@ private static boolean positionInsideRoom(Entity entity, Vec3 target) { final var level = entity.level(); if (!level.dimension().equals(CompactDimension.LEVEL_KEY)) return false; - return RoomApi.chunkManager() + return CompactMachines.roomApi().chunkManager() .findRoomByChunk(entity.chunkPosition()) - .flatMap(RoomApi::room) + .flatMap(CompactMachines::room) .map(ib -> ib.boundaries().innerBounds().contains(target)) .orElse(false); } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomHelper.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomHelper.java index d1a6cc23..4c257e09 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomHelper.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomHelper.java @@ -1,9 +1,8 @@ package dev.compactmods.machines.room; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.room.RoomInstance; import dev.compactmods.machines.api.room.history.IPlayerEntryPointHistoryManager; -import dev.compactmods.machines.api.room.history.PlayerHistoryApi; import dev.compactmods.machines.api.room.history.RoomEntryPoint; import dev.compactmods.machines.LoggingUtil; import dev.compactmods.machines.api.dimension.CompactDimension; @@ -32,7 +31,7 @@ public abstract class RoomHelper { public static boolean entityInsideRoom(LivingEntity entity, String roomCode) { // Recursion check. Player is inside the room being queried. if (entity.level().dimension().equals(CompactDimension.LEVEL_KEY)) { - return RoomApi.chunks(roomCode).hasChunk(entity.chunkPosition()); + return CompactMachines.roomApi().chunks(roomCode).hasChunk(entity.chunkPosition()); } return false; @@ -43,7 +42,7 @@ public static void teleportPlayerIntoMachine(Level machineLevel, ServerPlayer pl LOGS.debug("Player {} entering machine at: {}", player.getName(), machinePos); - RoomApi.room(roomCode).ifPresent(roomInfo -> { + CompactMachines.room(roomCode).ifPresent(roomInfo -> { try { teleportPlayerIntoRoom(serv, player, roomInfo, RoomEntryPoint.playerEnteringMachine(player)); } catch (MissingDimensionException e) { @@ -56,7 +55,7 @@ public static void teleportPlayerIntoRoom(MinecraftServer serv, ServerPlayer pla throws MissingDimensionException { final var compactDim = CompactDimension.forServer(serv); - final var history = PlayerHistoryApi.historyManager(); + final var history = CompactMachines.playerHistoryApi().entryPoints(); final var result = history.enterRoom(player, room.code(), entryPoint); LOGS.debug("Entry result: {}", result); @@ -76,7 +75,7 @@ public static void teleportPlayerIntoRoom(MinecraftServer serv, ServerPlayer pla // UUID owner; // try { -// owner = RoomApi.owners().getRoomOwner(room.code()); +// owner = CompactMachines.roomApi().owners().getRoomOwner(room.code()); // } catch (NonexistentRoomException e) { // LoggingUtil.modLog().debug("SCREM", e); // owner = Util.NIL_UUID; @@ -85,7 +84,7 @@ public static void teleportPlayerIntoRoom(MinecraftServer serv, ServerPlayer pla serv.submitAsync(() -> { player.getCooldowns().addCooldown(Shrinking.PERSONAL_SHRINKING_DEVICE.get(), 25); - final var spawns = RoomApi.spawnManager(room.code()).spawns(); + final var spawns = CompactMachines.roomApi().spawnManager(room.code()).spawns(); final var spawn = spawns.forPlayer(player.getUUID()).orElse(spawns.defaultSpawn()); player.changeDimension(CompactDimensionTransitions.to(compactDim, spawn.position(), spawn.rotation())); @@ -102,7 +101,7 @@ public static void teleportPlayerOutOfRoom(@Nonnull ServerPlayer serverPlayer) { MinecraftServer serv = serverPlayer.getServer(); assert serv != null; - final IPlayerEntryPointHistoryManager history = PlayerHistoryApi.historyManager(); + final IPlayerEntryPointHistoryManager history = CompactMachines.playerHistoryApi().entryPoints(); serv.submit(() -> { history.lastHistory(serverPlayer).ifPresentOrElse( diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomRegistrar.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomRegistrar.java index 355f0ef8..c157ff05 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomRegistrar.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomRegistrar.java @@ -1,22 +1,25 @@ package dev.compactmods.machines.room; import com.mojang.serialization.Codec; +import dev.compactmods.machines.api.CompactMachines; +import dev.compactmods.machines.api.room.data.CMRoomDataLocations; import dev.compactmods.machines.data.CMDataFile; -import dev.compactmods.machines.api.room.IRoomRegistrar; -import dev.compactmods.machines.api.room.RoomApi; import dev.compactmods.machines.api.room.RoomInstance; import dev.compactmods.machines.api.room.RoomTemplate; +import dev.compactmods.machines.api.room.registration.IRoomRegistrar; import dev.compactmods.machines.api.room.registration.IRoomBuilder; import dev.compactmods.feather.MemoryGraph; import dev.compactmods.machines.api.util.AABBAligner; import dev.compactmods.machines.data.CodecHolder; import dev.compactmods.machines.room.graph.node.RoomRegistrationNode; import dev.compactmods.machines.util.MathUtil; +import net.minecraft.server.MinecraftServer; import net.minecraft.world.phys.AABB; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.NotNull; +import java.nio.file.Path; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -67,7 +70,7 @@ public RoomInstance createNew(RoomTemplate template, UUID owner, Consumer codec() { return CODEC; diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/spawn/RoomSpawnManagers.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/spawn/RoomSpawnManagers.java index f3c1ac40..4e6d6a4f 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/spawn/RoomSpawnManagers.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/spawn/RoomSpawnManagers.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.room.spawn; -import dev.compactmods.machines.api.room.IRoomRegistrar; +import dev.compactmods.machines.api.room.registration.IRoomRegistrar; import dev.compactmods.machines.api.room.spawn.IRoomSpawnManager; import dev.compactmods.machines.api.room.spawn.IRoomSpawnManagers; diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/spawn/SpawnManager.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/spawn/SpawnManager.java index 8a38c32f..fa2338a0 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/spawn/SpawnManager.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/spawn/SpawnManager.java @@ -3,6 +3,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.UnboundedMapCodec; +import dev.compactmods.machines.api.room.data.CMRoomDataLocations; import dev.compactmods.machines.data.CMDataFile; import dev.compactmods.machines.api.room.spatial.IRoomBoundaries; import dev.compactmods.machines.api.room.spawn.IRoomSpawn; @@ -10,12 +11,14 @@ import dev.compactmods.machines.api.room.spawn.IRoomSpawns; import dev.compactmods.machines.data.CodecHolder; import net.minecraft.core.UUIDUtil; +import net.minecraft.server.MinecraftServer; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec2; import net.minecraft.world.phys.Vec3; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.nio.file.Path; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -79,6 +82,11 @@ public void setPlayerSpawn(UUID player, Vec3 location, Vec2 rotation) { playerSpawns.put(player, new RoomSpawn(location, rotation)); } + @Override + public Path getDataLocation(MinecraftServer server) { + return CMRoomDataLocations.SPAWN_DATA.apply(server); + } + @Override public Codec codec() { return null; diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/preview/MachineRoomMenu.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/preview/MachineRoomMenu.java index e2fc9621..2f0ac686 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/preview/MachineRoomMenu.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/preview/MachineRoomMenu.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.room.ui.preview; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.room.RoomInstance; import dev.compactmods.machines.room.Rooms; import net.minecraft.core.GlobalPos; @@ -45,7 +45,7 @@ public static MenuProvider provider(MinecraftServer server, RoomInstance roomIns return new MenuProvider() { @Override public Component getDisplayName() { - return Component.translatable(CompactMachinesApi.MOD_ID + ".ui.room"); + return Component.translatable(CompactMachines.MOD_ID + ".ui.room"); } @Nullable diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/preview/MachineRoomScreen.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/preview/MachineRoomScreen.java index 60ef98aa..1882e5cc 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/preview/MachineRoomScreen.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/preview/MachineRoomScreen.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.room.ui.preview; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.client.render.NineSliceRenderer; import dev.compactmods.machines.client.widget.ImageButtonBuilder; import dev.compactmods.machines.network.PlayerRequestedTeleportPacket; @@ -41,10 +41,10 @@ protected void init() { super.init(); final var psdBtnSprites = new WidgetSprites( - CompactMachinesApi.modRL("personal_shrinking_device"), - CompactMachinesApi.modRL("personal_shrinking_device_disabled"), - CompactMachinesApi.modRL("personal_shrinking_device_highlighted"), - CompactMachinesApi.modRL("personal_shrinking_device_disabled")); + CompactMachines.modRL("personal_shrinking_device"), + CompactMachines.modRL("personal_shrinking_device_disabled"), + CompactMachines.modRL("personal_shrinking_device_highlighted"), + CompactMachines.modRL("personal_shrinking_device_disabled")); this.psdButton = ImageButtonBuilder.button(psdBtnSprites) .size(12, 12) @@ -57,8 +57,8 @@ protected void init() { addRenderableWidget(psdButton); final var upgradeBtnSprites = new WidgetSprites( - CompactMachinesApi.modRL("upgrade_btn"), - CompactMachinesApi.modRL("upgrade_btn") + CompactMachines.modRL("upgrade_btn"), + CompactMachines.modRL("upgrade_btn") ); var upgradeScreenBtn = ImageButtonBuilder.button(upgradeBtnSprites) @@ -73,7 +73,7 @@ protected void init() { @Override protected void renderBg(GuiGraphics graphics, float v, int i, int i1) { - var backgroundRenderer = NineSliceRenderer.builder(CompactMachinesApi.modRL("textures/gui/psd_screen_9slice.png")) + var backgroundRenderer = NineSliceRenderer.builder(CompactMachines.modRL("textures/gui/psd_screen_9slice.png")) .area(0, 0, 248, 210) .uv(32, 32) .sliceSize(4, 4) diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/upgrades/RoomUpgradeMenu.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/upgrades/RoomUpgradeMenu.java index d7018f3e..749cac1d 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/upgrades/RoomUpgradeMenu.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/upgrades/RoomUpgradeMenu.java @@ -1,13 +1,10 @@ package dev.compactmods.machines.room.ui.upgrades; -import dev.compactmods.machines.api.CompactMachinesApi; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.room.RoomInstance; import dev.compactmods.machines.client.render.ConditionalGhostSlot; -import dev.compactmods.machines.data.room.RoomAttachmentDataManager; import dev.compactmods.machines.room.Rooms; import dev.compactmods.machines.room.upgrade.RoomUpgradeInventory; -import dev.compactmods.machines.server.CompactMachinesServer; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.world.MenuProvider; @@ -80,14 +77,13 @@ public static MenuProvider provider(RoomInstance room) { return new MenuProvider() { @Override public @NotNull Component getDisplayName() { - return Component.translatable(CompactMachinesApi.MOD_ID + ".ui.room_upgrades"); + return Component.translatable(CompactMachines.MOD_ID + ".ui.room_upgrades"); } @Override public @NotNull AbstractContainerMenu createMenu(int winId, Inventory inventory, Player player) { // TODO - Expose room data via API - var serverUpgInv = CompactMachinesServer.ROOM_DATA_ATTACHMENTS - .data(room.code()) + var serverUpgInv = CompactMachines.roomData(room.code()) .getData(Rooms.DataAttachments.UPGRADE_INV); return new RoomUpgradeMenu(winId, inventory, room.code(), serverUpgInv); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/upgrades/RoomUpgradeScreen.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/upgrades/RoomUpgradeScreen.java index 74ce76fe..96672b7b 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/upgrades/RoomUpgradeScreen.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/ui/upgrades/RoomUpgradeScreen.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.room.ui.upgrades; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.client.render.ConditionalGhostSlot; import dev.compactmods.machines.client.render.NineSliceRenderer; import dev.compactmods.machines.client.widget.ImageButtonBuilder; @@ -23,7 +23,7 @@ public class RoomUpgradeScreen extends AbstractContainerScreen { private final Inventory inventory; - private static ResourceLocation CONTAINER_BACKGROUND = CompactMachinesApi.modRL("textures/gui/psd_screen_9slice.png"); + private static ResourceLocation CONTAINER_BACKGROUND = CompactMachines.modRL("textures/gui/psd_screen_9slice.png"); WidgetSprites BACK_BTN_SPRITES = new WidgetSprites( ResourceLocation.withDefaultNamespace("recipe_book/page_backward"), @@ -39,7 +39,7 @@ public RoomUpgradeScreen(RoomUpgradeMenu menu, Inventory playerInv, Component ti this.inventoryLabelY = 26 + 32; this.imageHeight = 114 + 18 + 20; - this.backgroundRenderer = NineSliceRenderer.builder(CompactMachinesApi.modRL("textures/gui/psd_screen_9slice.png")) + this.backgroundRenderer = NineSliceRenderer.builder(CompactMachines.modRL("textures/gui/psd_screen_9slice.png")) .area(0, 0, imageWidth, imageHeight) .uv(32, 32) .sliceSize(4, 4) diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/RoomUpgradeEventHandlers.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/RoomUpgradeEventHandlers.java index 5e3011b9..8915c4b5 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/RoomUpgradeEventHandlers.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/RoomUpgradeEventHandlers.java @@ -1,11 +1,9 @@ package dev.compactmods.machines.room.upgrade; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.dimension.CompactDimension; -import dev.compactmods.machines.api.room.RoomApi; import dev.compactmods.machines.api.room.upgrade.events.lifecycle.UpgradeTickedEventListener; import dev.compactmods.machines.room.Rooms; -import dev.compactmods.machines.data.room.RoomAttachmentDataManager; -import dev.compactmods.machines.server.CompactMachinesServer; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.item.Item; @@ -21,18 +19,14 @@ public class RoomUpgradeEventHandlers { public static void onLevelTick(LevelTickEvent.Post postTick) { if (postTick.getLevel() instanceof ServerLevel serverLevel && CompactDimension.isLevelCompact(serverLevel)) { - // TODO - Api instead of direct instance reference here - var roomDataManager = CompactMachinesServer.ROOM_DATA_ATTACHMENTS; - - final var rooms = RoomApi.registrar().allRooms() + final var rooms = CompactMachines.roomApi() + .registrar() + .allRooms() .collect(Collectors.toUnmodifiableSet()); for (var room : rooms) { - if (!roomDataManager.hasData(room.code())) - continue; - - roomDataManager.data(room.code()) - .getExistingData(Rooms.DataAttachments.UPGRADE_INV) + CompactMachines.existingRoomData(room.code()) + .flatMap(rd -> rd.getExistingData(Rooms.DataAttachments.UPGRADE_INV)) .ifPresent(appliedUpgrades -> { final var upgradeStacks = appliedUpgrades.items() .collect(Collectors.toUnmodifiableSet()); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/RoomUpgrades.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/RoomUpgrades.java index 1c7a7658..aff5e149 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/RoomUpgrades.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/upgrade/RoomUpgrades.java @@ -1,8 +1,7 @@ package dev.compactmods.machines.room.upgrade; import dev.compactmods.machines.CMRegistries; -import dev.compactmods.machines.api.CompactMachinesApi; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.room.upgrade.RoomUpgradeDefinition; import dev.compactmods.machines.api.room.upgrade.components.RoomUpgradeList; import dev.compactmods.machines.room.upgrade.example.TreeCutterUpgrade; @@ -14,7 +13,7 @@ public interface RoomUpgrades { - DeferredRegister> ROOM_UPGRADE_DEFINITIONS = RoomApi.roomUpgradeDR(CompactMachinesApi.MOD_ID); + DeferredRegister> ROOM_UPGRADE_DEFINITIONS = CompactMachines.roomUpgradeDR(CompactMachines.MOD_ID); DeferredHolder, DataComponentType> UPGRADE_LIST_COMPONENT = CMRegistries.DATA_COMPONENTS .registerComponentType("room_upgrades", (builder) -> builder diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/server/CompactMachinesServer.java b/neoforge-main/src/main/java/dev/compactmods/machines/server/CompactMachinesServer.java index 18c66e41..14e21808 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/server/CompactMachinesServer.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/server/CompactMachinesServer.java @@ -1,25 +1,30 @@ package dev.compactmods.machines.server; import dev.compactmods.machines.LoggingUtil; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.dimension.CompactDimension; -import dev.compactmods.machines.api.room.IRoomRegistrar; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.room.IRoomApi; +import dev.compactmods.machines.api.room.data.CMRoomDataLocations; +import dev.compactmods.machines.api.room.data.IRoomDataAttachmentAccessor; +import dev.compactmods.machines.api.room.registration.IRoomRegistrar; import dev.compactmods.machines.api.room.history.IPlayerEntryPointHistoryManager; import dev.compactmods.machines.api.room.history.IPlayerHistoryApi; -import dev.compactmods.machines.api.room.history.PlayerHistoryApi; +import dev.compactmods.machines.api.room.spatial.IRoomChunkManager; +import dev.compactmods.machines.api.room.spatial.IRoomChunks; +import dev.compactmods.machines.api.room.spawn.IRoomSpawnManager; import dev.compactmods.machines.api.room.spawn.IRoomSpawnManagers; +import dev.compactmods.machines.data.DataFileUtil; +import dev.compactmods.machines.data.manager.CMKeyedDataFileManager; import dev.compactmods.machines.data.manager.CMSingletonDataFileManager; -import dev.compactmods.machines.data.room.RoomAttachmentDataManager; +import dev.compactmods.machines.data.room.RoomDataAttachments; import dev.compactmods.machines.player.PlayerEntryPointHistoryManager; -import dev.compactmods.machines.room.RoomApiInstance; import dev.compactmods.machines.room.RoomRegistrar; import dev.compactmods.machines.room.spatial.GraphChunkManager; import dev.compactmods.machines.room.spawn.RoomSpawnManagers; import net.minecraft.server.MinecraftServer; import net.minecraft.world.level.Level; -import net.neoforged.api.distmarker.Dist; import net.neoforged.fml.common.Mod; +import net.neoforged.neoforge.attachment.IAttachmentHolder; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.event.level.LevelEvent; import net.neoforged.neoforge.event.server.ServerStartingEvent; @@ -27,16 +32,20 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; -@Mod(value = CompactMachinesApi.MOD_ID) +import java.util.Optional; +import java.util.function.Predicate; + +@Mod(value = CompactMachines.MOD_ID) public class CompactMachinesServer { private static @Nullable MinecraftServer CURRENT_SERVER; - @ApiStatus.Internal // NO TOUCHY #INeedServerCapabilities - public static CMSingletonDataFileManager PLAYER_HISTORY; + private static RoomRegistrar ROOM_REGISTRAR; + private static PlayerEntryPointHistoryManager PLAYER_HISTORY; - @ApiStatus.Internal // NO TOUCHY #INeedServerCapabilities - public static RoomAttachmentDataManager ROOM_DATA_ATTACHMENTS; + private static CMSingletonDataFileManager ROOM_REGISTRAR_DATA; + private static CMSingletonDataFileManager PLAYER_HISTORY_DATA; + private static CMKeyedDataFileManager ROOM_DATA_ATTACHMENTS; public CompactMachinesServer() { NeoForge.EVENT_BUS.addListener(CompactMachinesServer::serverStarting); @@ -52,39 +61,89 @@ public static void serverStarting(final ServerStartingEvent evt) { if (CompactMachinesServer.CURRENT_SERVER != null) { - save(); - } - - PLAYER_HISTORY = new CMSingletonDataFileManager<>(server, "player_entrypoint_history", serv -> new PlayerEntryPointHistoryManager(5)); + save(); + } // Set up room data attachments for Neo - ROOM_DATA_ATTACHMENTS = new RoomAttachmentDataManager(server); + ROOM_DATA_ATTACHMENTS = new CMKeyedDataFileManager<>(server, RoomDataAttachments::new); + + PLAYER_HISTORY = new PlayerEntryPointHistoryManager(5); + PLAYER_HISTORY_DATA = new CMSingletonDataFileManager<>(server, "player_entrypoint_history", PLAYER_HISTORY); // Set up room API - final var registrarData = new CMSingletonDataFileManager<>(server, "room_registrations", serv -> new RoomRegistrar()); - final IRoomRegistrar registrar = registrarData.data(); + var file = CMRoomDataLocations.REGISTRATION_DATA.apply(server) + .resolve("room_registrations.dat") + .toFile(); + + ROOM_REGISTRAR = file.exists() ? DataFileUtil.loadFileWithCodec(file, RoomRegistrar.CODEC) : new RoomRegistrar(); + ROOM_REGISTRAR_DATA = new CMSingletonDataFileManager<>(server, "room_registrations", ROOM_REGISTRAR); - final IRoomSpawnManagers spawnManager = new RoomSpawnManagers(registrar); + final IRoomSpawnManagers spawnManager = new RoomSpawnManagers(ROOM_REGISTRAR); final var gcm = new GraphChunkManager(); - registrar.allRooms().forEach(inst -> gcm.calculateChunks(inst.code(), inst.boundaries())); + ROOM_REGISTRAR.allRooms().forEach(inst -> gcm.calculateChunks(inst.code(), inst.boundaries())); - RoomApi.INSTANCE = new RoomApiInstance(registrar::isRegistered, registrar, spawnManager, gcm); + setupInternalApiStuff(spawnManager, gcm); - PlayerHistoryApi.INSTANCE = new IPlayerHistoryApi() { - @Override - public IPlayerEntryPointHistoryManager entryPoints() { - return PLAYER_HISTORY.data(); - } - }; + CURRENT_SERVER = server; modLog.debug("Completed setting up room API and data."); } + @SuppressWarnings("deprecation") + private static void setupInternalApiStuff(IRoomSpawnManagers spawnManager, GraphChunkManager gcm) { + CompactMachines.Internal.ROOM_API = new IRoomApi() { + @Override + public Predicate roomCodeValidator() { + return ROOM_REGISTRAR::isRegistered; + } + + @Override + public IRoomRegistrar registrar() { + return ROOM_REGISTRAR; + } + + @Override + public IRoomSpawnManager spawnManager(String roomCode) { + return spawnManager.get(roomCode); + } + + @Override + public IRoomChunkManager chunkManager() { + return gcm; + } + + @Override + public IRoomChunks chunks(String roomCode) { + return gcm.get(roomCode); + } + }; + + CompactMachines.Internal.PLAYER_HISTORY_API = new IPlayerHistoryApi() { + @Override + public IPlayerEntryPointHistoryManager entryPoints() { + return PLAYER_HISTORY; + } + }; + + CompactMachines.Internal.ROOM_DATA_ACCESSOR = new IRoomDataAttachmentAccessor() { + @Override + public Optional get(String roomCode) { + return ROOM_DATA_ATTACHMENTS.optionalData(roomCode); + } + + @Override + public IAttachmentHolder getOrCreate(String roomCode) { + return ROOM_DATA_ATTACHMENTS.data(roomCode); + } + }; + } + public static void save() { - if(CURRENT_SERVER != null) { - PLAYER_HISTORY.save(); - ROOM_DATA_ATTACHMENTS.save(CURRENT_SERVER.registryAccess()); + if (CURRENT_SERVER != null) { + ROOM_REGISTRAR_DATA.save(); + ROOM_DATA_ATTACHMENTS.save(); + PLAYER_HISTORY_DATA.save(); } } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/shrinking/PersonalShrinkingDevice.java b/neoforge-main/src/main/java/dev/compactmods/machines/shrinking/PersonalShrinkingDevice.java index 3eaf9d18..360a34d9 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/shrinking/PersonalShrinkingDevice.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/shrinking/PersonalShrinkingDevice.java @@ -1,6 +1,6 @@ package dev.compactmods.machines.shrinking; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.Translations; import dev.compactmods.machines.api.dimension.CompactDimension; import dev.compactmods.machines.api.room.RoomTranslations; @@ -48,11 +48,11 @@ public InteractionResultHolder use(Level world, Player player, Intera if (world instanceof ServerLevel playerDim && player instanceof ServerPlayer serverPlayer) { if (playerDim.dimension().equals(CompactDimension.LEVEL_KEY)) { if (player.isShiftKeyDown()) { - final var roomCode = RoomApi.chunkManager() + final var roomCode = CompactMachines.roomApi().chunkManager() .findRoomByChunk(serverPlayer.chunkPosition()) .orElseThrow(); - final var spawnManager = RoomApi.spawnManager(roomCode); + final var spawnManager = CompactMachines.roomApi().spawnManager(roomCode); spawnManager.setPlayerSpawn(serverPlayer); player.displayClientMessage(RoomTranslations.ROOM_SPAWNPOINT_SET.apply(serverPlayer, roomCode), true); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/villager/Villagers.java b/neoforge-main/src/main/java/dev/compactmods/machines/villager/Villagers.java index 95f07ccf..de24cc4a 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/villager/Villagers.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/villager/Villagers.java @@ -1,7 +1,7 @@ package dev.compactmods.machines.villager; import com.google.common.collect.ImmutableSet; -import dev.compactmods.machines.api.CompactMachinesApi; +import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.CMRegistries; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceKey; @@ -19,7 +19,7 @@ import java.util.function.Supplier; public class Villagers { - public static final ResourceLocation TINKERER_ID = CompactMachinesApi.modRL("tinkerer"); + public static final ResourceLocation TINKERER_ID = CompactMachines.modRL("tinkerer"); public static final ResourceKey TINKERER_WORKBENCH_KEY = ResourceKey .create(BuiltInRegistries.POINT_OF_INTEREST_TYPE.key(), TINKERER_ID); diff --git a/settings.gradle.kts b/settings.gradle.kts index c21292c9..a324508c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -3,7 +3,7 @@ rootProject.name = "Compact Machines 21.0" dependencyResolutionManagement { versionCatalogs.create("neoforged") { version("mdg", "0.1.74") - version("neoforge", "21.0.0-beta") + version("neoforge", "21.0.2-beta") plugin("moddev", "net.neoforged.moddev") .versionRef("mdg") diff --git a/tests-1.20/test/java/dev/compactmods/machines/test/CompactMachinesTest.java b/tests-1.20/test/java/dev/compactmods/machines/test/CompactMachinesTest.java index 831ffdc8..136fb6fa 100644 --- a/tests-1.20/test/java/dev/compactmods/machines/test/CompactMachinesTest.java +++ b/tests-1.20/test/java/dev/compactmods/machines/test/CompactMachinesTest.java @@ -1,7 +1,7 @@ package dev.compactmods.machines.test; import dev.compactmods.machines.api.CompactMachinesApi; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.room.CompactMachines.roomApi(); import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; import net.neoforged.fml.common.Mod; diff --git a/tests-1.20/test/java/dev/compactmods/machines/test/TestRoomApi.java b/tests-1.20/test/java/dev/compactmods/machines/test/TestRoomApi.java index 5410f4dd..92fe667c 100644 --- a/tests-1.20/test/java/dev/compactmods/machines/test/TestRoomApi.java +++ b/tests-1.20/test/java/dev/compactmods/machines/test/TestRoomApi.java @@ -2,21 +2,21 @@ import com.google.common.base.Predicates; import dev.compactmods.machines.api.dimension.MissingDimensionException; -import dev.compactmods.machines.api.room.IRoomApi; -import dev.compactmods.machines.room.RoomApiInstance; +import dev.compactmods.machines.api.room.ICompactMachines.roomApi(); +import dev.compactmods.machines.room.CompactMachines.roomApi()Instance; import dev.compactmods.machines.room.RoomRegistrar; import dev.compactmods.machines.room.spatial.GraphChunkManager; import dev.compactmods.machines.room.spawn.RoomSpawnManagers; import dev.compactmods.machines.room.spawn.SpawnManager; import net.minecraft.gametest.framework.GameTestHelper; -public class TestRoomApi { +public class TestCompactMachines.roomApi() { - public static IRoomApi forTest(GameTestHelper test) { + public static ICompactMachines.roomApi() forTest(GameTestHelper test) { final var registrar = new RoomRegistrar(); final var spawnManagers = new RoomSpawnManagers(registrar); final var chunkManager = new GraphChunkManager(); - return new RoomApiInstance(Predicates.alwaysTrue(), registrar, spawnManagers, chunkManager); + return new CompactMachines.roomApi()Instance(Predicates.alwaysTrue(), registrar, spawnManagers, chunkManager); } } diff --git a/tests-1.20/test/java/dev/compactmods/machines/test/data/PlayerHistoryTrackerTests.java b/tests-1.20/test/java/dev/compactmods/machines/test/data/PlayerHistoryTrackerTests.java index 5694b458..bdf4efa1 100644 --- a/tests-1.20/test/java/dev/compactmods/machines/test/data/PlayerHistoryTrackerTests.java +++ b/tests-1.20/test/java/dev/compactmods/machines/test/data/PlayerHistoryTrackerTests.java @@ -1,12 +1,12 @@ package dev.compactmods.machines.test.data; import dev.compactmods.machines.api.CompactMachinesApi; -import dev.compactmods.machines.api.room.RoomApi; +import dev.compactmods.machines.api.room.CompactMachines.roomApi(); import dev.compactmods.machines.api.room.history.RoomEntryPoint; import dev.compactmods.machines.player.PlayerEntryPointHistoryManager; import dev.compactmods.machines.api.room.history.RoomEntryResult; import dev.compactmods.machines.room.RoomCodeGenerator; -import dev.compactmods.machines.test.TestRoomApi; +import dev.compactmods.machines.test.TestCompactMachines.roomApi(); import net.minecraft.gametest.framework.GameTest; import net.minecraft.gametest.framework.GameTestHelper; import net.minecraft.nbt.NbtOps; @@ -26,7 +26,7 @@ public class PlayerHistoryTrackerTests { @GameTest(template = "empty_1x1", batch = BATCH) public static void failsPlayerGoingTooFar(final GameTestHelper test) { - RoomApi.INSTANCE = TestRoomApi.forTest(test); + CompactMachines.roomApi().INSTANCE = TestCompactMachines.roomApi().forTest(test); final var history = new PlayerEntryPointHistoryManager(1); @@ -42,7 +42,7 @@ public static void failsPlayerGoingTooFar(final GameTestHelper test) { @GameTest(template = "empty_1x1", batch = BATCH, timeoutTicks = 1400) public static void canGetPlayerHistory(final GameTestHelper test) throws InterruptedException { - RoomApi.INSTANCE = TestRoomApi.forTest(test); + CompactMachines.roomApi().INSTANCE = TestCompactMachines.roomApi().forTest(test); final var history = new PlayerEntryPointHistoryManager(5); @@ -71,7 +71,7 @@ public static void canGetPlayerHistory(final GameTestHelper test) throws Interru @GameTest(template = "empty_1x1", batch = BATCH, timeoutTicks = 1400) public static void canRemovePlayerHistory(final GameTestHelper test) throws InterruptedException { - RoomApi.INSTANCE = TestRoomApi.forTest(test); + CompactMachines.roomApi().INSTANCE = TestCompactMachines.roomApi().forTest(test); final var history = new PlayerEntryPointHistoryManager(5); final var player = test.makeMockPlayer(GameType.SURVIVAL); @@ -98,7 +98,7 @@ public static void canRemovePlayerHistory(final GameTestHelper test) throws Inte @GameTest(template = "empty_1x1", batch = BATCH, timeoutTicks = 1400) public static void testDataLogic(final GameTestHelper test) throws InterruptedException { - RoomApi.INSTANCE = TestRoomApi.forTest(test); + CompactMachines.roomApi().INSTANCE = TestCompactMachines.roomApi().forTest(test); final var history = new PlayerEntryPointHistoryManager(5);