diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index fd721f7c5..4c3dccb0d 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -1683,7 +1683,6 @@ class Server{ $this->getLogger()->debug("Stopping network interfaces"); foreach($this->network->getInterfaces() as $interface){ $this->getLogger()->debug("Stopping network interface " . get_class($interface)); - $interface->shutdown(); $this->network->unregisterInterface($interface); } } diff --git a/src/pocketmine/network/Network.php b/src/pocketmine/network/Network.php index 60d0961ba..ed6e484af 100644 --- a/src/pocketmine/network/Network.php +++ b/src/pocketmine/network/Network.php @@ -30,6 +30,7 @@ use pocketmine\event\server\NetworkInterfaceRegisterEvent; use pocketmine\event\server\NetworkInterfaceUnregisterEvent; use pocketmine\network\mcpe\NetworkSession; use pocketmine\network\mcpe\protocol\PacketPool; +use function get_class; use function spl_object_id; class Network{ @@ -116,10 +117,15 @@ class Network{ /** * @param NetworkInterface $interface + * @throws \InvalidArgumentException */ public function unregisterInterface(NetworkInterface $interface) : void{ + if(!isset($this->interfaces[$hash = spl_object_id($interface)])){ + throw new \InvalidArgumentException("Interface " . get_class($interface) . " is not registered on this network"); + } (new NetworkInterfaceUnregisterEvent($interface))->call(); - unset($this->interfaces[$hash = spl_object_id($interface)], $this->advancedInterfaces[$hash]); + unset($this->interfaces[$hash], $this->advancedInterfaces[$hash]); + $interface->shutdown(); } /**