mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-15 18:29:46 +00:00
Fixed invalid metadata and updated weak references on PluginManager
This commit is contained in:
parent
53749483c3
commit
683ab8d2cd
@ -33,8 +33,10 @@ class BlockMetadataStore extends MetadataStore{
|
|||||||
$this->owningLevel = $owningLevel;
|
$this->owningLevel = $owningLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @noinspection PhpHierarchyChecksInspection */
|
public function disambiguate(Metadatable $block, $metadataKey){
|
||||||
public function disambiguate(Block $block, $metadataKey){
|
if(!($block instanceof Block)){
|
||||||
|
throw new \InvalidArgumentException("Argument must be a Block instance");
|
||||||
|
}
|
||||||
return $block->x . ":" . $block->y . ":" . $block->z . ":" . $metadataKey;
|
return $block->x . ":" . $block->y . ":" . $block->z . ":" . $metadataKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,8 +25,10 @@ use pocketmine\entity\Entity;
|
|||||||
|
|
||||||
class EntityMetadataStore extends MetadataStore{
|
class EntityMetadataStore extends MetadataStore{
|
||||||
|
|
||||||
/** @noinspection PhpHierarchyChecksInspection */
|
public function disambiguate(Metadatable $entity, $metadataKey){
|
||||||
public function disambiguate(Entity $entity, $metadataKey){
|
if(!($entity instanceof Entity)){
|
||||||
|
throw new \InvalidArgumentException("Argument must be an Entity instance");
|
||||||
|
}
|
||||||
return $entity->getID() . ":" . $metadataKey;
|
return $entity->getID() . ":" . $metadataKey;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -25,8 +25,10 @@ use pocketmine\level\Level;
|
|||||||
|
|
||||||
class LevelMetadataStore extends MetadataStore{
|
class LevelMetadataStore extends MetadataStore{
|
||||||
|
|
||||||
/** @noinspection PhpHierarchyChecksInspection */
|
public function disambiguate(Metadatable $level, $metadataKey){
|
||||||
public function disambiguate(Level $level, $metadataKey){
|
if(!($level instanceof Level)){
|
||||||
|
throw new \InvalidArgumentException("Argument must be a Level instance");
|
||||||
|
}
|
||||||
return strtolower($level->getName()) . ":" . $metadataKey;
|
return strtolower($level->getName()) . ":" . $metadataKey;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -45,7 +45,7 @@ abstract class MetadataStore{
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$key = $this->disambiguate($subject, $newMetadataValue);
|
$key = $this->disambiguate($subject, $metadataKey);
|
||||||
if(!isset($this->metadataMap[$key])){
|
if(!isset($this->metadataMap[$key])){
|
||||||
$entry = new \WeakMap();
|
$entry = new \WeakMap();
|
||||||
$this->metadataMap[$key] = $entry;
|
$this->metadataMap[$key] = $entry;
|
||||||
@ -122,10 +122,12 @@ abstract class MetadataStore{
|
|||||||
* Creates a unique name for the object receiving metadata by combining
|
* Creates a unique name for the object receiving metadata by combining
|
||||||
* unique data from the subject with a metadataKey.
|
* unique data from the subject with a metadataKey.
|
||||||
*
|
*
|
||||||
* @param mixed $subject
|
* @param Metadatable $subject
|
||||||
* @param string $metadataKey
|
* @param string $metadataKey
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
*/
|
*/
|
||||||
public abstract function disambiguate($subject, $metadataKey);
|
public abstract function disambiguate(Metadatable $subject, $metadataKey);
|
||||||
}
|
}
|
@ -25,8 +25,10 @@ use pocketmine\OfflinePlayer;
|
|||||||
|
|
||||||
class PlayerMetadataStore extends MetadataStore{
|
class PlayerMetadataStore extends MetadataStore{
|
||||||
|
|
||||||
/** @noinspection PhpHierarchyChecksInspection */
|
public function disambiguate(Metadatable $player, $metadataKey){
|
||||||
public function disambiguate(OfflinePlayer $player, $metadataKey){
|
if(!($player instanceof OfflinePlayer)){
|
||||||
|
throw new \InvalidArgumentException("Argument must be an OfflinePlayer instance");
|
||||||
|
}
|
||||||
return strtolower($player->getName()) . ":" . $metadataKey;
|
return strtolower($player->getName()) . ":" . $metadataKey;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -70,12 +70,12 @@ class PluginManager{
|
|||||||
/**
|
/**
|
||||||
* @var Permissible[]
|
* @var Permissible[]
|
||||||
*/
|
*/
|
||||||
protected $defSubs;
|
protected $defSubs = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Permissible[]
|
* @var Permissible[]
|
||||||
*/
|
*/
|
||||||
protected $defSubsOp;
|
protected $defSubsOp = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var PluginLoader[]
|
* @var PluginLoader[]
|
||||||
@ -89,8 +89,6 @@ class PluginManager{
|
|||||||
public function __construct(Server $server, SimpleCommandMap $commandMap){
|
public function __construct(Server $server, SimpleCommandMap $commandMap){
|
||||||
$this->server = $server;
|
$this->server = $server;
|
||||||
$this->commandMap = $commandMap;
|
$this->commandMap = $commandMap;
|
||||||
$this->defSubs = new \WeakMap();
|
|
||||||
$this->defSubsOp = new \WeakMap();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -408,9 +406,9 @@ class PluginManager{
|
|||||||
*/
|
*/
|
||||||
public function subscribeToPermission($permission, Permissible $permissible){
|
public function subscribeToPermission($permission, Permissible $permissible){
|
||||||
if(!isset($this->permSubs[$permission])){
|
if(!isset($this->permSubs[$permission])){
|
||||||
$this->permSubs[$permission] = new \WeakRef();
|
$this->permSubs[$permission] = [];
|
||||||
}
|
}
|
||||||
$this->permSubs[$permission][$permissible] = true;
|
$this->permSubs[$permission][spl_object_hash($permissible)] = new \WeakRef($permissible);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -419,7 +417,7 @@ class PluginManager{
|
|||||||
*/
|
*/
|
||||||
public function unsubscribeFromPermission($permission, Permissible $permissible){
|
public function unsubscribeFromPermission($permission, Permissible $permissible){
|
||||||
if(isset($this->permSubs[$permission])){
|
if(isset($this->permSubs[$permission])){
|
||||||
unset($this->permSubs[$permission][$permissible]);
|
unset($this->permSubs[$permission][spl_object_hash($permissible)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -430,7 +428,16 @@ class PluginManager{
|
|||||||
*/
|
*/
|
||||||
public function getPermissionSubscriptions($permission){
|
public function getPermissionSubscriptions($permission){
|
||||||
if(isset($this->permSubs[$permission])){
|
if(isset($this->permSubs[$permission])){
|
||||||
return $this->permSubs[$permission];
|
$subs = [];
|
||||||
|
foreach($this->permSubs[$permission] as $k => $perm){
|
||||||
|
/** @var \WeakRef $perm */
|
||||||
|
if($perm->valid()){
|
||||||
|
$subs[] = $perm->get();
|
||||||
|
}else{
|
||||||
|
unset($this->permSubs[$permission][$k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $subs;
|
||||||
}
|
}
|
||||||
|
|
||||||
return [];
|
return [];
|
||||||
@ -442,9 +449,9 @@ class PluginManager{
|
|||||||
*/
|
*/
|
||||||
public function subscribeToDefaultPerms($op, Permissible $permissible){
|
public function subscribeToDefaultPerms($op, Permissible $permissible){
|
||||||
if($op === true){
|
if($op === true){
|
||||||
$this->defSubsOp[$permissible] = true;
|
$this->defSubsOp[spl_object_hash($permissible)] = new \WeakRef($permissible);
|
||||||
}else{
|
}else{
|
||||||
$this->defSubs[$permissible] = true;
|
$this->defSubs[spl_object_hash($permissible)] = new \WeakRef($permissible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -454,9 +461,9 @@ class PluginManager{
|
|||||||
*/
|
*/
|
||||||
public function unsubscribeFromDefaultPerms($op, Permissible $permissible){
|
public function unsubscribeFromDefaultPerms($op, Permissible $permissible){
|
||||||
if($op === true){
|
if($op === true){
|
||||||
unset($this->defSubsOp[$permissible]);
|
unset($this->defSubsOp[spl_object_hash($permissible)]);
|
||||||
}else{
|
}else{
|
||||||
unset($this->defSubs[$permissible]);
|
unset($this->defSubs[spl_object_hash($permissible)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -466,12 +473,30 @@ class PluginManager{
|
|||||||
* @return Permissible[]
|
* @return Permissible[]
|
||||||
*/
|
*/
|
||||||
public function getDefaultPermSubscriptions($op){
|
public function getDefaultPermSubscriptions($op){
|
||||||
|
$subs = [];
|
||||||
|
|
||||||
if($op === true){
|
if($op === true){
|
||||||
return $this->defSubsOp;
|
foreach($this->defSubsOp as $k => $perm){
|
||||||
|
/** @var \WeakRef $perm */
|
||||||
|
if($perm->valid()){
|
||||||
|
$subs[] = $perm->get();
|
||||||
}else{
|
}else{
|
||||||
return $this->defSubs;
|
unset($this->defSubsOp[$k]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
foreach($this->defSubs as $k => $perm){
|
||||||
|
/** @var \WeakRef $perm */
|
||||||
|
if($perm->valid()){
|
||||||
|
$subs[] = $perm->get();
|
||||||
|
}else{
|
||||||
|
unset($this->defSubs[$k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $subs;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Permission[]
|
* @return Permission[]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user