55import com .faboslav .structurify .common .config .serialization .StructureDataSerializer ;
66import com .faboslav .structurify .common .config .serialization .StructureNamespaceDataSerializer ;
77import com .faboslav .structurify .common .config .serialization .StructureSetDataSerializer ;
8+ import com .faboslav .structurify .common .config .serialization .StructureTemplatePoolDataSerializer ;
89import com .faboslav .structurify .common .events .common .UpdateRegistriesEvent ;
910import com .faboslav .structurify .common .platform .PlatformHooks ;
1011import com .faboslav .structurify .common .registry .StructurifyRegistryManagerProvider ;
12+ import com .faboslav .structurify .common .registry .StructurifyTemplatePoolProvider ;
1113import com .google .gson .*;
1214
1315import java .io .IOException ;
@@ -39,6 +41,7 @@ public final class StructurifyConfig
3941 private Map <String , StructureNamespaceData > structureNamespaceData = new TreeMap <>();
4042 private Map <String , StructureData > structureData = new TreeMap <>();
4143 private Map <String , StructureSetData > structureSetData = new TreeMap <>();
44+ private Map <String , StructureTemplatePoolData > structureTemplatePoolsData = new TreeMap <>();
4245
4346 public final static boolean ENABLE_GLOBAL_SPACING_AND_SEPARATION_MODIFIER_DEFAULT_VALUE = false ;
4447 public final static double GLOBAL_SPACING_AND_SEPARATION_MODIFIER_DEFAULT_VALUE = 1.0D ;
@@ -54,6 +57,7 @@ public final class StructurifyConfig
5457 private static final String STRUCTURES_PROPERTY = "structures" ;
5558 private static final String STRUCTURE_NAMESPACES_PROPERTY = "structure_namespaces" ;
5659 private static final String STRUCTURE_SETS_PROPERTY = "structure_sets" ;
60+ private static final String STRUCTURE_TEMPLATE_POOLS_PROPERTY = "structure_template_pools" ;
5761
5862
5963 public Map <String , StructureNamespaceData > getStructureNamespaceData () {
@@ -68,6 +72,20 @@ public Map<String, StructureSetData> getStructureSetData() {
6872 return this .structureSetData ;
6973 }
7074
75+ public Map <String , StructureTemplatePoolData > getStructureTemplatePoolsData () {
76+ return this .structureTemplatePoolsData ;
77+ }
78+
79+ public Map <String , StructureTemplatePoolData > getStructureTemplatePoolsDataForStructure (String structureId ) {
80+ Set <String > structureTemplatePools = StructurifyTemplatePoolProvider .getStructureTemplatePoolIds ().get (structureId );
81+ return this .structureTemplatePoolsData .entrySet ().stream ()
82+ .filter (entry -> structureTemplatePools != null && structureTemplatePools .contains (entry .getKey ()))
83+ .collect (java .util .stream .Collectors .toMap (
84+ Map .Entry ::getKey ,
85+ Map .Entry ::getValue
86+ ));
87+ }
88+
7189 public DebugData getDebugData () {
7290 return this .debugData ;
7391 }
@@ -93,6 +111,7 @@ public void load() {
93111 this .structureNamespaceData = WorldgenDataProvider .getStructureNamespaces ();
94112 this .structureData = WorldgenDataProvider .getStructures ();
95113 this .structureSetData = WorldgenDataProvider .getStructureSets ();
114+ this .structureTemplatePoolsData = WorldgenDataProvider .getStructureTemplatePools ();
96115
97116 if (!Files .exists (configPath )) {
98117 return ;
@@ -105,6 +124,7 @@ public void load() {
105124 this .loadStructureNamespaces (json );
106125 this .loadStructures (json );
107126 this .loadStructureSets (json );
127+ this .loadStructureTemplatePools (json );
108128
109129 Structurify .getLogger ().info ("Structurify config loaded" );
110130 this .isLoaded = true ;
@@ -227,6 +247,33 @@ private void loadStructureSets(JsonObject json) {
227247 }
228248 }
229249
250+ private void loadStructureTemplatePools (JsonObject json ) {
251+ if (!json .has (STRUCTURE_TEMPLATE_POOLS_PROPERTY )) {
252+ return ;
253+ }
254+
255+ var structureTemplatePools = json .getAsJsonArray (STRUCTURE_TEMPLATE_POOLS_PROPERTY );
256+
257+ for (JsonElement structureTemplatePool : structureTemplatePools ) {
258+ var structureTemplatePoolJson = structureTemplatePool .getAsJsonObject ();
259+
260+ if (!structureTemplatePoolJson .has (StructureSetDataSerializer .NAME_PROPERTY )) {
261+ Structurify .getLogger ().info ("Found invalid structure template pool entry, skipping." );
262+ continue ;
263+ }
264+
265+ var structureTemplatePoolName = structureTemplatePoolJson .get (StructureSetDataSerializer .NAME_PROPERTY ).getAsString ();
266+
267+ if (!this .structureTemplatePoolsData .containsKey (structureTemplatePoolName )) {
268+ Structurify .getLogger ().info ("Found invalid structure template pool identifier of \" {}\" , skipping." , structureTemplatePoolName );
269+ continue ;
270+ }
271+
272+ var structureTemplatePoolData = this .structureTemplatePoolsData .get (structureTemplatePoolName );
273+ StructureTemplatePoolDataSerializer .load (structureTemplatePoolJson , structureTemplatePoolData );
274+ }
275+ }
276+
230277 public void save () {
231278 this .save (true );
232279 }
@@ -256,6 +303,7 @@ public void save(boolean syncRegistries) {
256303 this .saveStructureNamespacesData (json , true );
257304 this .saveStructuresData (json , true );
258305 this .saveStructureSetsData (json , true );
306+ this .saveStructureTemplatePoolsData (json , true );
259307
260308 Files .createDirectories (configPath .getParent ());
261309 Files .createFile (configPath );
@@ -306,6 +354,7 @@ public void dump() {
306354 this .saveStructureNamespacesData (json , false );
307355 this .saveStructuresData (json , false );
308356 this .saveStructureSetsData (json , false );
357+ this .saveStructureTemplatePoolsData (json , false );
309358
310359 Files .createDirectories (configDumpPath .getParent ());
311360 Files .createFile (configDumpPath );
@@ -375,6 +424,21 @@ private void saveStructureSetsData(JsonObject json, boolean saveOnlyChanged) {
375424 json .add (STRUCTURE_SETS_PROPERTY , structureSets );
376425 }
377426
427+ private void saveStructureTemplatePoolsData (JsonObject json , boolean saveOnlyChanged ) {
428+ JsonArray structureTemplatePools = new JsonArray ();
429+
430+ this .structureTemplatePoolsData .entrySet ().stream ()
431+ .filter (entry -> !saveOnlyChanged || !entry .getValue ().isUsingDefaultValues ())
432+ .forEach (structureTemplatePoolDataEntry -> {
433+ var structureTemplatePoolName = structureTemplatePoolDataEntry .getKey ();
434+ var structureTemplatePoolData = structureTemplatePoolDataEntry .getValue ();
435+
436+ StructureTemplatePoolDataSerializer .save (structureTemplatePools , structureTemplatePoolName , structureTemplatePoolData );
437+ });
438+
439+ json .add (STRUCTURE_TEMPLATE_POOLS_PROPERTY , structureTemplatePools );
440+ }
441+
378442 private Path getBackupConfigPath () {
379443 String dateTime = LocalDateTime .now ().format (DateTimeFormatter .ofPattern ("yyyy-MM-dd_HH-mm-ss" ));
380444 return Path .of (BACKUP_CONFIG_DIR .toString (), Structurify .MOD_ID + "_backup_" + dateTime + ".json" );
0 commit comments