--- title: Memories type: docs weight: 4 --- The memories system provides persistent collectible discovery tracking for players. **Package:** `com.hypixel.hytale.builtin.adventure.memories` ## Architecture ``` MemoriesPlugin ├── Components │ └── PlayerMemories - Player's collected memories ├── Memory Types │ ├── Memory - Base memory interface │ ├── MemoryProvider - Supplies memory instances │ └── NPCMemory/NPCMemoryProvider - NPC-based memories ├── Storage │ └── RecordedMemories - Persistent storage (memories.json) ├── UI │ ├── MemoriesWindow - Client window │ ├── MemoriesPage - UI page │ └── MemoriesPageSupplier ├── Systems │ ├── PlayerAddedSystem - Initialize on player join │ ├── NPCMemory.GatherMemoriesSystem - Collect NPC memories │ └── TempleRespawnPlayersSystem - Temple respawn logic └── Commands └── MemoriesCommand (capacity, clear, level, unlock) ``` ## Core Concepts ### Memory Interface Base interface for all memory types: ```java public interface Memory { // Codec for serialization static final Codec CODEC; } ``` ### MemoryProvider Provides memory instances and configuration: ```java public interface MemoryProvider { String getId(); BuilderCodec getCodec(); Map> getAllMemories(); } ``` ### NPCMemory Memories discovered from NPCs: ```java public class NPCMemory implements Memory { // Collected when player approaches NPC within radius } public class NPCMemoryProvider implements MemoryProvider { public double getCollectionRadius(); // From config } ``` ## Player Memories Component ```java ComponentType type = MemoriesPlugin.get().getPlayerMemoriesComponentType(); ``` The `PlayerMemories` component tracks: - Memories discovered by player - Memory capacity - Transfer to recorded memories ## Recorded Memories World-persistent memory storage saved to `memories.json`: ```java // Check if memory is recorded boolean hasMemory = MemoriesPlugin.get().hasRecordedMemory(memory); // Get all recorded memories Set recorded = MemoriesPlugin.get().getRecordedMemories(); // Record player's memories boolean recorded = MemoriesPlugin.get().recordPlayerMemories(playerMemories); // Clear all recorded memories MemoriesPlugin.get().clearRecordedMemories(); // Record all possible memories MemoriesPlugin.get().recordAllMemories(); ``` ## Memory Levels Memory count determines player level: ```java // Get current memories level int level = MemoriesPlugin.get().getMemoriesLevel(gameplayConfig); // Get memories needed for next level int needed = MemoriesPlugin.get().getMemoriesForNextLevel(gameplayConfig); ``` ### Level Configuration ```java public class MemoriesGameplayConfig { int[] memoriesAmountPerLevel; // Thresholds for each level } ``` ## Interactions | Interaction | Type ID | Description | |-------------|---------|-------------| | `SetMemoriesCapacityInteraction` | `SetMemoriesCapacity` | Set player memory capacity | | `MemoriesConditionInteraction` | `MemoriesCondition` | Condition based on memories | ## UI Integration ### Memory Window Client-requestable window for viewing memories: ```java Window.CLIENT_REQUESTABLE_WINDOW_TYPES.put(WindowType.Memories, MemoriesWindow::new); ``` ### Custom UI Page ```java OpenCustomUIInteraction.registerCustomPageSupplier( this, MemoriesPage.class, "Memories", new MemoriesPageSupplier() ); ``` ## Commands | Command | Description | |---------|-------------| | `/memories` | Base memories command | | `/memories capacity ` | Set memory capacity | | `/memories clear` | Clear recorded memories | | `/memories level` | Show current level | | `/memories unlock` | Unlock all memories | ## Configuration ### Plugin Config ```java public class MemoriesPluginConfig { // Collection radius per memory type Object2DoubleMap collectionRadius; public Object2DoubleMap getCollectionRadius(); } ``` ### Gameplay Config ```yaml # gameplay_config.json { "Memories": { "MemoriesAmountPerLevel": [5, 15, 30, 50, 75, 100] } } ``` ## Temple System The Forgotten Temple system for memory-related respawns: ```java public class ForgottenTempleConfig { // Temple configuration for respawn } public class TempleRespawnPlayersSystem { // Handles respawn at temples } ``` ## Events Player memories feature status is sent on join: ```java // Sent to client when player joins playerConnection.writeNoCache(new UpdateMemoriesFeatureStatus(isFeatureUnlocked)); ``` ## API Usage ```java MemoriesPlugin memories = MemoriesPlugin.get(); // Get all available memories Map> allMemories = memories.getAllMemories(); // Register custom memory provider memories.registerMemoryProvider(new CustomMemoryProvider()); // Check player memories component PlayerMemories playerMemories = store.getComponent(ref, PlayerMemories.getComponentType()); ```