Skip to content

World Generation and Smart Prefabs

World Generation

The plugin uses a custom implementation of IWorldGenProvider to generate a repeatable grid of plots.

World Name Configuration

You can customize the name of the plot world in config.json under the World section:

json
{
  "World": {
    "PlotWorldName": "my_plot_world",
    "DefaultWorldTime": "midday"
  }
}

If the world does not exist, it will be automatically created with the specified name during plugin startup.

Grid Logic

The world is divided into regions based on the configuration:

  • Plots are generated at the start of each grid cell using PlotSizeX and PlotSizeZ.
  • Roads fill the space between plots using RoadSizeX and RoadSizeZ.
  • Intersections are placed at the crossing of two roads.

Terrain Layers

  • Bedrock (Y=0): Prevents falling into the void.
  • Sub-surface (Y=1 to 63): Filled with the configured Filling material.
  • Surface (Y=64): Uses PlotSurface for plots and RoadSurface for roads.

World Spawning Logic

The generator uses a prioritized search for the initial world spawn point:

  1. Custom Spawn: If CustomSpawn is set in config.json, it is always used.
  2. Safe Floor Search: If a plot prefab is loaded, the generator searches its center area (6x6 blocks) for the highest solid floor (filtering out foliage like leaves, logs, or flowers).
  3. Roadless / Island Situations: If no safe floor is found in the prefab, or if roads/intersections are disabled (RoadSize: 0), the generator defaults to the corner of the plot grid coordinate.

TIP

For roadless "infinite sea" worlds or island prefabs, we highly recommend using /plot setspawn to define a pleasant starting point for your players, as the default math may place them at a junction corner.


Smart Prefabs

The smart prefab system automatically handles how your schematic looks in the world using PlotSquared-style insertion logic.

Automatic Centralization

If your plot prefab is smaller than the grid size (e.g., a 20x20 island in a 32x32 plot), the plugin will calculate the offsets automatically to place it in the center.

PlotSquared-style Offsets

In config.json, you can define manual offsets for your prefabs:

  • OffsetX / OffsetZ: Additional horizontal displacement added after centering.

  • OffsetY: Vertical displacement.

  • PasteRoadOnTop: (boolean) If true, road and intersection prefabs are pasted on top of the ground height (default: true).

  • AutoHeight: (boolean) If true, use the ground height as baseline for all prefabs (default: true).

  • PasteMismatches: (boolean) If false, plot prefabs larger than the plot size will be skipped (default: true).

  • Rotation: (int) Rotation of the plot prefab in degrees (0, 90, 180, 270).

  • OffsetX/Y/Z: (int) Relative offsets for the plot prefab.

Example Configuration

json
"Prefabs": {
  "Road": "stoshe:road_standard",
  "Plot": "stoshe:plot_house_base",
  "Intersection": "stoshe:road_intersection",
  "PasteRoadOnTop": true,
  "AutoHeight": true,
  "PasteMismatches": false,
  "Rotation": 90,
  "OffsetX": 0,
  "OffsetY": -1,
  "OffsetZ": 0
}

$Y=64$ as the base.

Skip-Air Logic

When a prefab contains blocks named "Empty" or "Air", the plugin skips them. This allows the underlying terrain (like plot water) to show through, creating perfect islands.

Fluid Support

If you place fluids in your prefab, the plugin will correctly register them as Hytale fluids, enabling rendering and physics.

Released under the MIT License.