Skip to content

Structure Sets

A StructureSet groups one or more weighted structures with a placement, which decides which chunks the set tries to generate in.

The StructureSets catalog holds a typed reference to every vanilla set, such as StructureSets.VILLAGES.

ExamplePlugin.java Java
import dev.wyck.keys.ResourceKey;
import dev.wyck.worldgen.structure.StructureSet;
import dev.wyck.worldgen.structure.placement.RandomSpreadPlacement;
import dev.wyck.worldgen.structure.types.ComposedStructureSet;

// One structure
StructureSet.of(temple, RandomSpreadPlacement.of(32, 8, 184729301))
  .toBuilder()
  .resourceKey(ResourceKey.of("wyck", "temples"))
  .build()
  .register();

// Several structures, chosen by weight wherever the set generates
ComposedStructureSet.builder()
  .resourceKey(ResourceKey.of("wyck", "ruins"))
  .structure(smallRuin, 3)
  .structure(largeRuin, 1)
  .placement(RandomSpreadPlacement.of(24, 6, 55120933))
  .build()
  .register();

RandomSpreadPlacement is the placement most vanilla structures use.

ExamplePlugin.java Java
import dev.wyck.worldgen.structure.RandomSpreadType;
import dev.wyck.worldgen.structure.StructureSets;
import dev.wyck.worldgen.structure.placement.RandomSpreadPlacement;
import dev.wyck.worldgen.structure.placement.StructurePlacement;

RandomSpreadPlacement placement = RandomSpreadPlacement.builder()
  .spacing(40)
  .separation(12)
  .salt(912830471)
  .spreadType(RandomSpreadType.TRIANGULAR)
  .frequency(0.5F)
  .exclusionZone(StructurePlacement.ExclusionZone.of(StructureSets.VILLAGES, 8))
  .build();

ConcentricRingsPlacement is what strongholds use.

ExamplePlugin.java Java
import dev.wyck.keys.ResourceKey;
import dev.wyck.tags.TagSet;
import dev.wyck.worldgen.structure.placement.ConcentricRingsPlacement;

// distance to the first ring, spread within a ring, total count, preferred biomes
ConcentricRingsPlacement rings = ConcentricRingsPlacement.of(
  32, 3, 128,
  TagSet.ofBiomeTag(ResourceKey.minecraft("stronghold_biased_to"))
);