mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-12 22:45:28 +00:00
Updated API methods to use less events
This commit is contained in:
parent
565cb9781c
commit
6b77a69302
@ -93,8 +93,6 @@ class BlockAPI{
|
|||||||
|
|
||||||
public function init(){
|
public function init(){
|
||||||
$this->server->addHandler("block.update", array($this, "updateBlockRemote"), 1);
|
$this->server->addHandler("block.update", array($this, "updateBlockRemote"), 1);
|
||||||
$this->server->addHandler("player.block.break", array($this, "blockBreak"), 1);
|
|
||||||
$this->server->addHandler("player.block.action", array($this, "blockAction"), 1);
|
|
||||||
$this->server->api->console->register("give", "Give items to a player", array($this, "commandHandler"));
|
$this->server->api->console->register("give", "Give items to a player", array($this, "commandHandler"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,41 +151,22 @@ class BlockAPI{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function blockBreak($data, $event){
|
public function playerBlockBreak(Player $player, Vector3 $vector){
|
||||||
if($event !== "player.block.break"){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$target = $this->getBlock($data["x"], $data["y"], $data["z"]);
|
$target = $this->getBlock($vector);
|
||||||
$player = $this->server->api->player->getByEID($data["eid"]);
|
|
||||||
if(($player instanceof Player) !== true){
|
|
||||||
return $this->cancelAction($target); //No Entity WTF?
|
|
||||||
}
|
|
||||||
$data["player"] = $player;
|
|
||||||
if($target->isBreakable === false or $this->server->gamemode === 2){
|
if($target->isBreakable === false or $this->server->gamemode === 2){
|
||||||
return $this->cancelAction($target);
|
return $this->cancelAction($target);
|
||||||
}
|
}
|
||||||
$item = $player->equipment;
|
$item = $player->equipment;
|
||||||
$drops = $target->getDrops($item, $player);
|
|
||||||
|
|
||||||
/*switch($target->getID()){
|
|
||||||
case 50: //Drop without metadata
|
if($this->server->api->dhandle("player.block.break", array("player" => $player, "target" => $target, "item" => $item)) !== false){
|
||||||
case 53:
|
$drops = $target->getDrops($item, $player);
|
||||||
case 54:
|
$target->onBreak($this, $item, $player);
|
||||||
case 61:
|
}else{
|
||||||
case 65:
|
return $this->cancelAction($target);
|
||||||
case 67:
|
}
|
||||||
case 96:
|
|
||||||
case 107:
|
|
||||||
case 108:
|
|
||||||
case 109:
|
|
||||||
case 114:
|
|
||||||
case 128:
|
|
||||||
case 156:
|
|
||||||
$drop[1] = 0;
|
|
||||||
break;
|
|
||||||
}*/
|
|
||||||
$target->onBreak($this, $item, $player);
|
|
||||||
|
|
||||||
if(count($drops) > 0){
|
if(count($drops) > 0){
|
||||||
foreach($drops as $drop){
|
foreach($drops as $drop){
|
||||||
@ -224,21 +203,13 @@ class BlockAPI{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function blockAction($data, $event){
|
public function playerBlockAction(Player $player, Vector3 $vector, $face, $fx, $fy, $fz){
|
||||||
if($event !== "player.block.action"){
|
if($face < 0 or $face > 5){
|
||||||
return;
|
|
||||||
}
|
|
||||||
if($data["face"] < 0 or $data["face"] > 5){
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$data["original"] = BlockAPI::get($data["block"], $data["meta"]);
|
|
||||||
$target = $this->getBlock(new Vector3($data["x"], $data["y"], $data["z"]));
|
$target = $this->getBlock($vector);
|
||||||
$player = $this->server->api->player->getByEID($data["eid"]);
|
$block = $this->getBlockFace($target, $face);
|
||||||
if(($player instanceof Player) !== true){
|
|
||||||
return $this->cancelAction($target); //No Entity WTF?
|
|
||||||
}
|
|
||||||
$data["player"] = $player;
|
|
||||||
$block = $this->getBlockFace($target, $data["face"]);
|
|
||||||
$item = $player->equipment;
|
$item = $player->equipment;
|
||||||
|
|
||||||
if($target->getID() === AIR){ //If no block exists
|
if($target->getID() === AIR){ //If no block exists
|
||||||
@ -246,9 +217,8 @@ class BlockAPI{
|
|||||||
return $this->cancelAction($block);
|
return $this->cancelAction($block);
|
||||||
}
|
}
|
||||||
|
|
||||||
$cancelPlace = false;
|
|
||||||
if($target->isActivable === true){
|
if($target->isActivable === true){
|
||||||
if($target->onActivate($this, $item, $player) === true){
|
if($this->server->api->dhandle("player.block.activate", array("player" => $player, "block" => $block, "target" => $target, "item" => $item)) !== false and $target->onActivate($this, $item, $player) === true){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -307,39 +277,20 @@ class BlockAPI{
|
|||||||
return $this->cancelAction($block); //Entity in block
|
return $this->cancelAction($block); //Entity in block
|
||||||
}
|
}
|
||||||
|
|
||||||
if($hand->place($this, $item, $player, $block, $target, $data["face"], $data["fx"], $data["fy"], $data["fz"]) === false){
|
if($this->server->api->dhandle("player.block.place", array("player" => $player, "block" => $block, "target" => $target, "item" => $item)) === false){
|
||||||
return false;
|
return $this->cancelAction($block);
|
||||||
|
}elseif($hand->place($this, $item, $player, $block, $target, $face, $fx, $fy, $fz) === false){
|
||||||
|
return $this->cancelAction($block);
|
||||||
}
|
}
|
||||||
if($hand->getID() === SIGN_POST or $hand->getID() === WALL_POST){
|
if($hand->getID() === SIGN_POST or $hand->getID() === WALL_POST){
|
||||||
$t = $this->server->api->tileentity->addSign($block->x, $block->y, $block->z);
|
$t = $this->server->api->tileentity->addSign($block->x, $block->y, $block->z);
|
||||||
$t->data["creator"] = $player->username;
|
$t->data["creator"] = $player->username;
|
||||||
}
|
}
|
||||||
/*switch($data["block"]){
|
|
||||||
case 26: //bed
|
|
||||||
$face = array(
|
|
||||||
0 => 3,
|
|
||||||
1 => 4,
|
|
||||||
2 => 2,
|
|
||||||
3 => 5,
|
|
||||||
);
|
|
||||||
$next = $level->getBlockFace($block, $face[(($direction + 3) % 4)]);
|
|
||||||
if(!isset(Material::$replaceable[$next[0]])){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$data["meta"] = (($direction + 3) % 4) & 0x3;
|
|
||||||
$data2 = $data;
|
|
||||||
$data2["meta"] = $data2["meta"] | 0x08;
|
|
||||||
$data2["x"] = $next[2][0];
|
|
||||||
$data2["y"] = $next[2][1];
|
|
||||||
$data2["z"] = $next[2][2];
|
|
||||||
$this->server->handle("player.block.place", $data2);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
if($this->server->gamemode === 0 or $this->server->gamemode === 2){
|
if($this->server->gamemode === 0 or $this->server->gamemode === 2){
|
||||||
$player->removeItem($item->getID(), $item->getMetadata(), 1);
|
$player->removeItem($item->getID(), $item->getMetadata(), 1);
|
||||||
}
|
}
|
||||||
//$this->server->handle("player.block.place", $data);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,9 +34,9 @@ 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"));
|
$this->server->event("player.block.update", array($this, "handle"));*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public function handle($data, $event){
|
public function handle($data, $event){
|
||||||
|
@ -587,14 +587,13 @@ class Player{
|
|||||||
console("[DEBUG] Player \"".$this->username."\" tried to place not got block (or crafted block)", true, true, 2);
|
console("[DEBUG] Player \"".$this->username."\" tried to place not got block (or crafted block)", true, true, 2);
|
||||||
//break;
|
//break;
|
||||||
}
|
}
|
||||||
$this->server->handle("player.block.action", $data);
|
$this->server->api->block->playerBlockAction($this, new Vector3($data["x"], $data["y"], $data["z"]), $data["face"], $data["fx"], $data["fy"], $data["fz"]);
|
||||||
break;
|
break;
|
||||||
case MC_REMOVE_BLOCK:
|
case MC_REMOVE_BLOCK:
|
||||||
$data["eid"] = $this->eid;
|
|
||||||
if(Utils::distance($this->entity->position, $data) > 8){
|
if(Utils::distance($this->entity->position, $data) > 8){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$this->server->handle("player.block.break", $data);
|
$this->server->api->block->playerBlockBreak($this, new Vector3($data["x"], $data["y"], $data["z"]));
|
||||||
break;
|
break;
|
||||||
case MC_PLAYER_ARMOR_EQUIPMENT:
|
case MC_PLAYER_ARMOR_EQUIPMENT:
|
||||||
$data["eid"] = $this->eid;
|
$data["eid"] = $this->eid;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user