getBlockDataAt() публичный Метод

Gets the raw block metadata
public getBlockDataAt ( integer $x, integer $y, integer $z ) : integer
$x integer
$y integer
$z integer
Результат integer 0-15
 public function setWaterField(Player $player, $x, $y, $z, Level $level)
 {
     if (isset($this->waterField[$player->getName()]["pos"]) and $this->waterField[$player->getName()]["pos"] == "{$x}:{$y}:{$z}") {
         return;
     }
     $downId = $level->getBlockIdAt($x, $y, $z);
     $pk = new UpdateBlockPacket();
     if (isset($this->waterField[$player->getName()]["pos"])) {
         $pos = explode(":", $this->waterField[$player->getName()]["pos"]);
         $sides = [[1, 1], [1, 0], [1, 1], [0, -1], [0, 0], [0, 1], [-1, -1], [-1, 0], [-1, 0]];
         foreach ($sides as $side) {
             $downId = $level->getBlockIdAt($pos[0] + $side[0], $pos[2], $pos[1] + $side[1]);
             $downDmg = $level->getBlockDataAt($pos[0] + $side[0], $pos[2], $pos[1] + $side[1]);
             $pk->records[] = [$pos[0] + $side[0], $pos[1] + $side[1], $pos[2], $downId, $downDmg, UpdateBlockPacket::FLAG_NONE];
         }
     }
     if ($downId != Block::STILL_WATER) {
         $pos = explode(":", $this->waterField[$player->getName()]["pos"]);
         $sides = [[1, 1], [1, 0], [1, 1], [0, -1], [0, 0], [0, 1], [-1, -1], [-1, 0], [-1, 0]];
         foreach ($sides as $side) {
             $downId = $level->getBlockIdAt($pos[0] + $side[0], $pos[2], $pos[1] + $side[1]);
             $downDmg = $level->getBlockDataAt($pos[0] + $side[0], $pos[2], $pos[1] + $side[1]);
             $pk->records[] = [$pos[0] + $side[0], $pos[1] + $side[1], $pos[2], $downId, $downDmg, UpdateBlockPacket::FLAG_NONE];
         }
     }
     $player->directDataPacket($pk->setChannel(Network::CHANNEL_BLOCKS));
     $this->waterField[$player->getName()]["pos"] = "{$x}:{$z}:{$y}";
 }
Пример #2
0
 public function whatBlock(Level $level, $v3)
 {
     //boybook的y轴判断法 核心 什么方块?
     $id = $level->getBlockIdAt($v3->x, $v3->y, $v3->z);
     $damage = $level->getBlockDataAt($v3->x, $v3->y, $v3->z);
     switch ($id) {
         case 0:
         case 6:
         case 27:
         case 30:
         case 31:
         case 37:
         case 38:
         case 39:
         case 40:
         case 50:
         case 51:
         case 63:
         case 66:
         case 68:
         case 78:
         case 111:
         case 141:
         case 142:
         case 171:
         case 175:
         case 244:
         case 323:
             //透明方块
             return "air";
             break;
         case 8:
         case 9:
             //水
             return "water";
             break;
         case 10:
         case 11:
             //岩浆
             return "lava";
             break;
         case 44:
         case 158:
             //半砖
             if ($damage >= 8) {
                 return "block";
             } else {
                 return "half";
             }
             break;
         case 64:
             //门
             //var_dump($damage." ");
             //TODO 不知如何判断门是否开启,因为以下条件永远满足
             if (($damage & 0x8) === 0x8) {
                 return "air";
             } else {
                 return "block";
             }
             break;
         case 85:
         case 107:
         case 139:
             //1.5格高的无法跳跃物
             return "high";
             break;
         case 65:
         case 106:
             //可攀爬物
             return "climb";
             break;
         default:
             //普通方块
             return "block";
             break;
     }
 }