summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Server/Prefabs/SinglePieceStructures/DesertPyramid.cubeset979
-rw-r--r--Server/Prefabs/SinglePieceStructures/DesertWell.cubeset137
-rw-r--r--Server/Prefabs/SinglePieceStructures/JungleTemple.cubeset350
-rw-r--r--Server/Prefabs/SinglePieceStructures/WitchHut.cubeset147
-rw-r--r--src/Generating/CMakeLists.txt2
-rw-r--r--src/Generating/ComposableGenerator.cpp16
-rw-r--r--src/Generating/SinglePieceStructuresGen.cpp205
-rw-r--r--src/Generating/SinglePieceStructuresGen.h52
-rw-r--r--tests/Generating/CMakeLists.txt2
9 files changed, 1890 insertions, 0 deletions
diff --git a/Server/Prefabs/SinglePieceStructures/DesertPyramid.cubeset b/Server/Prefabs/SinglePieceStructures/DesertPyramid.cubeset
new file mode 100644
index 000000000..c8af069f3
--- /dev/null
+++ b/Server/Prefabs/SinglePieceStructures/DesertPyramid.cubeset
@@ -0,0 +1,979 @@
+
+-- DesertPyramid.cubeset
+
+-- Defines the prefabs in the group DesertPyramid
+
+-- NOTE: This file has been generated automatically by GalExport!
+-- Any manual changes will be overwritten by the next automatic export!
+
+
+
+
+Cubeset =
+{
+ Metadata =
+ {
+ CubesetFormatVersion = 1,
+ ExportDate = "2020-08-27 10:42:17",
+ ["AllowedBiomes"] = "Desert, DesertM, DesertHills",
+ ["GridSizeX"] = "500",
+ ["GridSizeZ"] = "500",
+ ["IntendedUse"] = "SinglePieceStructures",
+ ["MaxOffsetX"] = "100",
+ ["MaxOffsetZ"] = "100",
+ ["SeedOffset"] = "47260503",
+ },
+
+ Pieces =
+ {
+ {
+ OriginData =
+ {
+ ExportName = "DesertPyramid",
+ Name = "DesertPyramid",
+ GalleryName = "Desert",
+ GalleryIndex = "222",
+ ID = "1706",
+ CreatorName = "12xx12",
+ },
+ Size =
+ {
+ x = 15,
+ y = 23,
+ z = 15,
+ },
+ Hitbox =
+ {
+ MinX = 0,
+ MinY = 0,
+ MinZ = 0,
+ MaxX = 14,
+ MaxY = 22,
+ MaxZ = 14,
+ },
+ StructureBox =
+ {
+ MinX = 0,
+ MinY = 0,
+ MinZ = 0,
+ MaxX = 14,
+ MaxY = 22,
+ MaxZ = 14,
+ },
+ Connectors =
+ {
+ },
+ Metadata =
+ {
+ ["AddWeightIfSame"] = "0",
+ ["AllowedRotations"] = "7",
+ ["DefaultWeight"] = "400",
+ ["DepthWeight"] = "",
+ ["ExpandFloorStrategy"] = "RepeatBottomTillNonAir",
+ ["IsStarting"] = "1",
+ ["MergeStrategy"] = "msSpongePrint",
+ ["ShouldExpandFloor"] = "1",
+ ["VerticalStrategy"] = "Fixed|51",
+ },
+ BlockDefinitions =
+ {
+ ".: 0: 0", -- air
+ "a: 46: 0", -- tnt
+ "b: 24: 0", -- sandstone
+ "c: 24: 2", -- sandstone
+ "d: 24: 1", -- sandstone
+ "e: 54: 3", -- chest
+ "f: 54: 5", -- chest
+ "g: 70: 0", -- stonepressureplate
+ "h: 54: 4", -- chest
+ "i: 54: 2", -- chest
+ "j:128: 7", -- sandstonestairs
+ "k:128: 5", -- sandstonestairs
+ "l:128: 4", -- sandstonestairs
+ "m: 19: 0", -- sponge
+ "n:128: 6", -- sandstonestairs
+ "o:159: 1", -- whiteterracotta
+ "p:159:11", -- whiteterracotta
+ "q:128: 3", -- sandstonestairs
+ "r:128: 2", -- sandstonestairs
+ "s:128: 0", -- sandstonestairs
+ "t:128: 1", -- sandstonestairs
+ "u: 44: 9", -- stone_slab
+ "v: 44: 1", -- stone_slab
+ },
+ BlockData =
+ {
+ -- Level 0
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmmmmmmmmmm", -- 5
+ "mmmmmmaaammmmmm", -- 6
+ "mmmmmmaaammmmmm", -- 7
+ "mmmmmmaaammmmmm", -- 8
+ "mmmmmmmmmmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 1
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmmbmmmmmmm", -- 5
+ "mmmmmmcccmmmmmm", -- 6
+ "mmmmmbcbcbmmmmm", -- 7
+ "mmmmmmcccmmmmmm", -- 8
+ "mmmmmmmbmmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 2
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmbmmmmmmm", -- 4
+ "mmmmmmdedmmmmmm", -- 5
+ "mmmmmd...dmmmmm", -- 6
+ "mmmmbf.g.hbmmmm", -- 7
+ "mmmmmd...dmmmmm", -- 8
+ "mmmmmmdidmmmmmm", -- 9
+ "mmmmmmmbmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 3
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmcjcmmmmmm", -- 5
+ "mmmmmc...cmmmmm", -- 6
+ "mmmmmk...lmmmmm", -- 7
+ "mmmmmc...cmmmmm", -- 8
+ "mmmmmmcncmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 4
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmdcdmmmmmm", -- 5
+ "mmmmmd...dmmmmm", -- 6
+ "mmmmmc...cmmmmm", -- 7
+ "mmmmmd...dmmmmm", -- 8
+ "mmmmmmdcdmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 5
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmcccmmmmmm", -- 5
+ "mmmmmc...cmmmmm", -- 6
+ "mmmmmc...cmmmmm", -- 7
+ "mmmmmc...cmmmmm", -- 8
+ "mmmmmmcccmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 6
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmcdcmmmmmm", -- 5
+ "mmmmmc...cmmmmm", -- 6
+ "mmmmmd...dmmmmm", -- 7
+ "mmmmmc...cmmmmm", -- 8
+ "mmmmmmcdcmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 7
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmdcdmmmmmm", -- 5
+ "mmmmmd...dmmmmm", -- 6
+ "mmmmmc...cmmmmm", -- 7
+ "mmmmmd...dmmmmm", -- 8
+ "mmmmmmdcdmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 8
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmbbbmmmmmm", -- 5
+ "mmmmmb...bmmmmm", -- 6
+ "mmmmmb...bmmmmm", -- 7
+ "mmmmmb...bmmmmm", -- 8
+ "mmmmmmbbbmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 9
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmbbbmmmmmm", -- 5
+ "mmmmmb...bmmmmm", -- 6
+ "mmmmmb...bmmmmm", -- 7
+ "mmmmmb...bmmmmm", -- 8
+ "mmmmmmbbbmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 10
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmbbbmmmmmm", -- 5
+ "mmmmmb...bmmmmm", -- 6
+ "mmmmmb...bmmmmm", -- 7
+ "mmmmmb...bmmmmm", -- 8
+ "mmmmmmbbbmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 11
+ "bbbbbbbbbbbbbbb", -- 0
+ "bbbbbbbbbbbbbbb", -- 1
+ "bbbbbbbbbbbbbbb", -- 2
+ "bbbbbbbbbbbbbbb", -- 3
+ "bbbbobobbbobbbb", -- 4
+ "bbbbbobbbobbbbb", -- 5
+ "bbbbbbobobbbbbb", -- 6
+ "bbbbbbbpbbbbbbb", -- 7
+ "bbbbbbobobbbbbb", -- 8
+ "bbbbbobbbobbbbb", -- 9
+ "bbbbobobbbobbbb", -- 10
+ "bbbbbbbbbbbbbbb", -- 11
+ "bbbbbbbbbbbbbbb", -- 12
+ "bbbbbbbbbbbbbbb", -- 13
+ "bbbbbbbbbbbbbbb", -- 14
+
+ -- Level 12
+ "bbbbbbbbbbbbbbb", -- 0
+ "b.........bbbbb", -- 1
+ "b.........bq.bb", -- 2
+ "b.........b..bb", -- 3
+ "b....r.....b.bb", -- 4
+ "b...sbt.......b", -- 5
+ "b....q........b", -- 6
+ "b..............", -- 7
+ "b....r........b", -- 8
+ "b...sbt.......b", -- 9
+ "b....q.....b.bb", -- 10
+ "b.........b..bb", -- 11
+ "b.........br.bb", -- 12
+ "b.........bbbbb", -- 13
+ "bbbbbbbbbbbbbbb", -- 14
+
+ -- Level 13
+ "bbbbbbbbbbbbbbb", -- 0
+ "b.........b.sbb", -- 1
+ "b.........b..bo", -- 2
+ "b.........b..bb", -- 3
+ "b..........b.bb", -- 4
+ "b....b........b", -- 5
+ "b.............b", -- 6
+ "b..............", -- 7
+ "b.............b", -- 8
+ "b....b........b", -- 9
+ "b..........b.bb", -- 10
+ "b.........b..bb", -- 11
+ "b.........b..bo", -- 12
+ "b.........b.sbb", -- 13
+ "bbbbbbbbbbbbbbb", -- 14
+
+ -- Level 14
+ "mmmmmmmmmmbbbbb", -- 0
+ "mbbbbbbbbbb...b", -- 1
+ "mbu......ub..ro", -- 2
+ "mb........b.ubb", -- 3
+ "mb.........bbbb", -- 4
+ "mb...b......ubv", -- 5
+ "mb..........ubb", -- 6
+ "mb...........ub", -- 7
+ "mb..........ubb", -- 8
+ "mb...b......ubv", -- 9
+ "mb.........bbbb", -- 10
+ "mb........b.ubb", -- 11
+ "mbu......ub..qo", -- 12
+ "mbbbbbbbbbb...b", -- 13
+ "mmmmmmmmmmbbbbb", -- 14
+
+ -- Level 15
+ "mmmmmmmmmmbbbbb", -- 0
+ "mmmmmmmmmmb...b", -- 1
+ "mmbbbbbbbbbb..o", -- 2
+ "mmbbbbbbbbbbt.b", -- 3
+ "mmbbbbbbbbbbbbb", -- 4
+ "mmbbbbbbbbbbbmm", -- 5
+ "mmbbbb...bbbbvm", -- 6
+ "mmbbbb...bbbbbv", -- 7
+ "mmbbbb...bbbbvm", -- 8
+ "mmbbbbbbbbbbbmm", -- 9
+ "mmbbbbbbbbbbbbb", -- 10
+ "mmbbbbbbbbbbt.b", -- 11
+ "mmbbbbbbbbbb..o", -- 12
+ "mmmmmmmmmmb...b", -- 13
+ "mmmmmmmmmmbbbbb", -- 14
+
+ -- Level 16
+ "mmmmmmmmmmbbbbb", -- 0
+ "mmmmmmmmmmb...b", -- 1
+ "mmmmmmmmmm....o", -- 2
+ "mmmbbbb.bbb...b", -- 3
+ "mmmbu.....ubbbb", -- 4
+ "mmmb.b.....bmmm", -- 5
+ "mmmb.......bmmm", -- 6
+ "mmmb.......bvmm", -- 7
+ "mmmb.......bmmm", -- 8
+ "mmmb.b.....bmmm", -- 9
+ "mmmbu.....ubbbb", -- 10
+ "mmmbbbb.bbb...b", -- 11
+ "mmmmmmmmmm....o", -- 12
+ "mmmmmmmmmmb...b", -- 13
+ "mmmmmmmmmmbbbbb", -- 14
+
+ -- Level 17
+ "mmmmmmmmmmbbbbb", -- 0
+ "mmmmmmmmmmb...b", -- 1
+ "mmmmmmmmmm....o", -- 2
+ "mmmmmmbmbmb...b", -- 3
+ "mmmmbbb.bbbbbbb", -- 4
+ "mmmmbb....bmmmm", -- 5
+ "mmmmb.....bmmmm", -- 6
+ "mmmmb.....bmmmm", -- 7
+ "mmmmb.....bmmmm", -- 8
+ "mmmmbb....bmmmm", -- 9
+ "mmmmbbb.bbbbbbb", -- 10
+ "mmmmmmbmbmb...b", -- 11
+ "mmmmmmmmmm....o", -- 12
+ "mmmmmmmmmmb...b", -- 13
+ "mmmmmmmmmmbbbbb", -- 14
+
+ -- Level 18
+ "mmmmmmmmmmbbbbb", -- 0
+ "mmmmmmmmmmb...o", -- 1
+ "mmmmmmmmmmb...o", -- 2
+ "mmmmmmmvmmb...o", -- 3
+ "mmmmmmvbvmbbbbb", -- 4
+ "mmmmmbbbbbmmmmm", -- 5
+ "mmmmmbu.ubmmmmm", -- 6
+ "mmmmmb...bmmmmm", -- 7
+ "mmmmmbu.ubmmmmm", -- 8
+ "mmmmmbbbbbmmmmm", -- 9
+ "mmmmmmvbvmbbbbb", -- 10
+ "mmmmmmmvmmb...o", -- 11
+ "mmmmmmmmmmb...o", -- 12
+ "mmmmmmmmmmb...o", -- 13
+ "mmmmmmmmmmbbbbb", -- 14
+
+ -- Level 19
+ "mmmmmmmmmmbbbbb", -- 0
+ "mmmmmmmmmmb...b", -- 1
+ "mmmmmmmmmmb...o", -- 2
+ "mmmmmmmmmmb...b", -- 3
+ "mmmmmmmmmmbbbbb", -- 4
+ "mmmmmmmmmmmmmmm", -- 5
+ "mmmmmmbbbmmmmmm", -- 6
+ "mmmmmmbbbmmmmmm", -- 7
+ "mmmmmmbbbmmmmmm", -- 8
+ "mmmmmmmmmmmmmmm", -- 9
+ "mmmmmmmmmmbbbbb", -- 10
+ "mmmmmmmmmmb...b", -- 11
+ "mmmmmmmmmmb...o", -- 12
+ "mmmmmmmmmmb...b", -- 13
+ "mmmmmmmmmmbbbbb", -- 14
+
+ -- Level 20
+ "mmmmmmmmmmbbbbb", -- 0
+ "mmmmmmmmmmb...b", -- 1
+ "mmmmmmmmmmb...b", -- 2
+ "mmmmmmmmmmb...b", -- 3
+ "mmmmmmmmmmbbbbb", -- 4
+ "mmmmmmmmmmmmmmm", -- 5
+ "mmmmmmmmmmmmmmm", -- 6
+ "mmmmmmmbmmmmmmm", -- 7
+ "mmmmmmmmmmmmmmm", -- 8
+ "mmmmmmmmmmmmmmm", -- 9
+ "mmmmmmmmmmbbbbb", -- 10
+ "mmmmmmmmmmb...b", -- 11
+ "mmmmmmmmmmb...b", -- 12
+ "mmmmmmmmmmb...b", -- 13
+ "mmmmmmmmmmbbbbb", -- 14
+
+ -- Level 21
+ "mmmmmmmmmmvrvrv", -- 0
+ "mmmmmmmmmmsbbbt", -- 1
+ "mmmmmmmmmmvbbbv", -- 2
+ "mmmmmmmmmmsbbbt", -- 3
+ "mmmmmmmmmmvqvqv", -- 4
+ "mmmmmmmmmmmmmmm", -- 5
+ "mmmmmmmmmmmmmmm", -- 6
+ "mmmmmmmmmmmmmmm", -- 7
+ "mmmmmmmmmmmmmmm", -- 8
+ "mmmmmmmmmmmmmmm", -- 9
+ "mmmmmmmmmmvrvrv", -- 10
+ "mmmmmmmmmmsbbbt", -- 11
+ "mmmmmmmmmmvbbbv", -- 12
+ "mmmmmmmmmmsbbbt", -- 13
+ "mmmmmmmmmmvqvqv", -- 14
+
+ -- Level 22
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmvmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmmmmmmmmmm", -- 5
+ "mmmmmmmmmmmmmmm", -- 6
+ "mmmmmmmmmmmmmmm", -- 7
+ "mmmmmmmmmmmmmmm", -- 8
+ "mmmmmmmmmmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmvmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ },
+ }, -- DesertPyramid
+
+
+
+ {
+ OriginData =
+ {
+ ExportName = "SandyDesertPyramid",
+ Name = "SandyDesertPyramid",
+ GalleryName = "Desert",
+ GalleryIndex = "223",
+ ID = "1707",
+ CreatorName = "12xx12",
+ },
+ Size =
+ {
+ x = 15,
+ y = 23,
+ z = 15,
+ },
+ Hitbox =
+ {
+ MinX = 0,
+ MinY = 0,
+ MinZ = 0,
+ MaxX = 14,
+ MaxY = 22,
+ MaxZ = 14,
+ },
+ StructureBox =
+ {
+ MinX = 0,
+ MinY = 0,
+ MinZ = 0,
+ MaxX = 14,
+ MaxY = 22,
+ MaxZ = 14,
+ },
+ Connectors =
+ {
+ },
+ Metadata =
+ {
+ ["AddWeightIfSame"] = "0",
+ ["AllowedRotations"] = "7",
+ ["DefaultWeight"] = "100",
+ ["DepthWeight"] = "",
+ ["ExpandFloorStrategy"] = "RepeatBottomTillNonAir",
+ ["IsStarting"] = "1",
+ ["MergeStrategy"] = "msSpongePrint",
+ ["MoveToGround"] = "0",
+ ["ShouldExpandFloor"] = "1",
+ ["VerticalStrategy"] = "Fixed|51",
+ },
+ BlockDefinitions =
+ {
+ ".: 0: 0", -- air
+ "a: 46: 0", -- tnt
+ "b: 24: 0", -- sandstone
+ "c: 24: 2", -- sandstone
+ "d: 54: 3", -- chest
+ "e: 54: 5", -- chest
+ "f: 70: 0", -- stonepressureplate
+ "g: 54: 4", -- chest
+ "h: 54: 2", -- chest
+ "i:128: 7", -- sandstonestairs
+ "j:128: 5", -- sandstonestairs
+ "k:128: 4", -- sandstonestairs
+ "l:128: 6", -- sandstonestairs
+ "m: 19: 0", -- sponge
+ "n: 24: 1", -- sandstone
+ "o:159: 1", -- whiteterracotta
+ "p:159:11", -- whiteterracotta
+ "q:128: 3", -- sandstonestairs
+ "r: 12: 0", -- sand
+ "s:128: 2", -- sandstonestairs
+ "t:128: 0", -- sandstonestairs
+ "u:128: 1", -- sandstonestairs
+ "v: 44: 9", -- stone_slab
+ "w: 44: 1", -- stone_slab
+ },
+ BlockData =
+ {
+ -- Level 0
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmmmmmmmmmm", -- 5
+ "mmmmmmaaammmmmm", -- 6
+ "mmmmmmaaammmmmm", -- 7
+ "mmmmmmaaammmmmm", -- 8
+ "mmmmmmmmmmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 1
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmmbmmmmmmm", -- 5
+ "mmmmmmcccmmmmmm", -- 6
+ "mmmmmbcbcbmmmmm", -- 7
+ "mmmmmmcccmmmmmm", -- 8
+ "mmmmmmmbmmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 2
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmbmmmmmmm", -- 4
+ "mmmmmmbdbmmmmmm", -- 5
+ "mmmmmb...bmmmmm", -- 6
+ "mmmmbe.f.gbmmmm", -- 7
+ "mmmmmb...bmmmmm", -- 8
+ "mmmmmmbhbmmmmmm", -- 9
+ "mmmmmmmbmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 3
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmbibmmmmmm", -- 5
+ "mmmmmb...bmmmmm", -- 6
+ "mmmmmj...kmmmmm", -- 7
+ "mmmmmb...bmmmmm", -- 8
+ "mmmmmmblbmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 4
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmnbnmmmmmm", -- 5
+ "mmmmmn...nmmmmm", -- 6
+ "mmmmmb...bmmmmm", -- 7
+ "mmmmmn...nmmmmm", -- 8
+ "mmmmmmnbnmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 5
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmcccmmmmmm", -- 5
+ "mmmmmc...cmmmmm", -- 6
+ "mmmmmc...cmmmmm", -- 7
+ "mmmmmc...cmmmmm", -- 8
+ "mmmmmmcccmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 6
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmcncmmmmmm", -- 5
+ "mmmmmc...cmmmmm", -- 6
+ "mmmmmn...nmmmmm", -- 7
+ "mmmmmc...cmmmmm", -- 8
+ "mmmmmmcncmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 7
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmncnmmmmmm", -- 5
+ "mmmmmn...nmmmmm", -- 6
+ "mmmmmc...cmmmmm", -- 7
+ "mmmmmn...nmmmmm", -- 8
+ "mmmmmmncnmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 8
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmbbbmmmmmm", -- 5
+ "mmmmmb...bmmmmm", -- 6
+ "mmmmmb...bmmmmm", -- 7
+ "mmmmmb...bmmmmm", -- 8
+ "mmmmmmbbbmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 9
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmbbbmmmmmm", -- 5
+ "mmmmmb...bmmmmm", -- 6
+ "mmmmmb...bmmmmm", -- 7
+ "mmmmmb...bmmmmm", -- 8
+ "mmmmmmbbbmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 10
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmmmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmbbbmmmmmm", -- 5
+ "mmmmmb...bmmmmm", -- 6
+ "mmmmmb...bmmmmm", -- 7
+ "mmmmmb...bmmmmm", -- 8
+ "mmmmmmbbbmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmmmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ -- Level 11
+ "bbbbbbbbbbbbbbb", -- 0
+ "bbbbbbbbbbbbbbb", -- 1
+ "bbbbbbbbbbbbbbb", -- 2
+ "bbbbbbbbbbbbbbb", -- 3
+ "bbbbobobbbobbbb", -- 4
+ "bbbbbobbbobbbbb", -- 5
+ "bbbbbbobobbbbbb", -- 6
+ "bbbbbbbpbbbbbbb", -- 7
+ "bbbbbbobobbbbbb", -- 8
+ "bbbbbobbbobbbbb", -- 9
+ "bbbbobobbbobbbb", -- 10
+ "bbbbbbbbbbbbbbb", -- 11
+ "bbbbbbbbbbbbbbb", -- 12
+ "bbbbbbbbbbbbbbb", -- 13
+ "bbbbbbbbbbbbbbb", -- 14
+
+ -- Level 12
+ "bbbbbbbbbbbbbbb", -- 0
+ "b.........bbbbb", -- 1
+ "b.........bqrbb", -- 2
+ "b......rr.b..bb", -- 3
+ "b....s...r.b.bb", -- 4
+ "b...tburr.....b", -- 5
+ "b...rqrrrr..rrb", -- 6
+ "b....rrrrrr.rrr", -- 7
+ "b....srrrr..rrb", -- 8
+ "b...tbu.r.r...b", -- 9
+ "b....q.r...b.bb", -- 10
+ "b.........b..bb", -- 11
+ "b.........bsrbb", -- 12
+ "b.........bbbbb", -- 13
+ "bbbbbbbbbbbbbbb", -- 14
+
+ -- Level 13
+ "bbbbbbbbbbbbbbb", -- 0
+ "b.........brtbb", -- 1
+ "b.........b.rbo", -- 2
+ "b.........b..bb", -- 3
+ "b..........b.bb", -- 4
+ "b....b........b", -- 5
+ "b......rr....rb", -- 6
+ "b.....rrrr...rr", -- 7
+ "b......rr.....b", -- 8
+ "b....b........b", -- 9
+ "b..........b.bb", -- 10
+ "b.........b..bb", -- 11
+ "b.........b.rbo", -- 12
+ "b.........brtbb", -- 13
+ "bbbbbbbbbbbbbbb", -- 14
+
+ -- Level 14
+ "mmmmmmmmmmbbbbb", -- 0
+ "mbbbbbbbbbbrrrb", -- 1
+ "mbv......vb.rso", -- 2
+ "mb........b.vbb", -- 3
+ "mb.........bbbb", -- 4
+ "mb...b......vbw", -- 5
+ "mb......r...vbb", -- 6
+ "mb....r......vb", -- 7
+ "mb.....r....vbb", -- 8
+ "mb...b......vbw", -- 9
+ "mb.........bbbb", -- 10
+ "mb........b.vbb", -- 11
+ "mbv......vb.rqo", -- 12
+ "mbbbbbbbbbbrrrb", -- 13
+ "mmmmmmmmmmbbbbb", -- 14
+
+ -- Level 15
+ "mmmmmmmmmmbbbbb", -- 0
+ "mmmmmmmmmmbr..b", -- 1
+ "mmbbbbbbbbbbr.o", -- 2
+ "mmbbbbbbbbbburb", -- 3
+ "mmbbbbbbbbbbbbb", -- 4
+ "mmbbbbbbbbbbbmm", -- 5
+ "mmbbbb..rbbbbwm", -- 6
+ "mmbbbbr..bbbbbw", -- 7
+ "mmbbbb.r.bbbbwm", -- 8
+ "mmbbbbbbbbbbbmm", -- 9
+ "mmbbbbbbbbbbbbb", -- 10
+ "mmbbbbbbbbbburb", -- 11
+ "mmbbbbbbbbbbrro", -- 12
+ "mmmmmmmmmmbrr.b", -- 13
+ "mmmmmmmmmmbbbbb", -- 14
+
+ -- Level 16
+ "mmmmmmmmmmbbbbb", -- 0
+ "mmmmmmmmmmb...b", -- 1
+ "mmmmmmmrmmrr..o", -- 2
+ "mmmbbbbrbbbrr.b", -- 3
+ "mmmbvrrrrrvbbbb", -- 4
+ "mmmb.brrrr.bmmm", -- 5
+ "mmmb.r...rrbmmm", -- 6
+ "mmmbrr...rrbwmm", -- 7
+ "mmmbrr...rrbmmm", -- 8
+ "mmmb.brrrrrbmmm", -- 9
+ "mmmbv.rrrrvbbbb", -- 10
+ "mmmbbbbrbbbrr.b", -- 11
+ "mmmmmmmmmrrrr.o", -- 12
+ "mmmmmmmmmmb...b", -- 13
+ "mmmmmmmmmmbbbbb", -- 14
+
+ -- Level 17
+ "mmmmmmmmmmbbbbb", -- 0
+ "mmmmmmmmmmb...b", -- 1
+ "mmmmmmmmmmrr..o", -- 2
+ "mmmmmmbrbrb...b", -- 3
+ "mmmmbbbrbbbbbbb", -- 4
+ "mmmmbb.r..bmmmm", -- 5
+ "mmmmb.....bmmmm", -- 6
+ "mmmmbr....bmmmm", -- 7
+ "mmmmb.....bmmmm", -- 8
+ "mmmmbb..r.bmmmm", -- 9
+ "mmmmbbbrbbbbbbb", -- 10
+ "mmmmmmbrbmb.r.b", -- 11
+ "mmmmmmmmmmrr..o", -- 12
+ "mmmmmmmmmmb...b", -- 13
+ "mmmmmmmmmmbbbbb", -- 14
+
+ -- Level 18
+ "mmmmmmmmmmbbbbb", -- 0
+ "mmmmmmmmmmb...o", -- 1
+ "mmmmmmmmmmb...o", -- 2
+ "mmmmmmmwmmb...o", -- 3
+ "mmmmmmwbwmbbbbb", -- 4
+ "mmmmmbbbbbmmmmm", -- 5
+ "mmmmmbv.vbmmmmm", -- 6
+ "mmmmmb...bmmmmm", -- 7
+ "mmmmmbv.vbmmmmm", -- 8
+ "mmmmmbbbbbmmmmm", -- 9
+ "mmmmmmwbwmbbbbb", -- 10
+ "mmmmmmmwmmb...o", -- 11
+ "mmmmmmmmmmb...o", -- 12
+ "mmmmmmmmmmb...o", -- 13
+ "mmmmmmmmmmbbbbb", -- 14
+
+ -- Level 19
+ "mmmmmmmmmmbbbbb", -- 0
+ "mmmmmmmmmmb...b", -- 1
+ "mmmmmmmmmmb...o", -- 2
+ "mmmmmmmmmmb...b", -- 3
+ "mmmmmmmmmmbbbbb", -- 4
+ "mmmmmmmmmmmmmmm", -- 5
+ "mmmmmmbbbmmmmmm", -- 6
+ "mmmmmmb.bmmmmmm", -- 7
+ "mmmmmmbbbmmmmmm", -- 8
+ "mmmmmmmmmmmmmmm", -- 9
+ "mmmmmmmmmmbbbbb", -- 10
+ "mmmmmmmmmmb...b", -- 11
+ "mmmmmmmmmmb...o", -- 12
+ "mmmmmmmmmmb...b", -- 13
+ "mmmmmmmmmmbbbbb", -- 14
+
+ -- Level 20
+ "mmmmmmmmmmbbbbb", -- 0
+ "mmmmmmmmmmb...b", -- 1
+ "mmmmmmmmmmb...b", -- 2
+ "mmmmmmmmmmb...b", -- 3
+ "mmmmmmmmmmbbbbb", -- 4
+ "mmmmmmmmmmmmmmm", -- 5
+ "mmmmmmmmmmmmmmm", -- 6
+ "mmmmmmmmmmmmmmm", -- 7
+ "mmmmmmmmmmmmmmm", -- 8
+ "mmmmmmmmmmmmmmm", -- 9
+ "mmmmmmmmmmbbbbb", -- 10
+ "mmmmmmmmmmb...b", -- 11
+ "mmmmmmmmmmb...b", -- 12
+ "mmmmmmmmmmb...b", -- 13
+ "mmmmmmmmmmbbbbb", -- 14
+
+ -- Level 21
+ "mmmmmmmmmmwswsw", -- 0
+ "mmmmmmmmmmtbbbu", -- 1
+ "mmmmmmmmmmwbbbw", -- 2
+ "mmmmmmmmmmtbbbu", -- 3
+ "mmmmmmmmmmwqwqw", -- 4
+ "mmmmmmmmmmmmmmm", -- 5
+ "mmmmmmmmmmmmmmm", -- 6
+ "mmmmmmmmmmmmmmm", -- 7
+ "mmmmmmmmmmmmmmm", -- 8
+ "mmmmmmmmmmmmmmm", -- 9
+ "mmmmmmmmmmwswsw", -- 10
+ "mmmmmmmmmmtbbbu", -- 11
+ "mmmmmmmmmmwbbbw", -- 12
+ "mmmmmmmmmmtbbbu", -- 13
+ "mmmmmmmmmmwqwqw", -- 14
+
+ -- Level 22
+ "mmmmmmmmmmmmmmm", -- 0
+ "mmmmmmmmmmmmmmm", -- 1
+ "mmmmmmmmmmmmwmm", -- 2
+ "mmmmmmmmmmmmmmm", -- 3
+ "mmmmmmmmmmmmmmm", -- 4
+ "mmmmmmmmmmmmmmm", -- 5
+ "mmmmmmmmmmmmmmm", -- 6
+ "mmmmmmmmmmmmmmm", -- 7
+ "mmmmmmmmmmmmmmm", -- 8
+ "mmmmmmmmmmmmmmm", -- 9
+ "mmmmmmmmmmmmmmm", -- 10
+ "mmmmmmmmmmmmmmm", -- 11
+ "mmmmmmmmmmmmwmm", -- 12
+ "mmmmmmmmmmmmmmm", -- 13
+ "mmmmmmmmmmmmmmm", -- 14
+
+ },
+ }, -- SandyDesertPyramid
+ }, -- Pieces
+}
+
+
+
+
diff --git a/Server/Prefabs/SinglePieceStructures/DesertWell.cubeset b/Server/Prefabs/SinglePieceStructures/DesertWell.cubeset
new file mode 100644
index 000000000..5bd5ae30c
--- /dev/null
+++ b/Server/Prefabs/SinglePieceStructures/DesertWell.cubeset
@@ -0,0 +1,137 @@
+
+-- DesertWell.cubeset
+
+-- Defines the prefabs in the group DesertWell
+
+-- NOTE: This file has been generated automatically by GalExport!
+-- Any manual changes will be overwritten by the next automatic export!
+
+
+
+
+Cubeset =
+{
+ Metadata =
+ {
+ CubesetFormatVersion = 1,
+ ExportDate = "2020-08-27 10:42:17",
+ ["AllowedBiomes"] = "Desert, DesertM, DesertHills",
+ ["GridSizeX"] = "750",
+ ["GridSizeZ"] = "750",
+ ["IntendedUse"] = "SinglePieceStructures",
+ ["MaxOffsetX"] = "100",
+ ["MaxOffsetZ"] = "100",
+ ["SeedOffset"] = "58612835",
+ },
+
+ Pieces =
+ {
+ {
+ OriginData =
+ {
+ ExportName = "DesertWell",
+ Name = "DesertWell",
+ GalleryName = "Desert",
+ GalleryIndex = "221",
+ ID = "1702",
+ CreatorName = "12xx12",
+ },
+ Size =
+ {
+ x = 5,
+ y = 6,
+ z = 5,
+ },
+ Hitbox =
+ {
+ MinX = 0,
+ MinY = 0,
+ MinZ = 0,
+ MaxX = 4,
+ MaxY = 5,
+ MaxZ = 4,
+ },
+ StructureBox =
+ {
+ MinX = 0,
+ MinY = 0,
+ MinZ = 0,
+ MaxX = 4,
+ MaxY = 5,
+ MaxZ = 4,
+ },
+ Connectors =
+ {
+ },
+ Metadata =
+ {
+ ["AddWeightIfSame"] = "0",
+ ["AllowedRotations"] = "7",
+ ["DefaultWeight"] = "100",
+ ["DepthWeight"] = "",
+ ["ExpandFloorStrategy"] = "RepeatBottomTillNonAir",
+ ["IsStarting"] = "1",
+ ["MergeStrategy"] = "msSpongePrint",
+ ["MoveToGround"] = "0",
+ ["VerticalStrategy"] = "TerrainOrOceanTop|-3",
+ },
+ BlockDefinitions =
+ {
+ ".: 0: 0", -- air
+ "a: 24: 0", -- sandstone
+ "b: 8: 0", -- water
+ "c: 44: 1", -- stone_slab
+ "m: 19: 0", -- sponge
+ },
+ BlockData =
+ {
+ -- Level 0
+ "aaaaa", -- 0
+ "aaaaa", -- 1
+ "aaaaa", -- 2
+ "aaaaa", -- 3
+ "aaaaa", -- 4
+
+ -- Level 1
+ "aaaaa", -- 0
+ "aaaaa", -- 1
+ "aabaa", -- 2
+ "aaaaa", -- 3
+ "aaaaa", -- 4
+
+ -- Level 2
+ "aacaa", -- 0
+ "aa.aa", -- 1
+ "c...c", -- 2
+ "aa.aa", -- 3
+ "aacaa", -- 4
+
+ -- Level 3
+ "mmmmm", -- 0
+ "ma.am", -- 1
+ "m...m", -- 2
+ "ma.am", -- 3
+ "mmmmm", -- 4
+
+ -- Level 4
+ "mmmmm", -- 0
+ "ma.am", -- 1
+ "m...m", -- 2
+ "ma.am", -- 3
+ "mmmmm", -- 4
+
+ -- Level 5
+ "mmmmm", -- 0
+ "mcccm", -- 1
+ "mcacm", -- 2
+ "mcccm", -- 3
+ "mmmmm", -- 4
+
+ },
+ }, -- DesertWell
+ }, -- Pieces
+}
+
+
+
+
diff --git a/Server/Prefabs/SinglePieceStructures/JungleTemple.cubeset b/Server/Prefabs/SinglePieceStructures/JungleTemple.cubeset
new file mode 100644
index 000000000..19bba113a
--- /dev/null
+++ b/Server/Prefabs/SinglePieceStructures/JungleTemple.cubeset
@@ -0,0 +1,350 @@
+
+-- JungleTemple.cubeset
+
+-- Defines the prefabs in the group JungleTemple
+
+-- NOTE: This file has been generated automatically by GalExport!
+-- Any manual changes will be overwritten by the next automatic export!
+
+
+
+
+Cubeset =
+{
+ Metadata =
+ {
+ CubesetFormatVersion = 1,
+ ExportDate = "2020-08-27 10:42:17",
+ ["AllowedBiomes"] = "Jungle, JungleHills, BambooJungle, BambooJungleHills",
+ ["GridSizeX"] = "750",
+ ["GridSizeZ"] = "750",
+ ["IntendedUse"] = "SinglePieceStructures",
+ ["MaxOffsetX"] = "100",
+ ["MaxOffsetZ"] = "100",
+ ["SeedOffset"] = "64775119",
+ },
+
+ Pieces =
+ {
+ {
+ OriginData =
+ {
+ ExportName = "JungleTemple_1703",
+ Name = "JungleTemple",
+ GalleryName = "Cube",
+ GalleryIndex = "162",
+ ID = "1703",
+ CreatorName = "12xx12",
+ },
+ Size =
+ {
+ x = 12,
+ y = 14,
+ z = 15,
+ },
+ Hitbox =
+ {
+ MinX = 0,
+ MinY = 0,
+ MinZ = 0,
+ MaxX = 11,
+ MaxY = 13,
+ MaxZ = 14,
+ },
+ StructureBox =
+ {
+ MinX = 0,
+ MinY = 0,
+ MinZ = 0,
+ MaxX = 11,
+ MaxY = 13,
+ MaxZ = 14,
+ },
+ Connectors =
+ {
+ },
+ Metadata =
+ {
+ ["AddWeightIfSame"] = "0",
+ ["AllowedRotations"] = "7",
+ ["DefaultWeight"] = "100",
+ ["DepthWeight"] = "",
+ ["ExpandFloorStrategy"] = "RepeatBottomTillNonAir",
+ ["IsStarting"] = "1",
+ ["MergeStrategy"] = "msSpongePrint",
+ ["MoveToGround"] = "0",
+ ["VerticalStrategy"] = "TerrainOrOceanTop|-4",
+ },
+ BlockDefinitions =
+ {
+ ".: 0: 0", -- air
+ "a: 48: 0", -- mossycobblestone
+ "b: 4: 0", -- cobblestone
+ "c: 54: 3", -- chest
+ "d: 67: 2", -- stonestairs
+ "e:131: 3", -- tripwirehook
+ "f:132: 0", -- tripwire
+ "g:131: 1", -- tripwirehook
+ "h: 55: 0", -- redstonewire
+ "i:131: 0", -- tripwirehook
+ "j: 54: 5", -- chest
+ "k:131: 2", -- tripwirehook
+ "l: 69:12", -- lever
+ "m: 19: 0", -- sponge
+ "n: 98: 3", -- stonebricks
+ "o: 93: 2", -- unpoweredrepeater
+ "p: 29: 5", -- stickypiston
+ "q: 29: 1", -- stickypiston
+ "r: 23: 5", -- dispenser
+ "s: 23: 2", -- dispenser
+ "t: 67: 7", -- stonestairs
+ "u: 67: 3", -- stonestairs
+ },
+ BlockData =
+ {
+ -- Level 0
+ "aabbbbbaabaa", -- 0
+ "aaaaaaaaaaaa", -- 1
+ "babbbaaaaaab", -- 2
+ "baabaaababaa", -- 3
+ "aaabaabbbaaa", -- 4
+ "babaabbaabba", -- 5
+ "bbabaaabbaab", -- 6
+ "baabbbabaaaa", -- 7
+ "bbbaaaabaaaa", -- 8
+ "bbaabbaaaaab", -- 9
+ "abaaabababbb", -- 10
+ "bbaaaaabbaba", -- 11
+ "abaaababbaaa", -- 12
+ "aaaabaabbaab", -- 13
+ "aabaabaaaaab", -- 14
+
+ -- Level 1
+ "abaaaabbaabb", -- 0
+ "a.........ab", -- 1
+ "a..........b", -- 2
+ "aabab..a..aa", -- 3
+ "abcaa..a...a", -- 4
+ "aa.bbddb..ab", -- 5
+ "ba.aaabeffgb", -- 6
+ "ba.babhb..bb", -- 7
+ "bbhhaahb...a", -- 8
+ "aahaiaha..ab", -- 9
+ "aaa.f.h....b", -- 10
+ "abj.f.h...aa", -- 11
+ "baa.f.h....b", -- 12
+ "aa.akahha.ba", -- 13
+ "aababaaabaab", -- 14
+
+ -- Level 2
+ "abaaaabbabaa", -- 0
+ "b.........ab", -- 1
+ "alll.......b", -- 2
+ "bnnnb..a..bb", -- 3
+ "bo.hb..a...a", -- 4
+ "aa.hb..b..ba", -- 5
+ "apq.bdda..ab", -- 6
+ "baaaaabb..ba", -- 7
+ "aaaaba.a...a", -- 8
+ "ba..a.....ba", -- 9
+ "bbh........b", -- 10
+ "abr.......bb", -- 11
+ "ab.........b", -- 12
+ "babba.basbba", -- 13
+ "aaaaaaaaabaa", -- 14
+
+ -- Level 3
+ "baaaaaaaaaba", -- 0
+ "b..........b", -- 1
+ "a.......baaa", -- 2
+ "aaaba..a...a", -- 3
+ "b...a..aaaab", -- 4
+ "bh..b..a...b", -- 5
+ "ap..b..abaaa", -- 6
+ "aaaaadda...a", -- 7
+ "abbaatabbaaa", -- 8
+ "aaa.a.a....a", -- 9
+ "aab.....abbb", -- 10
+ "bba........a", -- 11
+ "aab.....baba", -- 12
+ "aab..b.....b", -- 13
+ "abaababbabaa", -- 14
+
+ -- Level 4
+ "baaabaaaaaaa", -- 0
+ "baabbbaabbaa", -- 1
+ "aaabbababaaa", -- 2
+ "aaaaababbaaa", -- 3
+ "aaabaabbabba", -- 4
+ "aabbb..bbaab", -- 5
+ "aabab..babba", -- 6
+ "aaabb..baaaa", -- 7
+ "babaaddababb", -- 8
+ "abaaabaabbbb", -- 9
+ "abaabaaaabaa", -- 10
+ "bbaabaaaaaaa", -- 11
+ "bbbbaabbbbaa", -- 12
+ "aaaaaaaaabab", -- 13
+ "bbaauuuuaaaa", -- 14
+
+ -- Level 5
+ "............", -- 0
+ "............", -- 1
+ "..bbabbbab..", -- 2
+ "..a......b..", -- 3
+ "..a.abab.b..", -- 4
+ "..a.a..b.b..", -- 5
+ "..a.u..u.a..", -- 6
+ "..a......b..", -- 7
+ "..b......a..", -- 8
+ "..b......b..", -- 9
+ "..a......a..", -- 10
+ "..a......b..", -- 11
+ "..aaa..baa..", -- 12
+ "............", -- 13
+ "............", -- 14
+
+ -- Level 6
+ "............", -- 0
+ "............", -- 1
+ "..bab..aaa..", -- 2
+ "..b......a..", -- 3
+ "..a......a..", -- 4
+ "..a......b..", -- 5
+ "..a......a..", -- 6
+ "..a......a..", -- 7
+ "..b......b..", -- 8
+ "..a......a..", -- 9
+ "..b......b..", -- 10
+ "..b......b..", -- 11
+ "..aaa..bbb..", -- 12
+ "............", -- 13
+ "............", -- 14
+
+ -- Level 7
+ "............", -- 0
+ ".aababaabaa.", -- 1
+ ".bbbabbaabb.", -- 2
+ ".babbbaabbb.", -- 3
+ ".baataataaa.", -- 4
+ ".aab....aaa.", -- 5
+ ".baa....aaa.", -- 6
+ ".aaa....aab.", -- 7
+ ".aab....aab.", -- 8
+ ".aaabaabbab.", -- 9
+ ".abbaababaa.", -- 10
+ ".ababbaabba.", -- 11
+ ".aabaaaabba.", -- 12
+ ".babbbabaaa.", -- 13
+ "............", -- 14
+
+ -- Level 8
+ "..b.a..b.b..", -- 0
+ ".bbaabaaabb.", -- 1
+ "bb........bb", -- 2
+ ".a........b.", -- 3
+ "aa........ba", -- 4
+ ".a........b.", -- 5
+ "bb........ab", -- 6
+ ".b........a.", -- 7
+ "aa........ba", -- 8
+ ".a..daad..a.", -- 9
+ "aa........ba", -- 10
+ ".a........a.", -- 11
+ "ab........bb", -- 12
+ ".baaababaab.", -- 13
+ "..a.a..b.a..", -- 14
+
+ -- Level 9
+ "..a.a..b.a..", -- 0
+ ".bbba..aaaa.", -- 1
+ "bb........bb", -- 2
+ ".a........a.", -- 3
+ "bb........aa", -- 4
+ "............", -- 5
+ "ab........bb", -- 6
+ ".a........b.", -- 7
+ "bb........bb", -- 8
+ "............", -- 9
+ "ab........bb", -- 10
+ ".a........a.", -- 11
+ "bb........bb", -- 12
+ ".aaba..babb.", -- 13
+ "..b.a..a.a..", -- 14
+
+ -- Level 10
+ "............", -- 0
+ ".bbabababab.", -- 1
+ ".abaabbaaab.", -- 2
+ ".aabbaaaabb.", -- 3
+ ".aaaaaaabba.", -- 4
+ "abab....abaa", -- 5
+ ".aab....aaa.", -- 6
+ ".aba....baa.", -- 7
+ ".baa....abb.", -- 8
+ "aabb....baab", -- 9
+ ".baaababbaa.", -- 10
+ ".ababaaaaaa.", -- 11
+ ".ababaaaaba.", -- 12
+ ".aaaabaabaa.", -- 13
+ ".....ba.....", -- 14
+
+ -- Level 11
+ "............", -- 0
+ "............", -- 1
+ "..a......b..", -- 2
+ "...abbbab...", -- 3
+ "...aaaaab...", -- 4
+ "...bbaabb...", -- 5
+ "...aa..ba...", -- 6
+ "...ab..bb...", -- 7
+ "...aa..aa...", -- 8
+ "...aaaaaa...", -- 9
+ "...baaaba...", -- 10
+ "...ababaa...", -- 11
+ "..b......a..", -- 12
+ "............", -- 13
+ "............", -- 14
+
+ -- Level 12
+ "............", -- 0
+ "............", -- 1
+ "..a......a..", -- 2
+ "............", -- 3
+ "....abaa....", -- 4
+ "....baab....", -- 5
+ "....bbab....", -- 6
+ "....baab....", -- 7
+ "....bbaa....", -- 8
+ "....abaa....", -- 9
+ "....baba....", -- 10
+ "............", -- 11
+ "..b......a..", -- 12
+ "............", -- 13
+ "............", -- 14
+
+ -- Level 13
+ "............", -- 0
+ "............", -- 1
+ "..a......a..", -- 2
+ "............", -- 3
+ "....a..b....", -- 4
+ "............", -- 5
+ ".....dd.....", -- 6
+ ".....ab.....", -- 7
+ ".....uu.....", -- 8
+ "............", -- 9
+ "....b..b....", -- 10
+ "............", -- 11
+ "..b......b..", -- 12
+ "............", -- 13
+ "............", -- 14
+
+ },
+ }, -- JungleTemple_1703
+ }, -- Pieces
+}
+
+
+
+
diff --git a/Server/Prefabs/SinglePieceStructures/WitchHut.cubeset b/Server/Prefabs/SinglePieceStructures/WitchHut.cubeset
new file mode 100644
index 000000000..3a0b4061e
--- /dev/null
+++ b/Server/Prefabs/SinglePieceStructures/WitchHut.cubeset
@@ -0,0 +1,147 @@
+
+-- WitchHut.cubeset
+
+-- Defines the prefabs in the group WitchHut
+
+-- NOTE: This file has been generated automatically by GalExport!
+-- Any manual changes will be overwritten by the next automatic export!
+
+
+
+
+Cubeset =
+{
+ Metadata =
+ {
+ CubesetFormatVersion = 1,
+ ExportDate = "2020-08-27 10:42:17",
+ ["AllowedBiomes"] = "Swampland, SwamplandM",
+ ["GridSizeX"] = "750",
+ ["GridSizeZ"] = "750",
+ ["IntendedUse"] = "SinglePieceStructures",
+ ["MaxOffsetX"] = "100",
+ ["MaxOffsetZ"] = "100",
+ ["SeedOffset"] = "4136893",
+ },
+
+ Pieces =
+ {
+ {
+ OriginData =
+ {
+ ExportName = "WitchHut",
+ Name = "WitchHut",
+ GalleryName = "Cube",
+ GalleryIndex = "161",
+ ID = "1704",
+ CreatorName = "12xx12",
+ },
+ Size =
+ {
+ x = 9,
+ y = 5,
+ z = 7,
+ },
+ Hitbox =
+ {
+ MinX = 0,
+ MinY = 0,
+ MinZ = 0,
+ MaxX = 8,
+ MaxY = 4,
+ MaxZ = 6,
+ },
+ StructureBox =
+ {
+ MinX = 0,
+ MinY = 0,
+ MinZ = 0,
+ MaxX = 8,
+ MaxY = 4,
+ MaxZ = 6,
+ },
+ Connectors =
+ {
+ },
+ Metadata =
+ {
+ ["AddWeightIfSame"] = "0",
+ ["AllowedRotations"] = "7",
+ ["DefaultWeight"] = "100",
+ ["DepthWeight"] = "",
+ ["ExpandFloorStrategy"] = "RepeatBottomTillNonAir",
+ ["IsStarting"] = "1",
+ ["MergeStrategy"] = "msSpongePrint",
+ ["MoveToGround"] = "0",
+ ["VerticalStrategy"] = "TerrainOrOceanTop",
+ },
+ BlockDefinitions =
+ {
+ ".: 0: 0", -- air
+ "a: 17: 0", -- tree
+ "b: 5: 1", -- planks
+ "c: 85: 0", -- fence
+ "d:118: 0", -- cauldronblock
+ "e: 58: 0", -- workbench
+ "f:140: 0", -- flowerpotblock
+ "g:134: 2", -- sprucewoodstairs
+ "h:134: 0", -- sprucewoodstairs
+ "i:134: 1", -- sprucewoodstairs
+ "j:134: 3", -- sprucewoodstairs
+ "m: 19: 0", -- sponge
+ },
+ BlockData =
+ {
+ -- Level 0
+ ".........", -- 0
+ ".a....a..", -- 1
+ ".........", -- 2
+ ".........", -- 3
+ ".........", -- 4
+ ".a....a..", -- 5
+ ".........", -- 6
+
+ -- Level 1
+ ".........", -- 0
+ ".abbbbab.", -- 1
+ ".bbbbbbbb", -- 2
+ ".bbbbbbbb", -- 3
+ ".bbbbbbbb", -- 4
+ ".abbbbab.", -- 5
+ ".........", -- 6
+
+ -- Level 2
+ ".........", -- 0
+ ".abbbbac.", -- 1
+ ".bd......", -- 2
+ ".be...b..", -- 3
+ ".b....b..", -- 4
+ ".abbbbac.", -- 5
+ ".........", -- 6
+
+ -- Level 3
+ ".........", -- 0
+ ".ab..ba..", -- 1
+ ".b.......", -- 2
+ ".c....b..", -- 3
+ ".b....c..", -- 4
+ ".abf.ba..", -- 5
+ ".........", -- 6
+
+ -- Level 4
+ "gggggggg.", -- 0
+ "hbbbbbbi.", -- 1
+ "hbbbbbbi.", -- 2
+ "hbbbbbbi.", -- 3
+ "hbbbbbbi.", -- 4
+ "hbbbbbbi.", -- 5
+ "hjjjjjjj.", -- 6
+
+ },
+ }, -- WitchHut
+ }, -- Pieces
+}
+
+
+
+
diff --git a/src/Generating/CMakeLists.txt b/src/Generating/CMakeLists.txt
index d6f0ce2fb..bf539d6c2 100644
--- a/src/Generating/CMakeLists.txt
+++ b/src/Generating/CMakeLists.txt
@@ -24,6 +24,7 @@ target_sources(
PrefabStructure.cpp
Ravines.cpp
RoughRavines.cpp
+ SinglePieceStructuresGen.cpp
StructGen.cpp
Trees.cpp
TwoHeights.cpp
@@ -58,6 +59,7 @@ target_sources(
Ravines.h
RoughRavines.h
ShapeGen.cpp
+ SinglePieceStructuresGen.h
StructGen.h
Trees.h
TwoHeights.h
diff --git a/src/Generating/ComposableGenerator.cpp b/src/Generating/ComposableGenerator.cpp
index 5dd54a497..7c891f5fa 100644
--- a/src/Generating/ComposableGenerator.cpp
+++ b/src/Generating/ComposableGenerator.cpp
@@ -27,6 +27,7 @@
#include "Noise3DGenerator.h"
#include "Ravines.h"
#include "RoughRavines.h"
+#include "SinglePieceStructuresGen.h"
#include "VillageGen.h"
#include "PieceStructuresGen.h"
@@ -217,6 +218,7 @@ void cComposableGenerator::InitializeGeneratorDefaults(cIniFile & a_IniFile, eDi
"Mineshafts, "
"Trees, "
"Villages, "
+ "SinglePieceStructures: JungleTemple|WitchHut|DesertPyramid|DesertWell, "
"TallGrass, "
"SprinkleFoliage, "
"Ice, "
@@ -606,6 +608,20 @@ void cComposableGenerator::InitFinishGens(cIniFile & a_IniFile)
GridSize, MaxOffset
)));
}
+ else if (NoCaseCompare(finisher, "SinglePieceStructures") == 0)
+ {
+ if (split.size() < 2)
+ {
+ LOGWARNING("The SinglePieceStructures generator needs the structures to use. Example: \"SinglePieceStructures: DesertPyramid\".");
+ continue;
+ }
+
+ auto Gen = std::make_shared<cSinglePieceStructuresGen>(m_Seed);
+ if (Gen->Initialize(split[1], seaLevel, m_BiomeGen, m_CompositedHeightCache))
+ {
+ m_FinishGens.push_back(Gen);
+ }
+ }
else if (NoCaseCompare(finisher, "SoulsandRims") == 0)
{
m_FinishGens.push_back(cFinishGenPtr(new cFinishGenSoulsandRims(m_Seed)));
diff --git a/src/Generating/SinglePieceStructuresGen.cpp b/src/Generating/SinglePieceStructuresGen.cpp
new file mode 100644
index 000000000..bd079d762
--- /dev/null
+++ b/src/Generating/SinglePieceStructuresGen.cpp
@@ -0,0 +1,205 @@
+
+#include "SinglePieceStructuresGen.h"
+
+#include "PrefabStructure.h"
+#include "../IniFile.h"
+#include "../Item.h"
+
+
+////////////////////////////////////////////////////////////////////////////////
+// cSinglePieceStructuresGen::cGen
+
+class cSinglePieceStructuresGen::cGen :
+ public cGridStructGen
+{
+ using Super = cGridStructGen;
+public:
+ cGen(int a_Seed, cBiomeGenPtr a_BiomeGen, cTerrainHeightGenPtr a_HeightGen, int a_SeaLevel, const AString & a_Name):
+ Super(a_Seed),
+ m_BiomeGen(std::move(a_BiomeGen)),
+ m_HeightGen(std::move(a_HeightGen)),
+ m_SeaLevel(a_SeaLevel),
+ m_Name(a_Name)
+ {
+ }
+
+
+
+ /** Loads the piecepool from a file.
+ Returns true on success, logs warning and returns false on failure. */
+ bool LoadFromFile(const AString & a_FileName)
+ {
+ m_PiecePool.Clear();
+
+ // Load the piecepool from the file, log any warnings:
+ if (!m_PiecePool.LoadFromFile(a_FileName, true))
+ {
+ return false;
+ }
+ if (NoCaseCompare(m_PiecePool.GetIntendedUse(), "SinglePieceStructures") != 0)
+ {
+ LOGWARNING("SinglePieceStructures generator: File %s is intended for use in \"%s\", rather than single piece structures. Loading the file, but the generator may behave unexpectedly.",
+ a_FileName.c_str(), m_PiecePool.GetIntendedUse().c_str()
+ );
+ }
+ m_PiecePool.AssignGens(m_Seed, m_BiomeGen, m_HeightGen, m_SeaLevel);
+
+ // Apply generator params from the piecepool (in the metadata) into the generator:
+ auto & generatorParams = m_PiecePool.GetAllMetadata();
+ SetGeneratorParams(generatorParams);
+
+ return true;
+ }
+
+
+
+
+ // cGridStructGen override
+ virtual cStructurePtr CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) override
+ {
+ // Generate the biomes for the chunk surrounding the origin:
+ int ChunkX, ChunkZ;
+ cChunkDef::BlockToChunk(a_OriginX, a_OriginZ, ChunkX, ChunkZ);
+ cChunkDef::BiomeMap Biomes;
+ m_BiomeGen->GenBiomes({ChunkX, ChunkZ}, Biomes);
+
+ // Checks if the biome at the origin position is allowed
+ if (!m_PiecePool.IsBiomeAllowed(Biomes[ChunkX + cChunkDef::Width * ChunkZ]))
+ {
+ return cStructurePtr();
+ }
+ cPlacedPieces OutPiece;
+ OutPiece.push_back(GetPiece(a_OriginX, a_OriginZ));
+ return std::make_shared<cPrefabStructure>(a_GridX, a_GridZ, a_OriginX, a_OriginZ, std::move(OutPiece), m_HeightGen);
+ }
+
+
+
+
+ /** Determines which piece to place from the piece pool */
+ cPlacedPiecePtr GetPiece(int a_BlockX, int a_BlockZ)
+ {
+ int rnd = m_Noise.IntNoise2DInt(a_BlockX, a_BlockZ) / 7;
+
+ // Choose a random one of the starting pieces:
+ cPieces StartingPieces = m_PiecePool.GetStartingPieces();
+ int Total = 0;
+ for (cPieces::const_iterator itr = StartingPieces.begin(), end = StartingPieces.end(); itr != end; ++itr)
+ {
+ Total += m_PiecePool.GetStartingPieceWeight(**itr);
+ }
+ cPiece * StartingPiece;
+ if (Total > 0)
+ {
+ int Chosen = rnd % Total;
+ StartingPiece = StartingPieces.front();
+ for (cPieces::const_iterator itr = StartingPieces.begin(), end = StartingPieces.end(); itr != end; ++itr)
+ {
+ Chosen -= m_PiecePool.GetStartingPieceWeight(**itr);
+ if (Chosen <= 0)
+ {
+ StartingPiece = *itr;
+ break;
+ }
+ }
+ }
+ else
+ {
+ // All pieces returned zero weight, but we need one to start. Choose with equal chance:
+ StartingPiece = StartingPieces[static_cast<size_t>(rnd) % StartingPieces.size()];
+ }
+ rnd = rnd >> 16;
+
+ // Choose a random supported rotation:
+ int Rotations[4] = {0};
+ int NumRotations = 1;
+ for (size_t i = 1; i < ARRAYCOUNT(Rotations); i++)
+ {
+ if (StartingPiece->CanRotateCCW(static_cast<int>(i)))
+ {
+ Rotations[NumRotations] = static_cast<int>(i);
+ NumRotations += 1;
+ }
+ }
+ int Rotation = Rotations[rnd % NumRotations];
+ int BlockY = StartingPiece->GetStartingPieceHeight(a_BlockX, a_BlockZ);
+ ASSERT(BlockY >= 0); // The vertical strategy should have been provided and should give valid coords
+
+ cPlacedPiece * Piece = new cPlacedPiece(nullptr, *StartingPiece, Vector3i(a_BlockX, BlockY, a_BlockZ), Rotation);
+ return cPlacedPiecePtr(Piece);
+ }
+
+protected:
+ /** The underlying biome generator that defines whether the structure is created or not */
+ cBiomeGenPtr m_BiomeGen;
+
+ /** The underlying height generator, used to position the prefabs crossing chunk borders if they are set to FitGround. */
+ cTerrainHeightGenPtr m_HeightGen;
+
+ /** The world's sea level, if available. Used for some cVerticalStrategy descendants. */
+ int m_SeaLevel;
+
+ /** The name that is used for reporting. */
+ AString m_Name;
+
+ /** All available prefabs. */
+ cPrefabPiecePool m_PiecePool;
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+// cSinglePieceStructuresGen
+
+cSinglePieceStructuresGen::cSinglePieceStructuresGen(int a_Seed) :
+ m_Seed(a_Seed)
+{
+}
+
+
+
+
+
+bool cSinglePieceStructuresGen::Initialize(const AString & a_Prefabs, int a_SeaLevel, const cBiomeGenPtr & a_BiomeGen, const cTerrainHeightGenPtr & a_HeightGen)
+{
+ // Load each piecepool:
+ auto Structures = StringSplitAndTrim(a_Prefabs, "|");
+ for (const auto & S: Structures)
+ {
+ auto FileName = Printf("Prefabs%cSinglePieceStructures%c%s.cubeset", cFile::PathSeparator(), cFile::PathSeparator(), S.c_str());
+ if (!cFile::IsFile(FileName))
+ {
+ FileName.append(".gz");
+ if (!cFile::IsFile(FileName))
+ {
+ LOGWARNING("Cannot load SinglePieceStructure cubeset file %s", FileName.c_str());
+ continue;
+ }
+ }
+
+ auto Gen = std::make_shared<cGen>(m_Seed, a_BiomeGen, a_HeightGen, a_SeaLevel, S);
+ if (Gen->LoadFromFile(FileName))
+ {
+ m_Gens.push_back(Gen);
+ }
+ }
+
+ // Report a warning if no generators available:
+ if (m_Gens.empty())
+ {
+ LOGWARNING("The PieceStructures generator was asked to generate \"%s\", but none of the prefabs are valid.", a_Prefabs.c_str());
+ return false;
+ }
+ return true;
+}
+
+
+
+
+
+void cSinglePieceStructuresGen::GenFinish(cChunkDesc & a_Chunk)
+{
+ for (auto & Gen: m_Gens)
+ {
+ Gen->GenFinish(a_Chunk);
+ }
+}
diff --git a/src/Generating/SinglePieceStructuresGen.h b/src/Generating/SinglePieceStructuresGen.h
new file mode 100644
index 000000000..c14757738
--- /dev/null
+++ b/src/Generating/SinglePieceStructuresGen.h
@@ -0,0 +1,52 @@
+
+// PrefabSingleStructureGen.h
+
+
+/*
+Classes to support the generation of single piece prefab structures
+*/
+
+#pragma once
+
+#include "Globals.h"
+
+#include "ComposableGenerator.h"
+#include "PrefabPiecePool.h"
+
+/** The Single Prefab Structure Generator:
+This uses the cGridStructGen to generate the structures on the map
+This is similar to the Piece Structure Generator but only placing one possible structure
+The Exported cubeset MUST have all possible structures as start structures or the server crashes on generation
+else it isn't accessible from the m_Piecepool. */
+class cSinglePieceStructuresGen :
+ public cFinishGen
+{
+using Super = cFinishGen;
+
+public:
+ cSinglePieceStructuresGen(int a_Seed);
+
+ /** Initializes the generator based on the specified prefab sets.
+ a_Prefabs contains the list of prefab sets that should be activated, "|"-separated.
+ All problems are logged to the console and the generator skips over them.
+ Returns true if at least one prefab set is valid (the generator should be kept). */
+ bool Initialize(const AString & a_Prefabs, int a_SeaLevel, const cBiomeGenPtr & a_BiomeGen, const cTerrainHeightGenPtr & a_HeightGen);
+
+
+ // cFinishGen override:
+ virtual void GenFinish(cChunkDesc & a_ChunkDesc) override;
+
+protected:
+ /** The generator doing the work for a single prefab set.
+ Forward-declared so that its implementation changes don't affect the header. */
+ class cGen;
+
+ typedef std::shared_ptr<cGen> cGenPtr;
+ typedef std::vector<cGenPtr> cGenPtrs;
+
+ /** The individual structure generators, one per piecepool. */
+ cGenPtrs m_Gens;
+
+ /** The seed for the random number generator */
+ int m_Seed;
+};
diff --git a/tests/Generating/CMakeLists.txt b/tests/Generating/CMakeLists.txt
index 241e2efb9..ef121d3ee 100644
--- a/tests/Generating/CMakeLists.txt
+++ b/tests/Generating/CMakeLists.txt
@@ -57,6 +57,7 @@ set (GENERATING_SRCS
${CMAKE_SOURCE_DIR}/src/Generating/PrefabStructure.cpp
${CMAKE_SOURCE_DIR}/src/Generating/Ravines.cpp
${CMAKE_SOURCE_DIR}/src/Generating/RoughRavines.cpp
+ ${CMAKE_SOURCE_DIR}/src/Generating/SinglePieceStructuresGen.cpp
${CMAKE_SOURCE_DIR}/src/Generating/StructGen.cpp
${CMAKE_SOURCE_DIR}/src/Generating/Trees.cpp
${CMAKE_SOURCE_DIR}/src/Generating/TwoHeights.cpp
@@ -126,6 +127,7 @@ set (GENERATING_HDRS
${CMAKE_SOURCE_DIR}/src/Generating/Ravines.h
${CMAKE_SOURCE_DIR}/src/Generating/RoughRavines.h
${CMAKE_SOURCE_DIR}/src/Generating/ShapeGen.cpp
+ ${CMAKE_SOURCE_DIR}/src/Generating/SinglePieceStructuresGen.h
${CMAKE_SOURCE_DIR}/src/Generating/StructGen.h
${CMAKE_SOURCE_DIR}/src/Generating/Trees.h
${CMAKE_SOURCE_DIR}/src/Generating/TwoHeights.h