230 lines
4.3 KiB
Markdown
230 lines
4.3 KiB
Markdown
---
|
|
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
|