Init
This commit is contained in:
229
content/reference/buildertools/prefab-editor.en.md
Normal file
229
content/reference/buildertools/prefab-editor.en.md
Normal 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
|
||||
Reference in New Issue
Block a user