ItemFactory: fix crash when checking if blockitem IDs are registered

This commit is contained in:
Dylan K. Taylor 2021-09-16 14:53:19 +01:00
parent 6cf181b579
commit 05e2bef5ce
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D

View File

@ -432,6 +432,10 @@ class ItemFactory{
$this->list[self::getListOffset($identifier->getId(), $identifier->getMeta())] = clone $item; $this->list[self::getListOffset($identifier->getId(), $identifier->getMeta())] = clone $item;
} }
private static function itemToBlockId(int $id) : int{
return $id < 0 ? 255 - $id : $id;
}
/** /**
* @deprecated This method should ONLY be used for deserializing data, e.g. from a config or database. For all other * @deprecated This method should ONLY be used for deserializing data, e.g. from a config or database. For all other
* purposes, use VanillaItems. * purposes, use VanillaItems.
@ -456,7 +460,7 @@ class ItemFactory{
} }
}elseif($id < 256){ //intentionally includes negatives, for extended block IDs }elseif($id < 256){ //intentionally includes negatives, for extended block IDs
//TODO: do not assume that item IDs and block IDs are the same or related //TODO: do not assume that item IDs and block IDs are the same or related
$item = new ItemBlock(new ItemIdentifier($id, $meta), BlockFactory::getInstance()->get($id < 0 ? 255 - $id : $id, $meta & 0xf)); $item = new ItemBlock(new ItemIdentifier($id, $meta), BlockFactory::getInstance()->get(self::itemToBlockId($id), $meta & 0xf));
} }
} }
@ -481,7 +485,7 @@ class ItemFactory{
*/ */
public function isRegistered(int $id, int $variant = 0) : bool{ public function isRegistered(int $id, int $variant = 0) : bool{
if($id < 256){ if($id < 256){
return BlockFactory::getInstance()->isRegistered($id); return BlockFactory::getInstance()->isRegistered(self::itemToBlockId($id));
} }
return isset($this->list[self::getListOffset($id, $variant)]); return isset($this->list[self::getListOffset($id, $variant)]);