mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-17 11:18:52 +00:00
Added array things to NBT
This commit is contained in:
parent
4ffdb029f0
commit
398fbbfb31
@ -19,7 +19,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class NBT{
|
class NBT implements ArrayAccess{
|
||||||
const LITTLE_ENDIAN = 0;
|
const LITTLE_ENDIAN = 0;
|
||||||
const BIG_ENDIAN = 1;
|
const BIG_ENDIAN = 1;
|
||||||
|
|
||||||
@ -194,26 +194,43 @@ class NBT{
|
|||||||
$this->buffer .= $v;
|
$this->buffer .= $v;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __get($name){
|
public function &__get($name){
|
||||||
return $this->data instanceof NBTTag_Compound ? $this->data->{$name} : false;
|
$ret = $this->data instanceof NBTTag_Compound ? $this->data[$name] : false;
|
||||||
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __set($name, $value){
|
public function __set($name, $value){
|
||||||
if($this->data instanceof NBTTag_Compound){
|
if($this->data instanceof NBTTag_Compound){
|
||||||
$this->data->{$name} = $value;
|
$this->data[$name] = $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __isset($name){
|
public function __isset($name){
|
||||||
return $this->data instanceof NBTTag_Compound ? isset($this->data->{$name}) : false;
|
return $this->data instanceof NBTTag_Compound ? isset($this->data[$name]) : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __unset($name){
|
public function __unset($name){
|
||||||
if($this->data instanceof NBTTag_Compound){
|
if($this->data instanceof NBTTag_Compound){
|
||||||
unset($this->data->{$name});
|
unset($this->data[$name]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function offsetExists($name){
|
||||||
|
return $this->__isset($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function &offsetGet($name){
|
||||||
|
return $this->__get($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function offsetSet($name, $value){
|
||||||
|
$this->__set($name, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function offsetUnset($name){
|
||||||
|
$this->__unset($name);
|
||||||
|
}
|
||||||
|
|
||||||
public function getData(){
|
public function getData(){
|
||||||
return $this->data;
|
return $this->data;
|
||||||
}
|
}
|
||||||
|
@ -33,9 +33,9 @@ abstract class NBTTag{
|
|||||||
const TAG_Compound = 10;
|
const TAG_Compound = 10;
|
||||||
const TAG_Int_Array = 11;
|
const TAG_Int_Array = 11;
|
||||||
|
|
||||||
protected $value = 0;
|
protected $value;
|
||||||
|
|
||||||
public function getValue(){
|
public function &getValue(){
|
||||||
return $this->value;
|
return $this->value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,18 +19,62 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class NBTTag_Compound extends NamedNBTTag{
|
class NBTTag_Compound extends NamedNBTTag implements ArrayAccess, Iterator{
|
||||||
|
|
||||||
public function getType(){
|
public function getType(){
|
||||||
return NBTTag::TAG_Compound;
|
return NBTTag::TAG_Compound;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __get($name){
|
public function rewind(){
|
||||||
return isset($this->value[$name]) ? $this->value[$name]->getValue() : false;
|
reset($this->value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function current(){
|
||||||
|
return current($this->value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function key(){
|
||||||
|
return key($this->value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function next(){
|
||||||
|
return next($this->value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function valid(){
|
||||||
|
$key = key($this->value);
|
||||||
|
return $key !== null and $key !== false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function offsetExists($name){
|
||||||
|
return $this->__isset($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function &offsetGet($name){
|
||||||
|
return $this->__get($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function offsetSet($name, $value){
|
||||||
|
$this->__set($name, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function offsetUnset($name){
|
||||||
|
$this->__unset($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function &__get($name){
|
||||||
|
$ret = isset($this->value[$name]) ? $this->value[$name] : false;
|
||||||
|
if(!is_object($ret) or $ret instanceof ArrayAccess){
|
||||||
|
return $ret;
|
||||||
|
}else{
|
||||||
|
return $ret->getValue();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __set($name, $value){
|
public function __set($name, $value){
|
||||||
if(isset($this->value[$name])){
|
if($value instanceof NBTTag){
|
||||||
|
$this->value[$name] = $value;
|
||||||
|
}elseif(isset($this->value[$name])){
|
||||||
if($value instanceof NamedNBTTag and $value->getName() !== "" and $value->getName() !== false){
|
if($value instanceof NamedNBTTag and $value->getName() !== "" and $value->getName() !== false){
|
||||||
$this->value[$value->getName()]->setValue($value);
|
$this->value[$value->getName()]->setValue($value);
|
||||||
}else{
|
}else{
|
||||||
|
@ -19,18 +19,72 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class NBTTag_List extends NamedNBTTag{
|
class NBTTag_List extends NamedNBTTag implements ArrayAccess, Iterator{
|
||||||
|
|
||||||
|
private $tagType;
|
||||||
|
|
||||||
public function getType(){
|
public function getType(){
|
||||||
return NBTTag::TAG_List;
|
return NBTTag::TAG_List;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __get($name){
|
public function setTagType($type){
|
||||||
return isset($this->value[$name]) ? $this->value[$name]->getValue() : false;
|
$this->tagType = $type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTagType(){
|
||||||
|
return $this->tagType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rewind(){
|
||||||
|
reset($this->value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function current(){
|
||||||
|
return current($this->value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function key(){
|
||||||
|
return key($this->value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function next(){
|
||||||
|
return next($this->value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function valid(){
|
||||||
|
$key = key($this->value);
|
||||||
|
return $key !== null and $key !== false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function offsetExists($name){
|
||||||
|
return $this->__isset($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function &offsetGet($name){
|
||||||
|
return $this->__get($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function offsetSet($name, $value){
|
||||||
|
$this->__set($name, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function offsetUnset($name){
|
||||||
|
$this->__unset($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function &__get($name){
|
||||||
|
$ret = isset($this->value[$name]) ? $this->value[$name] : false;
|
||||||
|
if(!is_object($ret) or $ret instanceof ArrayAccess){
|
||||||
|
return $ret;
|
||||||
|
}else{
|
||||||
|
return $ret->getValue();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __set($name, $value){
|
public function __set($name, $value){
|
||||||
if(isset($this->value[$name])){
|
if($value instanceof NBTTag){
|
||||||
|
$this->value[$name] = $value;
|
||||||
|
}elseif(isset($this->value[$name])){
|
||||||
$this->value[$name]->setValue($value);
|
$this->value[$name]->setValue($value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -45,11 +99,10 @@ class NBTTag_List extends NamedNBTTag{
|
|||||||
|
|
||||||
public function read(NBT $nbt){
|
public function read(NBT $nbt){
|
||||||
$this->value = array();
|
$this->value = array();
|
||||||
$tagId = $nbt->getByte();
|
$this->tagType = $nbt->getByte();
|
||||||
$this->value[-1] = $tagId;
|
|
||||||
$size = $nbt->getInt();
|
$size = $nbt->getInt();
|
||||||
for($i = 0; $i < $size and !$nbt->feof(); ++$i){
|
for($i = 0; $i < $size and !$nbt->feof(); ++$i){
|
||||||
switch($tagId){
|
switch($this->tagType){
|
||||||
case NBTTag::TAG_Byte:
|
case NBTTag::TAG_Byte:
|
||||||
$tag = new NBTTag_Byte(false);
|
$tag = new NBTTag_Byte(false);
|
||||||
$tag->read($nbt);
|
$tag->read($nbt);
|
||||||
@ -115,11 +168,11 @@ class NBTTag_List extends NamedNBTTag{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function write(NBT $nbt){
|
public function write(NBT $nbt){
|
||||||
$nbt->putByte($this->value[-1]);
|
$nbt->putByte($this->tagType);
|
||||||
$nbt->putInt(count($this->value) - 1);
|
$nbt->putInt(count($this->value));
|
||||||
foreach($this->value as $tag){
|
foreach($this->value as $tag){
|
||||||
if($tag instanceof NBTTag){
|
if($tag instanceof NBTTag){
|
||||||
$nbt->writeTag($tag);
|
$tag->write($nbt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user