diff --git a/src/API/EntityAPI.php b/src/API/EntityAPI.php index a33afc23e..406e90303 100644 --- a/src/API/EntityAPI.php +++ b/src/API/EntityAPI.php @@ -94,10 +94,12 @@ class EntityAPI{ public function remove($eid){ if(isset($this->server->entities[$eid])){ $entity = $this->server->entities[$eid]; + $this->server->entities[$eid] = null; unset($this->server->entities[$eid]); $entity->closed = true; $this->server->query("DELETE FROM entities WHERE EID = ".$entity->eid.";"); $this->server->api->dhandle("entity.remove", $entity); + $entity = null; unset($entity); } } diff --git a/src/API/PlayerAPI.php b/src/API/PlayerAPI.php index 570891412..9e13d1afe 100644 --- a/src/API/PlayerAPI.php +++ b/src/API/PlayerAPI.php @@ -220,13 +220,15 @@ class PlayerAPI{ public function remove($CID){ if(isset($this->server->clients[$CID])){ $player = $this->server->clients[$CID]; + $this->server->clients[$CID] = null; unset($this->server->clients[$CID]); $player->close(); $this->saveOffline($player->username, $player->data); $this->server->query("DELETE FROM players WHERE name = '".$player->username."';"); - unset($player->entity->player); - unset($player->entity); + $player->entity->player = null; + $player->entity = null; $this->server->api->entity->remove($player->eid); + $player = null; unset($player); } } diff --git a/src/classes/Player.php b/src/classes/Player.php index 42ce223e1..e3c61e2f9 100644 --- a/src/classes/Player.php +++ b/src/classes/Player.php @@ -113,7 +113,10 @@ class Player{ "status" => 1, )); $this->dataPacket(MC_DISCONNECT); - + $this->buffer = null; + unset($this->buffer); + $this->queue = null; + unset($this->queue); $this->connected = false; if($msg === true){ $this->server->api->chat->broadcast($this->username." left the game"); @@ -287,6 +290,7 @@ class Player{ array_unshift($this->queue, array(0, $this->buffer[$data[2]][0], $this->buffer[$data[2]][1], $data[2])); } $this->counter[2] = $data[2]; + $this->buffer[$data[2]] = null; unset($this->buffer[$data[2]]); if(isset($data[3])){ @@ -295,6 +299,7 @@ class Player{ array_unshift($this->queue, array(0, $this->buffer[$data[3]][0], $this->buffer[$data[3]][1], $data[3])); } $this->counter[2] = $data[3]; + $this->buffer[$data[3]] = null; unset($this->buffer[$data[3]]); } break; diff --git a/src/classes/PocketMinecraftServer.php b/src/classes/PocketMinecraftServer.php index 97ebdfcb6..e2487ddf1 100644 --- a/src/classes/PocketMinecraftServer.php +++ b/src/classes/PocketMinecraftServer.php @@ -582,10 +582,10 @@ class PocketMinecraftServer{ $add = ""; $chcnt = $this->scheduleCnt++; if($repeat === false){ - $add = ' unset($this->schedule['.$chcnt.']);'; + $add = '$this->schedule['.$chcnt.']=null;unset($this->schedule['.$chcnt.']);'; } $this->schedule[$chcnt] = array($callback, $data, $eventName); - $this->action(50000 * $ticks, '$schedule = $this->schedule['.$chcnt.'];'.$add.'if(!is_callable($schedule[0])){unset($this->schedule['.$chcnt.']);return false;} return call_user_func($schedule[0], $schedule[1], $schedule[2]);', (bool) $repeat); + $this->action(50000 * $ticks, '$schedule=$this->schedule['.$chcnt.'];'.$add.'if(!is_callable($schedule[0])){$this->schedule['.$chcnt.']=null;unset($this->schedule['.$chcnt.']);return false;}return call_user_func($schedule[0],$schedule[1],$schedule[2]);', (bool) $repeat); return $chcnt; } @@ -636,6 +636,7 @@ class PocketMinecraftServer{ public function deleteEvent($id){ $id = (int) $id; + $this->events[$id] = null; unset($this->events[$id]); $this->query("DELETE FROM events WHERE ID = ".$id.";"); }