1.0
Amazingly, TinyEvents had never been released. Now it has.
- RunnableEvent just fires callbacks, like a delegate method with an empty signature
- ConsumerEvent gives event listeners one piece of data
- BiConsumerEvent gives event listeners two pieces of data, although it's usually better to use a record type with Consumers
Thread safety is still in progress; events can be fired and registered only on the thread that created them, but listeners can specify executors for their own execution.