Implemented event handler inheritance, allow registering handlers for any valid event (#1792)

* Event handlers always handle subclass events. public static $handlerList no longer required.
* Removed $handlerList declarations
* HandlerList cleanup: Removed HandlerList->handlers and related bake methods
* Removed obsolete Event->getHandlers()
* EventPriority: Added fromString()
* PluginManager: throw exceptions on registering handlers with invalid priorities

This allows specifying a handler of `EntityDamageEvent` which will handle any instanceof it (as per current behaviour), AND also now allows specifying a handler specifically for `EntityDamageByEntityEvent`, which only handles `EntityDamageEvent`.

This was not previously possible due to limitations in the way handlers were registered.

Abstract events may not be handled unless they declare the `@allowHandle` PhpDoc tag.
This commit is contained in:
SOFe
2018-03-21 01:05:09 +08:00
committed by Dylan K. Taylor
parent 1648fff916
commit 49fbbea7bf
106 changed files with 204 additions and 363 deletions

View File

@ -31,8 +31,6 @@ use pocketmine\level\Level;
* Called when a Chunk is loaded
*/
class ChunkLoadEvent extends ChunkEvent{
public static $handlerList = null;
/** @var bool */
private $newChunk;

View File

@ -27,5 +27,5 @@ namespace pocketmine\event\level;
* Called when a Chunk is populated (after receiving it on the main thread)
*/
class ChunkPopulateEvent extends ChunkEvent{
public static $handlerList = null;
}

View File

@ -29,5 +29,5 @@ use pocketmine\event\Cancellable;
* Called when a Chunk is unloaded
*/
class ChunkUnloadEvent extends ChunkEvent implements Cancellable{
public static $handlerList = null;
}

View File

@ -27,5 +27,5 @@ namespace pocketmine\event\level;
* Called when a Level is initializing
*/
class LevelInitEvent extends LevelEvent{
public static $handlerList = null;
}

View File

@ -27,5 +27,5 @@ namespace pocketmine\event\level;
* Called when a Level is loaded
*/
class LevelLoadEvent extends LevelEvent{
public static $handlerList = null;
}

View File

@ -27,5 +27,5 @@ namespace pocketmine\event\level;
* Called when a Level is saved
*/
class LevelSaveEvent extends LevelEvent{
public static $handlerList = null;
}

View File

@ -29,5 +29,5 @@ use pocketmine\event\Cancellable;
* Called when a Level is unloaded
*/
class LevelUnloadEvent extends LevelEvent implements Cancellable{
public static $handlerList = null;
}

View File

@ -31,8 +31,6 @@ use pocketmine\level\Position;
* The previous spawn is included
*/
class SpawnChangeEvent extends LevelEvent{
public static $handlerList = null;
/** @var Position */
private $previousSpawn;