Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/ListenExample/plugin.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: ListenExample
main: FlowyExamples\ListenExample\Main
version: 0.1.0
api: [3.12.0]
api: [4.0.0]
author: WhiteGrouse

virions:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

class Main extends PluginBase
{
function onEnable()
protected function onEnable(): void
{
Flowy::bootstrap();
$stream = start($this);
Expand Down
49 changes: 13 additions & 36 deletions flowy/src/flowy/EventHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,10 @@
namespace flowy;

use pocketmine\event\Event;
use pocketmine\event\HandlerList;
use pocketmine\event\Listener;
use pocketmine\plugin\EventExecutor;
use pocketmine\plugin\MethodEventExecutor;
use pocketmine\event\HandlerListManager;
use pocketmine\plugin\Plugin;
use pocketmine\plugin\PluginException;
use pocketmine\plugin\RegisteredListener;
use pocketmine\Server;
use pocketmine\event\RegisteredListener;
use pocketmine\timings\TimingsHandler;
use pocketmine\utils\Utils;

Expand All @@ -21,50 +17,31 @@ private function __construct()

public static function register(
string $event,
Listener $listener,
\Closure $handler,
int $priority,
EventExecutor $executor,
Plugin $plugin,
bool $ignoreCancelled = false
bool $handleCancelled = false
): RegisteredListener {

if (!is_subclass_of($event, Event::class)) {
throw new PluginException("{$event} is not an Event");
if(!is_subclass_of($event, Event::class)){
throw new PluginException($event . " is not an Event");
}

$server = Server::getInstance();
$handlerName = Utils::getNiceClosureName($handler);

$tags = Utils::parseDocComment((string)(new \ReflectionClass($event))->getDocComment());
if (isset($tags["deprecated"]) and $server->getProperty("settings.deprecated-verbose", true)) {
$server->getLogger()->warning($server->getLanguage()->translateString("pocketmine.plugin.deprecatedEvent", [
$plugin->getName(),
$event,
get_class($listener) . "->" . ($executor instanceof MethodEventExecutor ? $executor->getMethod() : "<unknown>")
]));
if(!$plugin->isEnabled()){
throw new PluginException("Plugin attempted to register event handler " . $handlerName . "() to event " . $event . " while not enabled");
}

if (!$plugin->isEnabled()) {
throw new PluginException("Plugin attempted to register {$event} while not enabled");
}
$timings = new TimingsHandler("Plugin: " . $plugin->getDescription()->getFullName() . " Event: " . $handlerName . "(" . (new \ReflectionClass($event))->getShortName() . ")");

$timings = new TimingsHandler("Plugin: " . $plugin->getDescription()->getFullName() . " Event: " . get_class($listener) . "::" . ($executor instanceof MethodEventExecutor ? $executor->getMethod() : "???") . "(" . (new \ReflectionClass($event))->getShortName() . ")");
$registeredListener = new RegisteredListener($listener, $executor, $priority, $plugin, $ignoreCancelled,
$timings);
self::getEventListeners($event)->register($registeredListener);
$registeredListener = new RegisteredListener($handler, $priority, $plugin, $handleCancelled, $timings);
HandlerListManager::global()->getListFor($event)->register($registeredListener);
return $registeredListener;
}

private static function getEventListeners(string $event): HandlerList
{
$list = HandlerList::getHandlerListFor($event);
if ($list === null) {
throw new PluginException("Abstract events not declaring @allowHandle cannot be handled (tried to register listener for {$event})");
}
return $list;
}

public static function unregister(string $event, RegisteredListener $listener): void
{
self::getEventListeners($event)->unregister($listener);
HandlerListManager::global()->getListFor($event)->unregister($listener);
}
}
14 changes: 4 additions & 10 deletions flowy/src/flowy/EventListener.php
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
<?php
namespace flowy;

use pocketmine\event\Event;
use pocketmine\event\EventPriority;
use pocketmine\event\Listener;
use pocketmine\plugin\MethodEventExecutor;
use pocketmine\plugin\Plugin;
use pocketmine\plugin\RegisteredListener;
use pocketmine\event\RegisteredListener;

class EventListener implements Listener
{
Expand All @@ -31,11 +29,6 @@ public function setHandler(EventHandler $handler): void
$this->handler = $handler;
}

public function onEvent(Event $event): void
{
$this->handler->handle($event);
}

public function listen(string $event): void
{
if (isset($this->registeredListeners[$event])) {
Expand All @@ -44,9 +37,10 @@ public function listen(string $event): void

$this->registeredListeners[$event] = EventHelper::register(
$event,
$this,
function($event) {
$this->handler->handle($event);
},
EventPriority::NORMAL,
new MethodEventExecutor("onEvent"),
$this->plugin
);
}
Expand Down
2 changes: 1 addition & 1 deletion flowy/virion.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ name: Flowy
author: WhiteGrouse
antigen: flowy
version: 0.1.0
api: [3.12.0]
api: [4.0.0]
2 changes: 1 addition & 1 deletion standard/src/flowy/standard/Delay.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ function delay(TaskScheduler $scheduler, int $tick)
{
$handler = $scheduler->scheduleDelayedTask(new DelayTask(), $tick);
yield listen(DelayCallbackEvent::class)->filter(function($ev) use ($handler) {
return $ev->getTaskId() === $handler->getTaskId();
return $ev->getTask() === $handler->getTask();
});
}
11 changes: 6 additions & 5 deletions standard/src/flowy/standard/delay/DelayCallbackEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@
namespace flowy\standard\delay;

use pocketmine\event\Event;
use pocketmine\scheduler\Task;

class DelayCallbackEvent extends Event {
protected $taskId;
protected $task;

public function __construct(int $taskId) {
$this->taskId = $taskId;
public function __construct(Task $task) {
$this->task = $task;
}

public function getTaskId(): int {
return $this->taskId;
public function getTask(): Task {
return $this->task;
}
}
4 changes: 2 additions & 2 deletions standard/src/flowy/standard/delay/DelayTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
use pocketmine\scheduler\Task;

class DelayTask extends Task {
public function onRun($currentTick) {
(new DelayCallbackEvent($this->getTaskId()))->call();
public function onRun(): void {
(new DelayCallbackEvent($this))->call();
}
}
2 changes: 1 addition & 1 deletion standard/virion.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ name: Standard
author: WhiteGrouse
antigen: flowy\standard
version: 0.1.0
api: [3.12.0]
api: [4.0.0]