226 lines
5.0 KiB
Markdown
226 lines
5.0 KiB
Markdown
---
|
|
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<Memory> CODEC;
|
|
}
|
|
```
|
|
|
|
### MemoryProvider
|
|
|
|
Provides memory instances and configuration:
|
|
|
|
```java
|
|
public interface MemoryProvider<T extends Memory> {
|
|
String getId();
|
|
BuilderCodec<T> getCodec();
|
|
Map<String, Set<Memory>> getAllMemories();
|
|
}
|
|
```
|
|
|
|
### NPCMemory
|
|
|
|
Memories discovered from NPCs:
|
|
|
|
```java
|
|
public class NPCMemory implements Memory {
|
|
// Collected when player approaches NPC within radius
|
|
}
|
|
|
|
public class NPCMemoryProvider implements MemoryProvider<NPCMemory> {
|
|
public double getCollectionRadius(); // From config
|
|
}
|
|
```
|
|
|
|
## Player Memories Component
|
|
|
|
```java
|
|
ComponentType<EntityStore, PlayerMemories> 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<Memory> 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 <amount>` | 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<String> collectionRadius;
|
|
|
|
public Object2DoubleMap<String> 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<String, Set<Memory>> allMemories = memories.getAllMemories();
|
|
|
|
// Register custom memory provider
|
|
memories.registerMemoryProvider(new CustomMemoryProvider());
|
|
|
|
// Check player memories component
|
|
PlayerMemories playerMemories = store.getComponent(ref, PlayerMemories.getComponentType());
|
|
```
|