functional events in TerraScriptAddon

This commit is contained in:
dfsek
2021-07-21 20:20:32 -07:00
parent d8a5951f6e
commit 1d6d63b399
@@ -1,6 +1,5 @@
package com.dfsek.terra.addons.terrascript; package com.dfsek.terra.addons.terrascript;
import com.dfsek.tectonic.exception.ConfigException;
import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException; import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException;
import com.dfsek.terra.addons.terrascript.script.StructureScript; import com.dfsek.terra.addons.terrascript.script.StructureScript;
@@ -9,11 +8,9 @@ import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.addon.annotations.Addon; import com.dfsek.terra.api.addon.annotations.Addon;
import com.dfsek.terra.api.addon.annotations.Author; import com.dfsek.terra.api.addon.annotations.Author;
import com.dfsek.terra.api.addon.annotations.Version; import com.dfsek.terra.api.addon.annotations.Version;
import com.dfsek.terra.api.event.EventListener;
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.injection.annotations.Inject; import com.dfsek.terra.api.injection.annotations.Inject;
import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.registry.exception.DuplicateEntryException;
import com.dfsek.terra.api.structure.LootTable; import com.dfsek.terra.api.structure.LootTable;
import com.dfsek.terra.api.structure.Structure; import com.dfsek.terra.api.structure.Structure;
@@ -23,31 +20,27 @@ import java.util.Map;
@Addon("structure-terrascript-loader") @Addon("structure-terrascript-loader")
@Author("Terra") @Author("Terra")
@Version("1.0.0") @Version("1.0.0")
public class TerraScriptAddon extends TerraAddon implements EventListener { public class TerraScriptAddon extends TerraAddon {
@Inject @Inject
private TerraPlugin main; private TerraPlugin main;
@Override @Override
public void initialize() { public void initialize() {
main.getEventManager().registerListener(this, this); main.getEventManager()
} .register(ConfigPackPreLoadEvent.class)
.then(event -> {
public void onPackLoad(ConfigPackPreLoadEvent event) throws ConfigException { 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(entries -> { for(Map.Entry<String, InputStream> entry : entries) {
for(Map.Entry<String, InputStream> entry : entries) { try {
try { StructureScript structureScript = new StructureScript(entry.getValue(), main, structureRegistry, lootRegistry, event.getPack().getRegistryFactory().create());
StructureScript structureScript = new StructureScript(entry.getValue(), main, structureRegistry, lootRegistry, event.getPack().getRegistryFactory().create()); structureRegistry.register(structureScript.getId(), structureScript);
try { } catch(ParseException e) {
structureRegistry.register(structureScript.getId(), structureScript); throw new LoadException("Failed to load script: ", e);
} catch(DuplicateEntryException e) { }
throw new LoadException("Duplicate structure: ", e); }
} }).close();
} catch(ParseException e) { });
throw new LoadException("Failed to load script: ", e);
}
}
}).close();
} }
} }