Fixed SimpleChunk metadata

This commit is contained in:
Shoghi Cervantes 2014-06-14 22:11:19 +02:00
parent 4354d76cae
commit 429f7ffe8d
2 changed files with 18 additions and 12 deletions

View File

@ -143,7 +143,7 @@ class SimpleChunk{
*/ */
public function getBlockData($x, $y, $z){ public function getBlockData($x, $y, $z){
$m = ord($this->meta[$y >> 4]{(($y & 0x0f) << 7) + ($z << 3) + ($x >> 1)}); $m = ord($this->meta[$y >> 4]{(($y & 0x0f) << 7) + ($z << 3) + ($x >> 1)});
if(($y & 1) === 0){ if(($x & 1) === 0){
return $m & 0x0F; return $m & 0x0F;
}else{ }else{
return $m >> 4; return $m >> 4;
@ -159,7 +159,7 @@ class SimpleChunk{
public function setBlockData($x, $y, $z, $data){ public function setBlockData($x, $y, $z, $data){
$i = (($y & 0x0f) << 7) + ($z << 3) + ($x >> 1); $i = (($y & 0x0f) << 7) + ($z << 3) + ($x >> 1);
$old_m = ord($this->meta[$y >> 4]{$i}); $old_m = ord($this->meta[$y >> 4]{$i});
if(($y & 1) === 0){ if(($x & 1) === 0){
$this->meta[$y >> 4]{$i} = chr(($old_m & 0xf0) | ($data & 0x0f)); $this->meta[$y >> 4]{$i} = chr(($old_m & 0xf0) | ($data & 0x0f));
}else{ }else{
$this->meta[$y >> 4]{$i} = chr((($data & 0x0f) << 4) | ($old_m & 0x0f)); $this->meta[$y >> 4]{$i} = chr((($data & 0x0f) << 4) | ($old_m & 0x0f));

View File

@ -53,7 +53,7 @@ class ChunkSection implements \pocketmine\level\format\ChunkSection{
public function getBlockData($x, $y, $z){ public function getBlockData($x, $y, $z){
$m = ord($this->data{($y << 7) + ($z << 3) + ($x >> 1)}); $m = ord($this->data{($y << 7) + ($z << 3) + ($x >> 1)});
if(($y & 1) === 0){ if(($x & 1) === 0){
return $m & 0x0F; return $m & 0x0F;
}else{ }else{
return $m >> 4; return $m >> 4;
@ -63,7 +63,7 @@ class ChunkSection implements \pocketmine\level\format\ChunkSection{
public function setBlockData($x, $y, $z, $data){ public function setBlockData($x, $y, $z, $data){
$i = ($y << 7) + ($z << 3) + ($x >> 1); $i = ($y << 7) + ($z << 3) + ($x >> 1);
$old_m = ord($this->data{$i}); $old_m = ord($this->data{$i});
if(($y & 1) === 0){ if(($x & 1) === 0){
$this->data{$i} = chr(($old_m & 0xf0) | ($data & 0x0f)); $this->data{$i} = chr(($old_m & 0xf0) | ($data & 0x0f));
}else{ }else{
$this->data{$i} = chr((($data & 0x0f) << 4) | ($old_m & 0x0f)); $this->data{$i} = chr((($data & 0x0f) << 4) | ($old_m & 0x0f));
@ -74,7 +74,7 @@ class ChunkSection implements \pocketmine\level\format\ChunkSection{
$i = ($y << 8) + ($z << 4) + $x; $i = ($y << 8) + ($z << 4) + $x;
$blockId = ord($this->blocks{$i}); $blockId = ord($this->blocks{$i});
$m = ord($this->data{$i >> 1}); $m = ord($this->data{$i >> 1});
if(($y & 1) === 0){ if(($x & 1) === 0){
$meta = $m & 0x0F; $meta = $m & 0x0F;
}else{ }else{
$meta = $m >> 4; $meta = $m >> 4;
@ -90,7 +90,7 @@ class ChunkSection implements \pocketmine\level\format\ChunkSection{
if($meta !== null){ if($meta !== null){
$i >>= 1; $i >>= 1;
$old_m = ord($this->data{$i}); $old_m = ord($this->data{$i});
if(($y & 1) === 0){ if(($x & 1) === 0){
$this->data{$i} = chr(($old_m & 0xf0) | ($meta & 0x0f)); $this->data{$i} = chr(($old_m & 0xf0) | ($meta & 0x0f));
}else{ }else{
$this->data{$i} = chr((($meta & 0x0f) << 4) | ($old_m & 0x0f)); $this->data{$i} = chr((($meta & 0x0f) << 4) | ($old_m & 0x0f));
@ -100,7 +100,7 @@ class ChunkSection implements \pocketmine\level\format\ChunkSection{
public function getBlockSkyLight($x, $y, $z){ public function getBlockSkyLight($x, $y, $z){
$sl = ord($this->skyLight{($y << 7) + ($z << 3) + ($x >> 1)}); $sl = ord($this->skyLight{($y << 7) + ($z << 3) + ($x >> 1)});
if(($y & 1) === 0){ if(($x & 1) === 0){
return $sl & 0x0F; return $sl & 0x0F;
}else{ }else{
return $sl >> 4; return $sl >> 4;
@ -110,7 +110,7 @@ class ChunkSection implements \pocketmine\level\format\ChunkSection{
public function setBlockSkyLight($x, $y, $z, $level){ public function setBlockSkyLight($x, $y, $z, $level){
$i = ($y << 7) + ($z << 3) + ($x >> 1); $i = ($y << 7) + ($z << 3) + ($x >> 1);
$old_sl = ord($this->skyLight{$i}); $old_sl = ord($this->skyLight{$i});
if(($y & 1) === 0){ if(($x & 1) === 0){
$this->skyLight{$i} = chr(($old_sl & 0xf0) | ($level & 0x0f)); $this->skyLight{$i} = chr(($old_sl & 0xf0) | ($level & 0x0f));
}else{ }else{
$this->skyLight{$i} = chr((($level & 0x0f) << 4) | ($old_sl & 0x0f)); $this->skyLight{$i} = chr((($level & 0x0f) << 4) | ($old_sl & 0x0f));
@ -119,7 +119,7 @@ class ChunkSection implements \pocketmine\level\format\ChunkSection{
public function getBlockLight($x, $y, $z){ public function getBlockLight($x, $y, $z){
$l = ord($this->blockLight{($y << 7) + ($z << 3) + ($x >> 1)}); $l = ord($this->blockLight{($y << 7) + ($z << 3) + ($x >> 1)});
if(($y & 1) === 0){ if(($x & 1) === 0){
return $l & 0x0F; return $l & 0x0F;
}else{ }else{
return $l >> 4; return $l >> 4;
@ -129,7 +129,7 @@ class ChunkSection implements \pocketmine\level\format\ChunkSection{
public function setBlockLight($x, $y, $z, $level){ public function setBlockLight($x, $y, $z, $level){
$i = ($y << 7) + ($z << 3) + ($x >> 1); $i = ($y << 7) + ($z << 3) + ($x >> 1);
$old_l = ord($this->blockLight{$i}); $old_l = ord($this->blockLight{$i});
if(($y & 1) === 0){ if(($x & 1) === 0){
$this->blockLight{$i} = chr(($old_l & 0xf0) | ($level & 0x0f)); $this->blockLight{$i} = chr(($old_l & 0xf0) | ($level & 0x0f));
}else{ }else{
$this->blockLight{$i} = chr((($level & 0x0f) << 4) | ($old_l & 0x0f)); $this->blockLight{$i} = chr((($level & 0x0f) << 4) | ($old_l & 0x0f));
@ -148,9 +148,15 @@ class ChunkSection implements \pocketmine\level\format\ChunkSection{
public function getBlockDataColumn($x, $z){ public function getBlockDataColumn($x, $z){
$i = ($z << 3) + ($x >> 1); $i = ($z << 3) + ($x >> 1);
$column = ""; $column = "";
if(($x & 1) === 0){
for($y = 0; $y < 16; $y += 2){ for($y = 0; $y < 16; $y += 2){
$column .= chr((ord($this->data{($y << 7) + $i}) & 0x0f) | ((ord($this->data{(($y + 1) << 7) + $i}) & 0x0f) << 4)); $column .= chr((ord($this->data{($y << 7) + $i}) & 0x0f) | ((ord($this->data{(($y + 1) << 7) + $i}) & 0x0f) << 4));
} }
}else{
for($y = 0; $y < 16; $y += 2){
$column .= chr(((ord($this->data{($y << 7) + $i}) & 0xf0) >> 4) | (ord($this->data{(($y + 1) << 7) + $i}) & 0xf0));
}
}
return $column; return $column;
} }