Door opening/closing

This commit is contained in:
Shoghi Cervantes Pueyo 2012-12-24 19:57:20 +01:00
parent 8b918a7bce
commit 28383deeee
2 changed files with 39 additions and 3 deletions

View File

@ -163,22 +163,56 @@ class BlockAPI{
if($event !== "player.block.action"){ if($event !== "player.block.action"){
return; return;
} }
if($data["face"] < 0 or $data["face"] > 5){
return;
}
$target = $this->server->api->level->getBlock($data["x"], $data["y"], $data["z"]); $target = $this->server->api->level->getBlock($data["x"], $data["y"], $data["z"]);
$cancelPlace = false; $cancelPlace = false;
if(isset(Material::$activable[$target[0]])){ if(isset(Material::$activable[$target[0]])){
switch($target[0]){ switch($target[0]){
case 2: case 2:
case 3: case 3:
case 6: case 6:
break; break;
case 64: //Door
if(($target[1] & 0x08) === 0x08){
$down = $this->server->api->level->getBlock($data["x"], $data["y"] - 1, $data["z"]);
if($down[0] === 64){
$down[1] = $down[1] ^ 0x04;
$data2 = array(
"x" => $data["x"],
"z" => $data["z"],
"y" => $data["y"] - 1,
"block" => $down[0],
"meta" => $down[1],
"eid" => $data["eid"],
);
$this->server->trigger("player.block.update", $data2);
$this->updateBlocksAround($data2["x"], $data2["y"], $data2["z"], BLOCK_UPDATE_NORMAL);
$this->updateBlocksAround($data["x"], $data["y"], $data["z"], BLOCK_UPDATE_NORMAL);
}
}else{
$data["block"] = $target[0];
$data["meta"] = $target[1] ^ 0x04;
$this->server->trigger("player.block.update", $data);
$up = $this->server->api->level->getBlock($data["x"], $data["y"] + 1, $data["z"]);
if($up[0] === 64){
$data2 = $data;
$data2["meta"] = $up[1];
++$data2["y"];
$this->updateBlocksAround($data2["x"], $data2["y"], $data2["z"], BLOCK_UPDATE_NORMAL);
}
$this->updateBlocksAround($data["x"], $data["y"], $data["z"], BLOCK_UPDATE_NORMAL);
}
$cancelPlace = true;
break;
default: default:
$cancelPlace = true; $cancelPlace = true;
break; break;
} }
} }
if($cancelPlace === true or $data["face"] < 0 or $data["face"] > 5){ if($cancelPlace === true){
return; return;
} }

View File

@ -36,11 +36,13 @@ class LevelAPI{
public function init(){ public function init(){
$this->server->event("player.block.break", array($this, "handle")); $this->server->event("player.block.break", array($this, "handle"));
$this->server->event("player.block.place", array($this, "handle")); $this->server->event("player.block.place", array($this, "handle"));
$this->server->event("player.block.update", array($this, "handle"));
} }
public function handle($data, $event){ public function handle($data, $event){
switch($event){ switch($event){
case "player.block.place": case "player.block.place":
case "player.block.update":
console("[DEBUG] EID ".$data["eid"]." placed ".$data["block"].":".$data["meta"]." at X ".$data["x"]." Y ".$data["y"]." Z ".$data["z"], true, true, 2); console("[DEBUG] EID ".$data["eid"]." placed ".$data["block"].":".$data["meta"]." at X ".$data["x"]." Y ".$data["y"]." Z ".$data["z"], true, true, 2);
$this->setBlock($data["x"], $data["y"], $data["z"], $data["block"], $data["meta"]); $this->setBlock($data["x"], $data["y"], $data["z"], $data["block"], $data["meta"]);
break; break;