--- 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 ``` 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 [x y z] /prefab anchor remove /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 Save selection as prefab /prefab load Load prefab to clipboard /prefab list List available prefabs /prefab delete Delete a prefab /prefab info Show prefab information ``` ### /prefabedit Enter prefab editing mode: ``` /prefabedit 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 // 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//prefabs/.prefab ``` Structure includes: - Block data - Entity data (if included) - Anchor definitions - Metadata