mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-06 17:59:48 +00:00
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:
@ -33,6 +33,15 @@ namespace pocketmine\event;
|
||||
* MONITOR events should not change the event outcome or contents
|
||||
*/
|
||||
abstract class EventPriority{
|
||||
public const ALL = [
|
||||
self::LOWEST,
|
||||
self::LOW,
|
||||
self::NORMAL,
|
||||
self::HIGH,
|
||||
self::HIGHEST,
|
||||
self::MONITOR
|
||||
];
|
||||
|
||||
/**
|
||||
* Event call is of very low importance and should be ran first, to allow
|
||||
* other plugins to further customise the outcome
|
||||
@ -43,7 +52,8 @@ abstract class EventPriority{
|
||||
*/
|
||||
public const LOW = 4;
|
||||
/**
|
||||
* Event call is neither important or unimportant, and may be ran normally
|
||||
* Event call is neither important or unimportant, and may be ran normally.
|
||||
* This is the default priority.
|
||||
*/
|
||||
public const NORMAL = 3;
|
||||
/**
|
||||
@ -62,4 +72,20 @@ abstract class EventPriority{
|
||||
*/
|
||||
public const MONITOR = 0;
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*
|
||||
* @return int
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public static function fromString(string $name) : int{
|
||||
$name = strtoupper($name);
|
||||
$const = self::class . "::" . $name;
|
||||
if($name !== "ALL" and \defined($const)){
|
||||
return \constant($const);
|
||||
}
|
||||
|
||||
throw new \InvalidArgumentException("Unable to resolve priority \"$name\"");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user