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\item\Item;
use pocketmine\Player;
class CraftItemEvent extends Event implements Cancellable{
public static $handlerList = null;
/** @var CraftingTransaction */
private $transaction;

View File

@ -29,8 +29,6 @@ use pocketmine\item\Item;
use pocketmine\tile\Furnace;
class FurnaceBurnEvent extends BlockEvent implements Cancellable{
public static $handlerList = null;
/** @var Furnace */
private $furnace;
/** @var Item */

View File

@ -29,8 +29,6 @@ use pocketmine\item\Item;
use pocketmine\tile\Furnace;
class FurnaceSmeltEvent extends BlockEvent implements Cancellable{
public static $handlerList = null;
/** @var Furnace */
private $furnace;
/** @var Item */

View File

@ -27,8 +27,6 @@ use pocketmine\inventory\Inventory;
use pocketmine\Player;
class InventoryCloseEvent extends InventoryEvent{
public static $handlerList = null;
/** @var Player */
private $who;

View File

@ -31,7 +31,6 @@ use pocketmine\event\Event;
use pocketmine\inventory\Inventory;
abstract class InventoryEvent extends Event{
/** @var Inventory */
protected $inventory;

View File

@ -28,8 +28,6 @@ use pocketmine\inventory\Inventory;
use pocketmine\Player;
class InventoryOpenEvent extends InventoryEvent implements Cancellable{
public static $handlerList = null;
/** @var Player */
private $who;

View File

@ -28,8 +28,6 @@ use pocketmine\event\Cancellable;
use pocketmine\inventory\Inventory;
class InventoryPickupArrowEvent extends InventoryEvent implements Cancellable{
public static $handlerList = null;
/** @var Arrow */
private $arrow;

View File

@ -28,8 +28,6 @@ use pocketmine\event\Cancellable;
use pocketmine\inventory\Inventory;
class InventoryPickupItemEvent extends InventoryEvent implements Cancellable{
public static $handlerList = null;
/** @var ItemEntity */
private $item;

View File

@ -32,8 +32,6 @@ use pocketmine\inventory\transaction\InventoryTransaction;
* The source of this can be a Player, entities, mobs, or even hoppers in the future!
*/
class InventoryTransactionEvent extends Event implements Cancellable{
public static $handlerList = null;
/** @var InventoryTransaction */
private $transaction;