mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-03 08:25:31 +00:00
Finish event system
This commit is contained in:
parent
7cfa96f925
commit
14ce12f08e
@ -1,6 +1,6 @@
|
||||
import com.dfsek.terra.getGitHash
|
||||
|
||||
val versionObj = Version("4", "1", "0", true)
|
||||
val versionObj = Version("4", "2", "0", true)
|
||||
|
||||
allprojects {
|
||||
version = versionObj
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.dfsek.terra.api.core;
|
||||
|
||||
import com.dfsek.terra.api.LoaderRegistrar;
|
||||
import com.dfsek.terra.api.core.event.EventManager;
|
||||
import com.dfsek.terra.api.platform.handle.ItemHandle;
|
||||
import com.dfsek.terra.api.platform.handle.WorldHandle;
|
||||
import com.dfsek.terra.api.platform.world.World;
|
||||
@ -50,4 +51,6 @@ public interface TerraPlugin extends LoaderRegistrar {
|
||||
}
|
||||
|
||||
DebugLogger getDebugLogger();
|
||||
|
||||
EventManager getEventManager();
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import com.dfsek.terra.api.util.ReflectionUtil;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@ -25,15 +26,21 @@ public class TerraEventManager implements EventManager {
|
||||
listeners.get(event.getClass()).forEach((eventListener, methods) -> methods.forEach(method -> {
|
||||
try {
|
||||
method.invoke(eventListener, event);
|
||||
} catch(InvocationTargetException e) {
|
||||
StringWriter writer = new StringWriter();
|
||||
e.getTargetException().printStackTrace(new PrintWriter(writer));
|
||||
main.getLogger().warning("Exception occurred during event handling:");
|
||||
main.getLogger().warning(writer.toString());
|
||||
main.getLogger().warning("Report this to the maintainers of " + eventListener.getClass().getCanonicalName());
|
||||
} catch(Exception e) {
|
||||
StringWriter writer = new StringWriter();
|
||||
e.printStackTrace(new PrintWriter(writer));
|
||||
main.getLogger().warning("Exception occurred during event handling:");
|
||||
main.getLogger().warning(writer.toString());
|
||||
main.getLogger().warning("Report this to the maintainers of " + eventListener.getClass().getCanonicalName());
|
||||
|
||||
}
|
||||
}));
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
@ -0,0 +1,16 @@
|
||||
package com.dfsek.terra.api.core.event.events.config;
|
||||
|
||||
import com.dfsek.terra.api.core.event.Event;
|
||||
import com.dfsek.terra.config.pack.ConfigPack;
|
||||
|
||||
public abstract class ConfigPackLoadEvent implements Event {
|
||||
private final ConfigPack pack;
|
||||
|
||||
public ConfigPackLoadEvent(ConfigPack pack) {
|
||||
this.pack = pack;
|
||||
}
|
||||
|
||||
public ConfigPack getPack() {
|
||||
return pack;
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package com.dfsek.terra.api.core.event.events.config;
|
||||
|
||||
import com.dfsek.terra.config.pack.ConfigPack;
|
||||
|
||||
/**
|
||||
* Called when a config pack has finished loading.
|
||||
*/
|
||||
public class ConfigPackPostLoadEvent extends ConfigPackLoadEvent {
|
||||
public ConfigPackPostLoadEvent(ConfigPack pack) {
|
||||
super(pack);
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package com.dfsek.terra.api.core.event.events.config;
|
||||
|
||||
import com.dfsek.terra.config.pack.ConfigPack;
|
||||
|
||||
/**
|
||||
* Called before a config pack's registries are filled. At this point, the pack manifest has been loaded, and all registries are empty.
|
||||
*/
|
||||
public class ConfigPackPreLoadEvent extends ConfigPackLoadEvent {
|
||||
public ConfigPackPreLoadEvent(ConfigPack pack) {
|
||||
super(pack);
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package com.dfsek.terra.api.core.event.events.world;
|
||||
|
||||
import com.dfsek.terra.api.core.event.Event;
|
||||
import com.dfsek.terra.world.TerraWorld;
|
||||
|
||||
/**
|
||||
* Called upon initialization of a TerraWorld.
|
||||
*/
|
||||
public class TerraWorldLoadEvent implements Event {
|
||||
private final TerraWorld world;
|
||||
|
||||
public TerraWorldLoadEvent(TerraWorld world) {
|
||||
this.world = world;
|
||||
}
|
||||
|
||||
public TerraWorld getWorld() {
|
||||
return world;
|
||||
}
|
||||
}
|
@ -8,6 +8,8 @@ import com.dfsek.tectonic.loading.ConfigLoader;
|
||||
import com.dfsek.tectonic.loading.TypeRegistry;
|
||||
import com.dfsek.terra.api.LoaderRegistrar;
|
||||
import com.dfsek.terra.api.core.TerraPlugin;
|
||||
import com.dfsek.terra.api.core.event.events.config.ConfigPackPostLoadEvent;
|
||||
import com.dfsek.terra.api.core.event.events.config.ConfigPackPreLoadEvent;
|
||||
import com.dfsek.terra.api.structures.loot.LootTable;
|
||||
import com.dfsek.terra.api.structures.script.StructureScript;
|
||||
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
|
||||
@ -195,6 +197,7 @@ public class ConfigPack implements LoaderRegistrar {
|
||||
}
|
||||
|
||||
private void load(long start, TerraPlugin main) throws ConfigException {
|
||||
main.getEventManager().callEvent(new ConfigPackPreLoadEvent(this));
|
||||
main.packPreLoadCallback(this);
|
||||
for(Map.Entry<String, Double> var : template.getVariables().entrySet()) {
|
||||
varScope.create(var.getKey(), var.getValue());
|
||||
@ -228,6 +231,8 @@ public class ConfigPack implements LoaderRegistrar {
|
||||
.open("flora", ".yml").then(streams -> buildAll(new FloraFactory(), floraRegistry, abstractConfigLoader.load(streams, FloraTemplate::new), main)).close()
|
||||
.open("biomes", ".yml").then(streams -> buildAll(new BiomeFactory(this), biomeRegistry, abstractConfigLoader.load(streams, () -> new BiomeTemplate(this, main)), main)).close();
|
||||
main.packPostLoadCallback(this);
|
||||
|
||||
main.getEventManager().callEvent(new ConfigPackPostLoadEvent(this));
|
||||
LangUtil.log("config-pack.loaded", Level.INFO, template.getID(), String.valueOf((System.nanoTime() - start) / 1000000D), template.getAuthor(), template.getVersion());
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.dfsek.terra.world;
|
||||
|
||||
import com.dfsek.terra.api.core.TerraPlugin;
|
||||
import com.dfsek.terra.api.core.event.events.world.TerraWorldLoadEvent;
|
||||
import com.dfsek.terra.api.math.vector.Location;
|
||||
import com.dfsek.terra.api.math.vector.Vector3;
|
||||
import com.dfsek.terra.api.platform.block.BlockData;
|
||||
@ -30,6 +31,7 @@ public class TerraWorld {
|
||||
this.provider = config.getBiomeProviderBuilder().build(w.getSeed());
|
||||
this.world = w;
|
||||
air = main.getWorldHandle().createBlockData("minecraft:air");
|
||||
main.getEventManager().callEvent(new TerraWorldLoadEvent(this));
|
||||
safe = true;
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,7 @@ import com.dfsek.tectonic.exception.ConfigException;
|
||||
import com.dfsek.tectonic.loading.ConfigLoader;
|
||||
import com.dfsek.tectonic.loading.TypeRegistry;
|
||||
import com.dfsek.terra.api.core.TerraPlugin;
|
||||
import com.dfsek.terra.api.core.event.EventManager;
|
||||
import com.dfsek.terra.api.math.ProbabilityCollection;
|
||||
import com.dfsek.terra.api.platform.handle.ItemHandle;
|
||||
import com.dfsek.terra.api.platform.handle.WorldHandle;
|
||||
@ -126,6 +127,11 @@ public class DistributionTest {
|
||||
return new DebugLogger(Logger.getLogger("Terra"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventManager getEventManager() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(TypeRegistry registry) {
|
||||
|
||||
|
@ -4,8 +4,8 @@ import com.dfsek.tectonic.loading.TypeRegistry;
|
||||
import com.dfsek.terra.api.core.TerraPlugin;
|
||||
import com.dfsek.terra.api.core.event.Event;
|
||||
import com.dfsek.terra.api.core.event.EventListener;
|
||||
import com.dfsek.terra.api.core.event.EventManager;
|
||||
import com.dfsek.terra.api.core.event.TerraEventManager;
|
||||
import com.dfsek.terra.api.core.event.annotations.Listener;
|
||||
import com.dfsek.terra.api.platform.handle.ItemHandle;
|
||||
import com.dfsek.terra.api.platform.handle.WorldHandle;
|
||||
import com.dfsek.terra.api.platform.world.World;
|
||||
@ -22,6 +22,7 @@ import java.util.logging.Logger;
|
||||
public class EventTest {
|
||||
public TerraPlugin main = new TerraPlugin() {
|
||||
private final Logger logger = Logger.getLogger("Terra");
|
||||
private final EventManager eventManager = new TerraEventManager(this);
|
||||
|
||||
@Override
|
||||
public WorldHandle getWorldHandle() {
|
||||
@ -97,11 +98,16 @@ public class EventTest {
|
||||
public void register(TypeRegistry registry) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventManager getEventManager() {
|
||||
return eventManager;
|
||||
}
|
||||
};
|
||||
|
||||
@Test
|
||||
public void eventTest() {
|
||||
TerraEventManager eventManager = new TerraEventManager(main);
|
||||
EventManager eventManager = main.getEventManager();
|
||||
eventManager.registerListener(new TestListener());
|
||||
eventManager.registerListener(new TestListener2());
|
||||
|
||||
@ -110,26 +116,23 @@ public class EventTest {
|
||||
|
||||
eventManager.registerListener(new TestListenerException());
|
||||
|
||||
TestEvent event2 = new TestEvent(4);
|
||||
TestEvent event2 = new TestEvent(5);
|
||||
eventManager.callEvent(event2);
|
||||
}
|
||||
|
||||
static class TestListener implements EventListener {
|
||||
@Listener
|
||||
public void doThing(TestEvent event) {
|
||||
System.out.println("Event value: " + event.value);
|
||||
}
|
||||
}
|
||||
|
||||
static class TestListener2 implements EventListener {
|
||||
@Listener
|
||||
public void doThing(TestEvent event) {
|
||||
System.out.println("Event value 2: " + event.value);
|
||||
}
|
||||
}
|
||||
|
||||
static class TestListenerException implements EventListener {
|
||||
@Listener
|
||||
public void doThing(TestEvent event) {
|
||||
throw new RuntimeException("bazinga: " + event.value);
|
||||
}
|
||||
|
@ -2,6 +2,8 @@ package com.dfsek.terra.bukkit;
|
||||
|
||||
import com.dfsek.tectonic.loading.TypeRegistry;
|
||||
import com.dfsek.terra.api.core.TerraPlugin;
|
||||
import com.dfsek.terra.api.core.event.EventManager;
|
||||
import com.dfsek.terra.api.core.event.TerraEventManager;
|
||||
import com.dfsek.terra.api.platform.block.BlockData;
|
||||
import com.dfsek.terra.api.platform.block.MaterialData;
|
||||
import com.dfsek.terra.api.platform.handle.ItemHandle;
|
||||
@ -56,6 +58,8 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin {
|
||||
private final GenericLoaders genericLoaders = new GenericLoaders(this);
|
||||
private DebugLogger debugLogger;
|
||||
|
||||
private final EventManager eventManager = new TerraEventManager(this);
|
||||
|
||||
public static final Version BUKKIT_VERSION;
|
||||
|
||||
static {
|
||||
@ -111,6 +115,11 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin {
|
||||
return debugLogger;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventManager getEventManager() {
|
||||
return eventManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
BukkitChunkGeneratorWrapper.saveAll();
|
||||
|
@ -2,6 +2,8 @@ package com.dfsek.terra.fabric;
|
||||
|
||||
import com.dfsek.tectonic.loading.TypeRegistry;
|
||||
import com.dfsek.terra.api.core.TerraPlugin;
|
||||
import com.dfsek.terra.api.core.event.EventManager;
|
||||
import com.dfsek.terra.api.core.event.TerraEventManager;
|
||||
import com.dfsek.terra.api.platform.block.BlockData;
|
||||
import com.dfsek.terra.api.platform.block.MaterialData;
|
||||
import com.dfsek.terra.api.platform.handle.ItemHandle;
|
||||
@ -68,6 +70,8 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
||||
private final Map<Long, TerraWorld> worldMap = new HashMap<>();
|
||||
private static TerraFabricPlugin instance;
|
||||
|
||||
private final EventManager eventManager = new TerraEventManager(this);
|
||||
|
||||
public static TerraFabricPlugin getInstance() {
|
||||
return instance;
|
||||
}
|
||||
@ -285,4 +289,9 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventManager getEventManager() {
|
||||
return eventManager;
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,8 @@ package com.dfsek.terra;
|
||||
|
||||
import com.dfsek.tectonic.loading.TypeRegistry;
|
||||
import com.dfsek.terra.api.core.TerraPlugin;
|
||||
import com.dfsek.terra.api.core.event.EventManager;
|
||||
import com.dfsek.terra.api.core.event.TerraEventManager;
|
||||
import com.dfsek.terra.api.platform.block.BlockData;
|
||||
import com.dfsek.terra.api.platform.block.MaterialData;
|
||||
import com.dfsek.terra.api.platform.handle.ItemHandle;
|
||||
@ -26,6 +28,7 @@ public class StandalonePlugin implements TerraPlugin {
|
||||
private final ConfigRegistry registry = new ConfigRegistry();
|
||||
private final PluginConfig config = new PluginConfig();
|
||||
private final RawWorldHandle worldHandle = new RawWorldHandle();
|
||||
private final EventManager eventManager = new TerraEventManager(this);
|
||||
|
||||
@Override
|
||||
public WorldHandle getWorldHandle() {
|
||||
@ -115,4 +118,9 @@ public class StandalonePlugin implements TerraPlugin {
|
||||
registry.loadAll(this);
|
||||
config.load(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventManager getEventManager() {
|
||||
return eventManager;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user