Jigsaw Structures
A JigsawStructure is assembled from pieces.
It places a first piece from its start pool, then attaches a new piece at every jigsaw block in the placed pieces, until
it is size steps from the start.
Structure Templates
Section titled “Structure Templates”import dev.wyck.keys.ResourceKey;
import dev.wyck.worldgen.structure.templatesystem.StructureTemplate;
@Override
public void onLoad() {
// From the plugin's data folder
StructureTemplate tower = StructureTemplate.of(ResourceKey.of("wyck", "tower"), getDataPath().resolve("tower.nbt"))
.register();
// From inside the plugin jar
StructureTemplate ruin = StructureTemplate.of(ResourceKey.of("wyck", "ruin"), getClass().getResource("/ruin.nbt"))
.register();
} Template Pools
Section titled “Template Pools”A TemplatePool is a weighted list of pool
elements with a fallback pool, used when a piece from this pool does not fit. The fallback defaults to TemplatePool.EMPTY.
import dev.wyck.keys.ResourceKey;
import dev.wyck.worldgen.structure.pools.PoolElement;
import dev.wyck.worldgen.structure.pools.TemplatePool;
import dev.wyck.worldgen.structure.pools.types.ComposedTemplatePool;
ComposedTemplatePool start = TemplatePool.builder()
.resourceKey(ResourceKey.of("wyck", "tower/start"))
.element(PoolElement.single(tower), 3) // weight from 1 to 150
.element(PoolElement.single(ruin), 1)
.build()
.register(); Building the Structure
Section titled “Building the Structure”import dev.wyck.keys.ResourceKey;
import dev.wyck.worldgen.HeightmapType;
import dev.wyck.worldgen.structure.Structure;
import dev.wyck.worldgen.structure.types.JigsawStructure;
JigsawStructure structure = Structure.jigsaw(settings, start)
.resourceKey(ResourceKey.of("wyck", "tower"))
.size(6)
.projectStartToHeightmap(HeightmapType.WORLD_SURFACE_WG)
.maxDistanceFromCenter(JigsawStructure.MaxDistance.of(80))
.build()
.register(); Add the structure to a structure set so it generates.
Pool Aliases
Section titled “Pool Aliases”A PoolAliasBinding replaces a pool
for one structure.
import dev.wyck.keys.ResourceKey;
import dev.wyck.worldgen.structure.Structures;
import dev.wyck.worldgen.structure.pools.PoolElement;
import dev.wyck.worldgen.structure.pools.TemplatePool;
import dev.wyck.worldgen.structure.pools.alias.PoolAliasBinding;
import dev.wyck.worldgen.structure.pools.types.ComposedTemplatePool;
import dev.wyck.worldgen.structure.types.JigsawStructure;
TemplatePool vanillaHouses = TemplatePool.reference(ResourceKey.minecraft("village/plains/houses"));
// Vanilla's houses plus your own, under a new key
ComposedTemplatePool houses = ((ComposedTemplatePool) vanillaHouses.wrap()).toBuilder()
.resourceKey(ResourceKey.of("wyck", "village/plains/houses"))
.element(PoolElement.single(myHouse), 4)
.build()
.register();
JigsawStructure village = (JigsawStructure) Structures.VILLAGE_PLAINS.wrap();
village.toBuilder()
.resourceKey(ResourceKey.of("wyck", "village_plains"))
.poolAlias(PoolAliasBinding.direct(vanillaHouses, houses))
.build()
.register();