This commit is contained in:
2026-01-20 20:33:59 +01:00
commit b16a40e431
583 changed files with 87339 additions and 0 deletions

View File

@@ -0,0 +1,229 @@
---
title: Prefab Editor
type: docs
weight: 3
---
The prefab editor allows creating, editing, and managing prefabricated structures that can be placed in the world.
**Package:** `com.hypixel.hytale.builtin.buildertools.prefabeditor`
## Architecture
```
Prefab Editor
├── Session Management
│ ├── PrefabEditSession - Active edit session
│ └── PrefabEditSessionManager - Session coordinator
├── Components
│ ├── PrefabAnchor - Anchor point definitions
│ └── PrefabEditorCreationSettings
├── Interactions
│ ├── PrefabSelectionInteraction
│ └── PrefabSetAnchorInteraction
├── Systems
│ ├── PrefabDirtySystems - Track changes
│ └── PrefabMarkerProvider - Anchor markers
└── Commands
└── PrefabEditCommand
```
## Prefab Edit Session
### Starting a Session
```
/prefabedit <prefab_id>
```
This enters prefab editing mode where:
- Selection tools work within prefab bounds
- Changes are tracked separately
- Anchors can be set
### PrefabEditSession
```java
public class PrefabEditSession {
// Active editing session for a prefab
// Tracks modifications and anchors
}
```
### Session Manager
```java
PrefabEditSessionManager manager = BuilderToolsPlugin.get().getPrefabEditSessionManager();
// Check if player is editing
boolean isEditing = manager.isEditing(player);
// Get active session
PrefabEditSession session = manager.getSession(player);
```
## Prefab Anchors
Anchors define special points within a prefab:
### PrefabAnchor
```java
public class PrefabAnchor {
// Position relative to prefab origin
// Name identifier
// Anchor type
}
```
### Setting Anchors
Use the anchor interaction or command:
```
/prefab anchor set <name> [x y z]
/prefab anchor remove <name>
/prefab anchor list
```
### Anchor Types
| Type | Description |
|------|-------------|
| `origin` | Prefab placement origin |
| `spawn` | Entity spawn point |
| `connection` | Connection to other prefabs |
| `custom` | User-defined anchor |
## Prefab Commands
### /prefab
Main prefab management command:
```
/prefab save <name> Save selection as prefab
/prefab load <name> Load prefab to clipboard
/prefab list List available prefabs
/prefab delete <name> Delete a prefab
/prefab info <name> Show prefab information
```
### /prefabedit
Enter prefab editing mode:
```
/prefabedit <prefab_id> Edit existing prefab
/prefabedit exit Exit editing mode
/prefabedit save Save changes
/prefabedit discard Discard changes
```
## Interactions
### PrefabSelectionInteraction
Select prefabs in the world:
```java
// Registered interaction type
getCodecRegistry(Interaction.CODEC).register(
"PrefabSelection",
PrefabSelectionInteraction.class,
PrefabSelectionInteraction.CODEC
);
```
### PrefabSetAnchorInteraction
Set anchors via interaction:
```java
// Allows clicking to place anchors
getCodecRegistry(Interaction.CODEC).register(
"PrefabSetAnchor",
PrefabSetAnchorInteraction.class,
PrefabSetAnchorInteraction.CODEC
);
```
## Creation Settings
### PrefabEditorCreationSettings
Configuration for creating new prefabs:
```java
public class PrefabEditorCreationSettings {
// Settings for prefab creation
// Include entities flag
// Compression settings
}
```
## Systems
### PrefabDirtySystems
Tracks modifications to prefabs:
```java
// Marks prefab as modified when changes occur
// Prompts save on exit
```
### PrefabMarkerProvider
Provides visual markers for anchors:
```java
// Displays anchor positions in creative mode
// Shows connection points
```
## API Usage
### Save Selection as Prefab
```java
BuilderToolsPlugin tools = BuilderToolsPlugin.get();
// Selection must be defined first
// Use /prefab save command or API
```
### Load and Place Prefab
```java
// Load to clipboard
// /prefab load <name>
// Paste at location
// /paste
```
### Check Edit Mode
```java
PrefabEditSessionManager manager =
BuilderToolsPlugin.get().getPrefabEditSessionManager();
if (manager.isEditing(player)) {
PrefabEditSession session = manager.getSession(player);
// Work with session
}
```
## Prefab Storage
Prefabs are stored in the world data:
```
worlds/<world>/prefabs/<name>.prefab
```
Structure includes:
- Block data
- Entity data (if included)
- Anchor definitions
- Metadata