parse TerraScripts in parallel

This commit is contained in:
dfsek
2021-12-22 13:34:08 -07:00
parent a461a57f0d
commit 086d944f10
@@ -44,24 +44,27 @@ public class TerraScriptAddon implements AddonInitializer {
.then(event -> { .then(event -> {
CheckedRegistry<Structure> structureRegistry = event.getPack().getOrCreateRegistry(Structure.class); CheckedRegistry<Structure> structureRegistry = event.getPack().getOrCreateRegistry(Structure.class);
CheckedRegistry<LootTable> lootRegistry = event.getPack().getOrCreateRegistry(LootTable.class); CheckedRegistry<LootTable> lootRegistry = event.getPack().getOrCreateRegistry(LootTable.class);
event.getPack().getLoader().open("", ".tesf").thenEntries(entries -> { event.getPack().getLoader().open("", ".tesf").thenEntries(
for(Map.Entry<String, InputStream> entry : entries) { entries ->
entries.stream()
.parallel()
.map(entry -> {
try { try {
String id = StringUtil.fileName(entry.getKey()); String id = StringUtil.fileName(entry.getKey());
StructureScript structureScript = new StructureScript(entry.getValue(), return new StructureScript(entry.getValue(),
id, id,
platform, platform,
structureRegistry, structureRegistry,
lootRegistry, lootRegistry,
event event.getPack().getOrCreateRegistry(FunctionBuilder.class));
.getPack()
.getOrCreateRegistry(FunctionBuilder.class));
structureRegistry.register(structureScript.getID(), structureScript);
} catch(ParseException e) { } catch(ParseException e) {
throw new LoadException("Failed to load script \"" + entry.getKey() + "\"", e); throw new LoadException("Failed to load script \"" + entry.getKey() + "\"", e);
} }
} })
}).close(); .toList()
.forEach(structureScript -> structureRegistry.register(structureScript.getID(),
structureScript)))
.close();
}) })
.priority(2) .priority(2)
.failThrough(); .failThrough();