22
33import com .faboslav .structurify .common .Structurify ;
44import com .mojang .serialization .Codec ;
5+ import com .mojang .serialization .Lifecycle ;
56import net .minecraft .core .*;
67import net .minecraft .resources .RegistryDataLoader ;
78import net .minecraft .resources .ResourceKey ;
9+ import net .minecraft .resources .Identifier ;
810import net .minecraft .server .packs .PackType ;
911import net .minecraft .server .packs .resources .MultiPackResourceManager ;
12+ import net .minecraft .server .packs .resources .ResourceManager ;
13+ import net .minecraft .tags .TagKey ;
14+ import net .minecraft .tags .TagLoader ;
15+ import net .minecraft .util .Util ;
16+ import net .minecraft .commands .Commands ;
1017import net .minecraft .core .registries .Registries ;
18+ import net .minecraft .server .WorldLoader ;
19+ import net .minecraft .server .WorldStem ;
1120import net .minecraft .server .packs .repository .PackRepository ;
1221import net .minecraft .server .packs .repository .RepositorySource ;
22+ import net .minecraft .world .level .WorldDataConfiguration ;
1323import net .minecraft .world .level .biome .Biome ;
1424import net .minecraft .world .level .levelgen .carver .ConfiguredWorldCarver ;
1525import net .minecraft .world .level .levelgen .feature .ConfiguredFeature ;
1626import net .minecraft .world .level .levelgen .placement .PlacedFeature ;
27+ import net .minecraft .world .level .levelgen .presets .WorldPresets ;
1728import net .minecraft .world .level .levelgen .structure .Structure ;
1829import net .minecraft .world .level .levelgen .structure .StructureSet ;
1930import net .minecraft .world .level .levelgen .structure .pools .StructureTemplatePool ;
2031import net .minecraft .world .level .levelgen .structure .templatesystem .StructureProcessorType ;
2132import org .jetbrains .annotations .Nullable ;
33+
34+ import java .util .Collection ;
35+ import java .util .HashMap ;
2236import java .util .List ;
37+ import java .util .Map ;
38+
39+ //? if >= 1.21.11 {
40+ import net .minecraft .server .permissions .PermissionSet ;
41+ //?}
2342
2443//? if >= 1.21.3 {
2544import net .minecraft .server .RegistryLayer ;
2645import net .minecraft .tags .TagLoader ;
2746//?} else {
2847/*import net.minecraft.core.registries.BuiltInRegistries;
29- */ //?}
48+ *///?}
3049
3150//? if >= 26.1 {
3251import net .minecraft .resources .RegistryValidator ;
@@ -70,10 +89,79 @@ public static HolderLookup.RegistryLookup<Structure> getStructureRegistry() {
7089 return registryManager .lookup (Registries .STRUCTURE ).orElse (null );
7190 }
7291
92+ @ Nullable
93+ public static HolderLookup .RegistryLookup <StructureSet > getStructureSetRegistry () {
94+ var registryManager = StructurifyRegistryManagerProvider .getRegistryManager ();
95+
96+ if (registryManager == null ) {
97+ return null ;
98+ }
99+
100+ return registryManager .lookup (Registries .STRUCTURE_SET ).orElse (null );
101+ }
102+
73103 public static void setRegistryManager (HolderLookup .Provider registryAccess ) {
74104 registryManager = registryAccess ;
75105 }
76106
107+ public static void loadRegistryManager2 () {
108+ if (isLoading ) {
109+ return ;
110+ }
111+
112+ isLoading = true ;
113+ try {
114+ Structurify .getLogger ().info ("Loading registry manager..." );
115+ var resourcePackProviders = StructurifyResourcePackProvider .getResourcePackProviders ();
116+
117+ for (var resourcePackProvider : resourcePackProviders ) {
118+ Structurify .getLogger ().info ("Registering resource pack provider: " + resourcePackProvider .getClass ().getSimpleName ());
119+ }
120+
121+ var resourcePackManager = new PackRepository (StructurifyResourcePackProvider .getResourcePackProviders ().toArray (new RepositorySource [0 ]));
122+ var dataPacks = new WorldLoader .PackConfig (resourcePackManager , WorldDataConfiguration .DEFAULT , false , false );
123+ var serverConfig = new WorldLoader .InitConfig (dataPacks , Commands .CommandSelection .INTEGRATED , /*? if >= 1.21.11 {*/ PermissionSet .ALL_PERMISSIONS /*?} else {*/ /*2*/ /*?}*/ );
124+
125+ var saveLoader = Util .blockUntilDone (executor ->
126+ WorldLoader .load (serverConfig , loadContextSupplierContext -> {
127+ var registry = new MappedRegistry <>(Registries .LEVEL_STEM , Lifecycle .stable ()).freeze ();
128+
129+ //? if >=1.21.3 {
130+ var dimensionsConfig = loadContextSupplierContext
131+ .datapackWorldgen ()
132+ .lookupOrThrow (Registries .WORLD_PRESET )
133+ .getOrThrow (WorldPresets .FLAT )
134+ .value ()
135+ .createWorldDimensions ()
136+ .bake (registry );
137+ //?} else {
138+ /*var dimensionsConfig = loadContextSupplierContext
139+ .datapackWorldgen()
140+ .registryOrThrow(Registries.WORLD_PRESET)
141+ .getHolderOrThrow(WorldPresets.FLAT)
142+ .value()
143+ .createWorldDimensions()
144+ .bake(registry);
145+ */ //?}
146+
147+ return new WorldLoader .DataLoadOutput <>(null , dimensionsConfig .dimensionsRegistryAccess ());
148+ }, WorldStem ::new , Util .backgroundExecutor (), executor )
149+ ).get ();
150+
151+ if (saveLoader == null || saveLoader .registries () == null ) {
152+ Structurify .getLogger ().error ("SaveLoader or CombinedDynamicRegistries is null." );
153+ return ;
154+ }
155+
156+ setRegistryManager (saveLoader .registries ().compositeAccess ());
157+ Structurify .getLogger ().info ("Finished loading registry manager" );
158+ } catch (Exception exception ) {
159+ Structurify .getLogger ().error ("Failed to load registry manager." , exception );
160+ } finally {
161+ isLoading = false ;
162+ }
163+ }
164+
77165 public static void loadRegistryManager () {
78166 if (isLoading ) {
79167 return ;
@@ -118,7 +206,7 @@ public static void loadRegistryManager() {
118206 );
119207 //?} else {
120208 /*var baseRegistryAccess = RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY);
121- */ //?}
209+ */ //?}
122210 //? if >= 26.1 {
123211 var registryAccess = Util .blockUntilDone (executor ->
124212 RegistryDataLoader .load (
@@ -136,6 +224,17 @@ public static void loadRegistryManager() {
136224 );
137225 */ //?}
138226
227+ //? if <= 1.21.1 {
228+ /*bindRegistryTags(resourceManager, registryAccess, Registries.BIOME);
229+ bindRegistryTags(resourceManager, registryAccess, Registries.CONFIGURED_CARVER);
230+ bindRegistryTags(resourceManager, registryAccess, Registries.PROCESSOR_LIST);
231+ bindRegistryTags(resourceManager, registryAccess, Registries.TEMPLATE_POOL);
232+ bindRegistryTags(resourceManager, registryAccess, Registries.CONFIGURED_FEATURE);
233+ bindRegistryTags(resourceManager, registryAccess, Registries.PLACED_FEATURE);
234+ bindRegistryTags(resourceManager, registryAccess, Registries.STRUCTURE);
235+ bindRegistryTags(resourceManager, registryAccess, Registries.STRUCTURE_SET);
236+ */ //?}
237+
139238 setRegistryManager (registryAccess );
140239 }
141240
@@ -152,8 +251,31 @@ private static <T> RegistryDataLoader.RegistryData<T> getRegistryDataLoader(Reso
152251 return new RegistryDataLoader .RegistryData <>(key , codec , RegistryValidator .none ());
153252 //?} else if >= 1.21.1 {
154253 /*return new RegistryDataLoader.RegistryData<>(key, codec, false);
155- */ //?} else {
254+ */ //?} else {
156255 /*return new RegistryDataLoader.RegistryData<>(key, codec);
157- */ //?}
256+ */ //?}
257+ }
258+
259+ //? if <= 1.21.1 {
260+ /*private static <T> void bindRegistryTags(
261+ ResourceManager resourceManager,
262+ RegistryAccess registryAccess,
263+ ResourceKey<? extends Registry<T>> registryKey
264+ ) {
265+ Registry<T> registry = registryAccess.registryOrThrow(registryKey);
266+ String tagsDirectory =
267+ //? if >= 1.21 {
268+ Registries.tagsDirPath(registryKey)
269+ //?} else {
270+ /^"tags/" + registryKey.location().getPath()
271+ ^///?}
272+
273+ ;
274+ TagLoader<Holder<T>> loader = new TagLoader<>(id -> registry.getHolder(ResourceKey.create(registryKey, id)), tagsDirectory);
275+ Map<Identifier, Collection<Holder<T>>> loadedTags = loader.loadAndBuild(resourceManager);
276+ Map<TagKey<T>, List<Holder<T>>> tags = new HashMap<>();
277+ loadedTags.forEach((id, holders) -> tags.put(TagKey.create(registryKey, id), List.copyOf(holders)));
278+ registry.bindTags(tags);
158279 }
159- }
280+ */ //?}
281+ }
0 commit comments