From c835c97abafdf846c2607c2e7693636843d41bcd Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Wed, 13 Jun 2018 12:07:27 +0100 Subject: [PATCH] Fixed phar plugins not reading resources correctly --- src/pocketmine/plugin/PharPluginLoader.php | 6 +++++- src/pocketmine/plugin/PluginLoader.php | 7 +++++++ src/pocketmine/plugin/PluginManager.php | 5 +++-- src/pocketmine/plugin/ScriptPluginLoader.php | 4 ++++ tests/plugins/PocketMine-DevTools | 2 +- 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/pocketmine/plugin/PharPluginLoader.php b/src/pocketmine/plugin/PharPluginLoader.php index a257f8b92..b08f41c0a 100644 --- a/src/pocketmine/plugin/PharPluginLoader.php +++ b/src/pocketmine/plugin/PharPluginLoader.php @@ -50,7 +50,7 @@ class PharPluginLoader implements PluginLoader{ * @param string $file */ public function loadPlugin(string $file) : void{ - $this->loader->addPath("phar://$file/src"); + $this->loader->addPath("$file/src"); } /** @@ -71,4 +71,8 @@ class PharPluginLoader implements PluginLoader{ return null; } + + public function getAccessProtocol() : string{ + return "phar://"; + } } diff --git a/src/pocketmine/plugin/PluginLoader.php b/src/pocketmine/plugin/PluginLoader.php index 51bcfae22..7e019c46c 100644 --- a/src/pocketmine/plugin/PluginLoader.php +++ b/src/pocketmine/plugin/PluginLoader.php @@ -52,4 +52,11 @@ interface PluginLoader{ * @return null|PluginDescription */ public function getPluginDescription(string $file) : ?PluginDescription; + + /** + * Returns the protocol prefix used to access files in this plugin, e.g. file://, phar:// + * + * @return string + */ + public function getAccessProtocol() : string; } diff --git a/src/pocketmine/plugin/PluginManager.php b/src/pocketmine/plugin/PluginManager.php index 3d92c1403..ab9ff2df8 100644 --- a/src/pocketmine/plugin/PluginManager.php +++ b/src/pocketmine/plugin/PluginManager.php @@ -158,7 +158,8 @@ class PluginManager{ return null; } - $loader->loadPlugin($path); + $prefixed = $loader->getAccessProtocol() . $path; + $loader->loadPlugin($prefixed); $mainClass = $description->getMain(); if(!class_exists($mainClass, true)){ @@ -175,7 +176,7 @@ class PluginManager{ * @var Plugin $plugin * @see Plugin::__construct() */ - $plugin = new $mainClass($loader, $this->server, $description, $dataFolder, $path); + $plugin = new $mainClass($loader, $this->server, $description, $dataFolder, $prefixed); $plugin->onLoad(); $this->plugins[$plugin->getDescription()->getName()] = $plugin; diff --git a/src/pocketmine/plugin/ScriptPluginLoader.php b/src/pocketmine/plugin/ScriptPluginLoader.php index 4934ac46c..d6323f7e3 100644 --- a/src/pocketmine/plugin/ScriptPluginLoader.php +++ b/src/pocketmine/plugin/ScriptPluginLoader.php @@ -86,4 +86,8 @@ class ScriptPluginLoader implements PluginLoader{ return null; } + + public function getAccessProtocol() : string{ + return "file://"; + } } diff --git a/tests/plugins/PocketMine-DevTools b/tests/plugins/PocketMine-DevTools index 19fcbf0f9..1fae225ac 160000 --- a/tests/plugins/PocketMine-DevTools +++ b/tests/plugins/PocketMine-DevTools @@ -1 +1 @@ -Subproject commit 19fcbf0f9751b4d9d27cdfb007e0fb2bbf3acd04 +Subproject commit 1fae225ac376c1a0f4dd57a181dbba591f62944a