mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-16 18:59:00 +00:00
Added generic block relative place/break on Level
This commit is contained in:
parent
91c4cbfedb
commit
279472b01a
@ -98,13 +98,10 @@ abstract class Achievement{
|
||||
|
||||
public static function broadcast(Player $player, $achievementId){
|
||||
if(isset(Achievement::$list[$achievementId])){
|
||||
$result = ServerAPI::request()->api->dhandle("achievement.broadcast", array("player" => $player, "achievementId" => $achievementId));
|
||||
if($result !== false and $result !== true){
|
||||
if(ServerAPI::request()->api->getProperty("announce-player-achievements") == true){
|
||||
ServerAPI::request()->api->chat->broadcast($player->getUsername() . " has just earned the achievement " . Achievement::$list[$achievementId]["name"]);
|
||||
} else{
|
||||
$player->sendChat("You have just earned the achievement " . Achievement::$list[$achievementId]["name"]);
|
||||
}
|
||||
if(ServerAPI::request()->api->getProperty("announce-player-achievements") == true){
|
||||
ServerAPI::request()->api->chat->broadcast($player->getUsername() . " has just earned the achievement " . Achievement::$list[$achievementId]["name"]);
|
||||
}else{
|
||||
$player->sendChat("You have just earned the achievement " . Achievement::$list[$achievementId]["name"]);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -25,11 +25,6 @@ use PocketMine\Block;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Level\Position;
|
||||
use PocketMine\NBT\Tag\Compound;
|
||||
use PocketMine\NBT\Tag\Int;
|
||||
use PocketMine\NBT\Tag\String;
|
||||
use PocketMine\Network\Protocol\UpdateBlockPacket;
|
||||
use PocketMine\Tile\Sign;
|
||||
|
||||
class BlockAPI{
|
||||
private $server;
|
||||
@ -249,7 +244,7 @@ class BlockAPI{
|
||||
break;
|
||||
}
|
||||
$player = Player::get($params[0]);
|
||||
$item = BlockAPI::fromString($params[1]);
|
||||
$item = Item::fromString($params[1]);
|
||||
|
||||
if(!isset($params[2])){
|
||||
$item->setCount($item->getMaxStackSize());
|
||||
@ -266,7 +261,7 @@ class BlockAPI{
|
||||
$output .= "You cannot give an air block to a player.\n";
|
||||
break;
|
||||
}
|
||||
$player->addItem($item);
|
||||
$player->addItem(clone $item);
|
||||
$output .= "Giving " . $item->getCount() . " of " . $item->getName() . " (" . $item->getID() . ":" . $item->getMetadata() . ") to " . $player->getUsername() . "\n";
|
||||
} else{
|
||||
$output .= "Unknown player.\n";
|
||||
@ -278,169 +273,6 @@ class BlockAPI{
|
||||
return $output;
|
||||
}
|
||||
|
||||
private function cancelAction(Block\Block $block, Player $player, $send = true){
|
||||
$pk = new UpdateBlockPacket;
|
||||
$pk->x = $block->x;
|
||||
$pk->y = $block->y;
|
||||
$pk->z = $block->z;
|
||||
$pk->block = $block->getID();
|
||||
$pk->meta = $block->getMetadata();
|
||||
$player->dataPacket($pk);
|
||||
if($send === true){
|
||||
$player->sendInventorySlot($player->slot);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function playerBlockBreak(Player $player, Math\Vector3 $vector){
|
||||
|
||||
$target = $player->level->getBlock($vector);
|
||||
$item = $player->getSlot($player->slot);
|
||||
|
||||
if($this->server->api->dhandle("player.block.touch", array("type" => "break", "player" => $player, "target" => $target, "item" => $item)) === false){
|
||||
if($this->server->api->dhandle("player.block.break.bypass", array("player" => $player, "target" => $target, "item" => $item)) !== true){
|
||||
return $this->cancelAction($target, $player, false);
|
||||
}
|
||||
}
|
||||
|
||||
if((!$target->isBreakable($item, $player) and $this->server->api->dhandle("player.block.break.invalid", array("player" => $player, "target" => $target, "item" => $item)) !== true) or ($player->gamemode & 0x02) === 0x02 or (($player->lastBreak - $player->getLag() / 1000) + $target->getBreakTime($item, $player) - 0.2) >= microtime(true)){
|
||||
if($this->server->api->dhandle("player.block.break.bypass", array("player" => $player, "target" => $target, "item" => $item)) !== true){
|
||||
return $this->cancelAction($target, $player, false);
|
||||
}
|
||||
}
|
||||
$player->lastBreak = microtime(true);
|
||||
|
||||
if($this->server->api->dhandle("player.block.break", array("player" => $player, "target" => $target, "item" => $item)) !== false){
|
||||
$drops = $target->getDrops($item, $player);
|
||||
if($target->onBreak($item, $player) === false){
|
||||
return $this->cancelAction($target, $player, false);
|
||||
}
|
||||
if(($player->gamemode & 0x01) === 0 and $item->useOn($target) and $item->getMetadata() >= $item->getMaxDurability()){
|
||||
$player->setSlot($player->slot, new Item(Item::AIR, 0, 0));
|
||||
}
|
||||
} else{
|
||||
return $this->cancelAction($target, $player, false);
|
||||
}
|
||||
|
||||
|
||||
if(($player->gamemode & 0x01) === 0x00 and count($drops) > 0){
|
||||
foreach($drops as $drop){
|
||||
echo "I dropped something\n";
|
||||
//$this->server->api->entity->drop(new Position($target->x + 0.5, $target->y, $target->z + 0.5, $target->level), Item::get($drop[0] & 0xFFFF, $drop[1] & 0xFFFF, $drop[2]));
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function playerBlockAction(Player $player, Math\Vector3 $vector, $face, $fx, $fy, $fz){
|
||||
if($face < 0 or $face > 5){
|
||||
return false;
|
||||
}
|
||||
|
||||
$target = $player->level->getBlock($vector);
|
||||
$block = $target->getSide($face);
|
||||
if(($player->getGamemode() & 0x01) === 0){
|
||||
$item = $player->getSlot($player->slot);
|
||||
} else{
|
||||
$item = Item::get(BlockAPI::$creative[$player->slot][0], BlockAPI::$creative[$player->slot][1], 1);
|
||||
}
|
||||
|
||||
if($target->getID() === Item::AIR and $this->server->api->dhandle("player.block.place.invalid", array("player" => $player, "block" => $block, "target" => $target, "item" => $item)) !== true){ //If no block exists or not allowed in CREATIVE
|
||||
if($this->server->api->dhandle("player.block.place.bypass", array("player" => $player, "block" => $block, "target" => $target, "item" => $item)) !== true){
|
||||
$this->cancelAction($target, $player);
|
||||
|
||||
return $this->cancelAction($block, $player);
|
||||
}
|
||||
}
|
||||
|
||||
if($this->server->api->dhandle("player.block.touch", array("type" => "place", "player" => $player, "block" => $block, "target" => $target, "item" => $item)) === false){
|
||||
if($this->server->api->dhandle("player.block.place.bypass", array("player" => $player, "block" => $block, "target" => $target, "item" => $item)) !== true){
|
||||
return $this->cancelAction($block, $player);
|
||||
}
|
||||
}
|
||||
$this->blockUpdate($target, Level::BLOCK_UPDATE_TOUCH);
|
||||
|
||||
if($target->isActivable === true){
|
||||
if($this->server->api->dhandle("player.block.activate", array("player" => $player, "block" => $block, "target" => $target, "item" => $item)) !== false and $target->onActivate($item, $player) === true){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(($player->gamemode & 0x02) === 0x02){ //Adventure mode!!
|
||||
if($this->server->api->dhandle("player.block.place.bypass", array("player" => $player, "block" => $block, "target" => $target, "item" => $item)) !== true){
|
||||
return $this->cancelAction($block, $player, false);
|
||||
}
|
||||
}
|
||||
|
||||
if($block->y > 127 or $block->y < 0){
|
||||
return false;
|
||||
}
|
||||
|
||||
if($item->isActivable === true and $item->onActivate($player->level, $player, $block, $target, $face, $fx, $fy, $fz) === true){
|
||||
if($item->getCount() <= 0){
|
||||
$player->setSlot($player->slot, Item::get(Item::AIR, 0, 0));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if($item->isPlaceable()){
|
||||
$hand = $item->getBlock();
|
||||
$hand->position($block);
|
||||
} elseif($block->getID() === Item::FIRE){
|
||||
$player->level->setBlock($block, new Block\Air(), true, false, true);
|
||||
|
||||
return false;
|
||||
} else{
|
||||
return $this->cancelAction($block, $player, false);
|
||||
}
|
||||
|
||||
if(!($block->isReplaceable === true or ($hand->getID() === Item::SLAB and $block->getID() === Item::SLAB))){
|
||||
return $this->cancelAction($block, $player, false);
|
||||
}
|
||||
|
||||
if($target->isReplaceable === true){
|
||||
$block = $target;
|
||||
$hand->position($block);
|
||||
//$face = -1;
|
||||
}
|
||||
|
||||
//Implement using Bounding Boxes
|
||||
/*if($hand->isSolid === true and $player->inBlock($block)){
|
||||
return $this->cancelAction($block, $player, false); //Entity in block
|
||||
}*/
|
||||
|
||||
if($this->server->api->dhandle("player.block.place", array("player" => $player, "block" => $block, "target" => $target, "item" => $item)) === false){
|
||||
return $this->cancelAction($block, $player);
|
||||
} elseif($hand->place($item, $player, $block, $target, $face, $fx, $fy, $fz) === false){
|
||||
return $this->cancelAction($block, $player, false);
|
||||
}
|
||||
if($hand->getID() === Item::SIGN_POST or $hand->getID() === Item::WALL_SIGN){
|
||||
new Sign($player->level, new Compound(false, array(
|
||||
new String("id", Tile\Tile::SIGN),
|
||||
new Int("x", $block->x),
|
||||
new Int("y", $block->y),
|
||||
new Int("z", $block->z),
|
||||
new String("Text1", ""),
|
||||
new String("Text2", ""),
|
||||
new String("Text3", ""),
|
||||
new String("Text4", ""),
|
||||
new String("creator", $player->getUsername())
|
||||
)));
|
||||
}
|
||||
|
||||
if(($player->getGamemode() & 0x01) === 0){
|
||||
$item->setCount($item->getCount() - 1);
|
||||
if($item->getCount() <= 0){
|
||||
$player->setSlot($player->slot, Item::get(Item::AIR, 0, 0));
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function blockUpdateAround(Position $pos, $type = Level::BLOCK_UPDATE_NORMAL, $delay = false){
|
||||
if($delay !== false){
|
||||
$this->scheduleBlockUpdate($pos->getSide(0), $delay, $type);
|
||||
|
@ -22,8 +22,8 @@
|
||||
namespace PocketMine;
|
||||
|
||||
use PocketMine\Entity\RealHuman;
|
||||
use PocketMine\Event\EventHandler;
|
||||
use PocketMine\Event;
|
||||
use PocketMine\Event\EventHandler;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Level\Position;
|
||||
@ -1025,7 +1025,6 @@ class Player extends RealHuman{
|
||||
return false;
|
||||
}
|
||||
|
||||
$inv =& $this->inventory;
|
||||
if(($this->gamemode & 0x01) === ($gm & 0x01)){
|
||||
$this->gamemode = $gm;
|
||||
$this->sendChat("Your gamemode has been changed to " . $this->getGamemode() . ".\n");
|
||||
@ -1035,9 +1034,7 @@ class Player extends RealHuman{
|
||||
$this->sendChat("Your gamemode has been changed to " . $this->getGamemode() . ", you've to do a forced reconnect.\n");
|
||||
$this->server->schedule(30, array($this, "close"), "gamemode change"); //Forces a kick
|
||||
}
|
||||
$this->inventory = $inv;
|
||||
$this->sendSettings();
|
||||
$this->sendInventory();
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -1479,10 +1476,10 @@ class Player extends RealHuman{
|
||||
if($packet->slot === 0x28 or $packet->slot === 0){ //0 for 0.8.0 compatibility
|
||||
$packet->slot = -1; //Air
|
||||
} else{
|
||||
$packet->slot -= 9;
|
||||
$packet->slot -= 9; //Get real block slot
|
||||
}
|
||||
|
||||
if(($this->gamemode & 0x01) === 1){
|
||||
if(($this->gamemode & 0x01) === 1){ //Creative mode match
|
||||
$packet->slot = false;
|
||||
foreach(BlockAPI::$creative as $i => $d){
|
||||
if($d[0] === $packet->item and $d[1] === $packet->meta){
|
||||
@ -1491,13 +1488,13 @@ class Player extends RealHuman{
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else{
|
||||
}else{
|
||||
$item = $this->getSlot($packet->slot);
|
||||
}
|
||||
|
||||
if($packet->slot === false or EventHandler::callEvent(new Event\Player\PlayerEquipmentChangeEvent($this, $item, $packet->slot, 0)) === Event\Event::DENY){
|
||||
if($packet->slot === false or EventHandler::callEvent(new Event\Player\PlayerItemHeldEvent($this, $item, $packet->slot, 0)) === Event\Event::DENY){
|
||||
$this->sendInventorySlot($packet->slot);
|
||||
} else{
|
||||
}elseif($item instanceof Item){
|
||||
$this->setEquipmentSlot(0, $packet->slot);
|
||||
$this->setCurrentEquipmentSlot(0);
|
||||
if(($this->gamemode & 0x01) === 0){
|
||||
@ -1507,6 +1504,7 @@ class Player extends RealHuman{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($this->inAction === true){
|
||||
$this->inAction = false;
|
||||
//$this->entity->updateMetadata();
|
||||
@ -1541,21 +1539,6 @@ class Player extends RealHuman{
|
||||
$this->craftingItems = array();
|
||||
$this->toCraft = array();
|
||||
$packet->eid = $this->id;
|
||||
$data = array();
|
||||
$data["eid"] = $packet->eid;
|
||||
$data["player"] = $this;
|
||||
$data["face"] = $packet->face;
|
||||
$data["x"] = $packet->x;
|
||||
$data["y"] = $packet->y;
|
||||
$data["z"] = $packet->z;
|
||||
$data["item"] = $packet->item;
|
||||
$data["meta"] = $packet->meta;
|
||||
$data["fx"] = $packet->fx;
|
||||
$data["fy"] = $packet->fy;
|
||||
$data["fz"] = $packet->fz;
|
||||
$data["posX"] = $packet->posX;
|
||||
$data["posY"] = $packet->posY;
|
||||
$data["posZ"] = $packet->posZ;
|
||||
|
||||
if($packet->face >= 0 and $packet->face <= 5){ //Use Block, place
|
||||
if($this->inAction === true){
|
||||
@ -1563,16 +1546,23 @@ class Player extends RealHuman{
|
||||
//$this->entity->updateMetadata();
|
||||
}
|
||||
|
||||
if($this->blocked === true or $blockVector->distance($this) > 10){
|
||||
if($blockVector->distance($this) > 10){
|
||||
|
||||
} elseif(($this->gamemode & 0x01) === 1 and isset(BlockAPI::$creative[$this->slot]) and $packet->item === BlockAPI::$creative[$this->slot][0] and $packet->meta === BlockAPI::$creative[$this->slot][1]){
|
||||
$this->server->api->block->playerBlockAction($this, $blockVector, $packet->face, $packet->fx, $packet->fy, $packet->fz);
|
||||
break;
|
||||
} elseif($this->getSlot($this->slot)->getID() !== $packet->item or ($this->getSlot($this->slot)->isTool() === false and $this->getSlot($this->slot)->getMetadata() !== $packet->meta)){
|
||||
}elseif(($this->gamemode & 0x01) === 1 and isset(BlockAPI::$creative[$this->slot]) and $packet->item === BlockAPI::$creative[$this->slot][0] and $packet->meta === BlockAPI::$creative[$this->slot][1]){
|
||||
$item = Item::get(BlockAPI::$creative[$this->slot][0], BlockAPI::$creative[$this->slot][1], 1);
|
||||
if($this->level->useItemOn($blockVector, $item, $packet->face, $packet->fx, $packet->fy, $packet->fz, $this) === true){
|
||||
break;
|
||||
}
|
||||
}elseif($this->getSlot($this->slot)->getID() !== $packet->item or ($this->getSlot($this->slot)->isTool() === false and $this->getSlot($this->slot)->getMetadata() !== $packet->meta)){
|
||||
$this->sendInventorySlot($this->slot);
|
||||
} else{
|
||||
$this->server->api->block->playerBlockAction($this, $blockVector, $packet->face, $packet->fx, $packet->fy, $packet->fz);
|
||||
break;
|
||||
}else{
|
||||
$item = clone $this->getSlot($this->slot);
|
||||
//TODO: Implement adventure mode checks
|
||||
if($this->level->useItemOn($blockVector, $item, $packet->face, $packet->fx, $packet->fy, $packet->fz, $this) === true){
|
||||
$this->setSlot($this->slot, $item);
|
||||
$this->sendInventorySlot($this->slot);
|
||||
break;
|
||||
}
|
||||
}
|
||||
$target = $this->level->getBlock($blockVector);
|
||||
$block = $target->getSide($packet->face);
|
||||
@ -1676,22 +1666,36 @@ class Player extends RealHuman{
|
||||
}
|
||||
break;*/
|
||||
case ProtocolInfo::REMOVE_BLOCK_PACKET:
|
||||
$blockVector = new Vector3($packet->x, $packet->y, $packet->z);
|
||||
if($this->spawned === false or $this->blocked === true or $this->distance($blockVector) > 8){
|
||||
$target = $this->level->getBlock($blockVector);
|
||||
|
||||
$pk = new UpdateBlockPacket;
|
||||
$pk->x = $target->x;
|
||||
$pk->y = $target->y;
|
||||
$pk->z = $target->z;
|
||||
$pk->block = $target->getID();
|
||||
$pk->meta = $target->getMetadata();
|
||||
$this->dataPacket($pk);
|
||||
if($this->spawned === false or $this->blocked === true){
|
||||
break;
|
||||
}
|
||||
$this->craftingItems = array();
|
||||
$this->toCraft = array();
|
||||
$this->server->api->block->playerBlockBreak($this, $blockVector);
|
||||
|
||||
$vector = new Vector3($packet->x, $packet->y, $packet->z);
|
||||
|
||||
|
||||
if(($this->gamemode & 0x01) === 1){
|
||||
$item = Item::get(BlockAPI::$creative[$this->slot][0], BlockAPI::$creative[$this->slot][1], 1);
|
||||
}else{
|
||||
$item = clone $this->getSlot($this->slot);
|
||||
}
|
||||
|
||||
if(($drops = $this->level->useBreakOn($vector, $item)) !== true){
|
||||
if(($this->gamemode & 0x01) === 0){
|
||||
//TODO: drop items
|
||||
$this->setSlot($this->slot, $item);
|
||||
}
|
||||
break;
|
||||
}
|
||||
$target = $this->level->getBlock($vector);
|
||||
$pk = new UpdateBlockPacket;
|
||||
$pk->x = $target->x;
|
||||
$pk->y = $target->y;
|
||||
$pk->z = $target->z;
|
||||
$pk->block = $target->getID();
|
||||
$pk->meta = $target->getMetadata();
|
||||
$this->directDataPacket($pk);
|
||||
break;
|
||||
case ProtocolInfo::PLAYER_ARMOR_EQUIPMENT_PACKET:
|
||||
if($this->spawned === false or $this->blocked === true){
|
||||
@ -1716,14 +1720,14 @@ class Player extends RealHuman{
|
||||
$this->addItem($slot);
|
||||
$packet->slots[$i] = 255;
|
||||
}
|
||||
} elseif($s->getID() !== Item::AIR and $slot->getID() === Item::AIR and ($sl = $this->hasItem($s->getID())) !== false){
|
||||
}elseif($s->getID() !== Item::AIR and $slot->getID() === Item::AIR and ($sl = $this->hasItem($s, false)) !== false){
|
||||
if($this->setArmorSlot($i, $this->getSlot($sl)) === false){
|
||||
$this->sendArmor();
|
||||
$this->sendInventory();
|
||||
} else{
|
||||
$this->setSlot($sl, Item::get(Item::AIR, 0, 0));
|
||||
}
|
||||
} elseif($s->getID() !== Item::AIR and $slot->getID() !== Item::AIR and ($slot->getID() !== $s->getID() or $slot->getMetadata() !== $s->getMetadata()) and ($sl = $this->hasItem($s->getID())) !== false){
|
||||
}elseif($s->getID() !== Item::AIR and $slot->getID() !== Item::AIR and ($slot->getID() !== $s->getID() or $slot->getMetadata() !== $s->getMetadata()) and ($sl = $this->hasItem($s, false)) !== false){
|
||||
if($this->setArmorSlot($i, $this->getSlot($sl)) === false){
|
||||
$this->sendArmor();
|
||||
$this->sendInventory();
|
||||
|
@ -21,10 +21,10 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Network\Protocol\ChatPacket;
|
||||
use PocketMine\ServerAPI;
|
||||
use PocketMine;
|
||||
|
||||
class Bed extends Transparent{
|
||||
public function __construct($type = 0){
|
||||
@ -34,8 +34,8 @@ class Bed extends Transparent{
|
||||
$this->hardness = 1;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
if(ServerAPI::request()->api->time->getPhase($player->level) !== "night"){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($player instanceof PocketMine\Player and ServerAPI::request()->api->time->getPhase($this->level) !== "night"){
|
||||
$pk = new ChatPacket;
|
||||
$pk->message = "You can only sleep at night";
|
||||
$player->dataPacket($pk);
|
||||
@ -49,16 +49,16 @@ class Bed extends Transparent{
|
||||
$blockWest = $this->getSide(4);
|
||||
if(($this->meta & 0x08) === 0x08){ //This is the Top part of bed
|
||||
$b = $this;
|
||||
} else{ //Bottom Part of Bed
|
||||
}else{ //Bottom Part of Bed
|
||||
if($blockNorth->getID() === $this->id and ($blockNorth->meta & 0x08) === 0x08){
|
||||
$b = $blockNorth;
|
||||
} elseif($blockSouth->getID() === $this->id and ($blockSouth->meta & 0x08) === 0x08){
|
||||
}elseif($blockSouth->getID() === $this->id and ($blockSouth->meta & 0x08) === 0x08){
|
||||
$b = $blockSouth;
|
||||
} elseif($blockEast->getID() === $this->id and ($blockEast->meta & 0x08) === 0x08){
|
||||
}elseif($blockEast->getID() === $this->id and ($blockEast->meta & 0x08) === 0x08){
|
||||
$b = $blockEast;
|
||||
} elseif($blockWest->getID() === $this->id and ($blockWest->meta & 0x08) === 0x08){
|
||||
}elseif($blockWest->getID() === $this->id and ($blockWest->meta & 0x08) === 0x08){
|
||||
$b = $blockWest;
|
||||
} else{
|
||||
}elseif($player instanceof PocketMine\Player){
|
||||
$pk = new ChatPacket;
|
||||
$pk->message = "This bed is incomplete";
|
||||
$player->dataPacket($pk);
|
||||
@ -67,7 +67,7 @@ class Bed extends Transparent{
|
||||
}
|
||||
}
|
||||
|
||||
if($player->sleepOn($b) === false){
|
||||
if($player instanceof PocketMine\Player and $player->sleepOn($b) === false){
|
||||
$pk = new ChatPacket;
|
||||
$pk->message = "This bed is occupied";
|
||||
$player->dataPacket($pk);
|
||||
@ -76,7 +76,7 @@ class Bed extends Transparent{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->isTransparent === false){
|
||||
$faces = array(
|
||||
@ -85,7 +85,7 @@ class Bed extends Transparent{
|
||||
2 => 2,
|
||||
3 => 5,
|
||||
);
|
||||
$d = $player->getDirection();
|
||||
$d = $player instanceof PocketMine\Player ? $player->getDirection() : 0;
|
||||
$next = $this->getSide($faces[(($d + 3) % 4)]);
|
||||
$downNext = $this->getSide(0);
|
||||
if($next->isReplaceable === true and $downNext->isTransparent === false){
|
||||
@ -100,7 +100,7 @@ class Bed extends Transparent{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function onBreak(Item $item, PocketMine\Player $player){
|
||||
public function onBreak(Item $item){
|
||||
$blockNorth = $this->getSide(2); //Gets the blocks around them
|
||||
$blockSouth = $this->getSide(3);
|
||||
$blockEast = $this->getSide(5);
|
||||
@ -109,21 +109,21 @@ class Bed extends Transparent{
|
||||
if(($this->meta & 0x08) === 0x08){ //This is the Top part of bed
|
||||
if($blockNorth->getID() === $this->id and $blockNorth->meta !== 0x08){ //Checks if the block ID and meta are right
|
||||
$this->level->setBlock($blockNorth, new Air(), true, false, true);
|
||||
} elseif($blockSouth->getID() === $this->id and $blockSouth->meta !== 0x08){
|
||||
}elseif($blockSouth->getID() === $this->id and $blockSouth->meta !== 0x08){
|
||||
$this->level->setBlock($blockSouth, new Air(), true, false, true);
|
||||
} elseif($blockEast->getID() === $this->id and $blockEast->meta !== 0x08){
|
||||
}elseif($blockEast->getID() === $this->id and $blockEast->meta !== 0x08){
|
||||
$this->level->setBlock($blockEast, new Air(), true, false, true);
|
||||
} elseif($blockWest->getID() === $this->id and $blockWest->meta !== 0x08){
|
||||
}elseif($blockWest->getID() === $this->id and $blockWest->meta !== 0x08){
|
||||
$this->level->setBlock($blockWest, new Air(), true, false, true);
|
||||
}
|
||||
} else{ //Bottom Part of Bed
|
||||
}else{ //Bottom Part of Bed
|
||||
if($blockNorth->getID() === $this->id and ($blockNorth->meta & 0x08) === 0x08){
|
||||
$this->level->setBlock($blockNorth, new Air(), true, false, true);
|
||||
} elseif($blockSouth->getID() === $this->id and ($blockSouth->meta & 0x08) === 0x08){
|
||||
}elseif($blockSouth->getID() === $this->id and ($blockSouth->meta & 0x08) === 0x08){
|
||||
$this->level->setBlock($blockSouth, new Air(), true, false, true);
|
||||
} elseif($blockEast->getID() === $this->id and ($blockEast->meta & 0x08) === 0x08){
|
||||
}elseif($blockEast->getID() === $this->id and ($blockEast->meta & 0x08) === 0x08){
|
||||
$this->level->setBlock($blockEast, new Air(), true, false, true);
|
||||
} elseif($blockWest->getID() === $this->id and ($blockWest->meta & 0x08) === 0x08){
|
||||
}elseif($blockWest->getID() === $this->id and ($blockWest->meta & 0x08) === 0x08){
|
||||
$this->level->setBlock($blockWest, new Air(), true, false, true);
|
||||
}
|
||||
}
|
||||
@ -132,7 +132,7 @@ class Bed extends Transparent{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array(Item::BED, 0, 1),
|
||||
);
|
||||
|
@ -31,11 +31,7 @@ class Bedrock extends Solid{
|
||||
$this->hardness = 18000000;
|
||||
}
|
||||
|
||||
public function isBreakable(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return true;
|
||||
}
|
||||
|
||||
public function isBreakable(Item $item){
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class Beetroot extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -32,7 +32,7 @@ class Beetroot extends Flowable{
|
||||
$this->hardness = 0;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() === self::FARMLAND){
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
@ -43,13 +43,11 @@ class Beetroot extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($item->getID() === Item::DYE and $item->getMetadata() === 0x0F){ //Bonemeal
|
||||
$this->meta = 0x07;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
if(($player->gamemode & 0x01) === 0){
|
||||
$item->count--;
|
||||
}
|
||||
$item->count--;
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -66,7 +64,7 @@ class Beetroot extends Flowable{
|
||||
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
}elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
if(mt_rand(0, 2) == 1){
|
||||
if($this->meta < 0x07){
|
||||
++$this->meta;
|
||||
@ -74,7 +72,7 @@ class Beetroot extends Flowable{
|
||||
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
} else{
|
||||
}else{
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
}
|
||||
@ -82,12 +80,12 @@ class Beetroot extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
$drops = array();
|
||||
if($this->meta >= 0x07){
|
||||
$drops[] = array(Item::BEETROOT, 0, 1);
|
||||
$drops[] = array(Item::BEETROOT_SEEDS, 0, mt_rand(0, 3));
|
||||
} else{
|
||||
}else{
|
||||
$drops[] = array(Item::BEETROOT_SEEDS, 0, 1);
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,7 @@ class BirchWoodStairs extends Stair{
|
||||
parent::__construct(self::BIRCH_WOOD_STAIRS, $meta, "Birch Wood Stairs");
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, 0, 1),
|
||||
);
|
||||
|
@ -24,11 +24,10 @@
|
||||
*/
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Level\Position;
|
||||
use PocketMine\Player;
|
||||
use PocketMine;
|
||||
|
||||
abstract class Block extends Position{
|
||||
const AIR = 0;
|
||||
@ -368,7 +367,7 @@ abstract class Block extends Position{
|
||||
if(isset(self::$list[$id])){
|
||||
$block = clone self::$list[$id];
|
||||
$block->setMetadata($meta);
|
||||
} else{
|
||||
}else{
|
||||
$block = new Generic($id, $meta);
|
||||
}
|
||||
if($pos instanceof Position){
|
||||
@ -441,15 +440,14 @@ abstract class Block extends Position{
|
||||
/**
|
||||
* Returns an array of Item objects to be dropped
|
||||
*
|
||||
* @param Item $item
|
||||
* @param Player $player
|
||||
* @param Item $item
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if(!isset(self::$list[$this->id])){ //Unknown blocks
|
||||
return array();
|
||||
} else{
|
||||
}else{
|
||||
return array(
|
||||
array($this->id, $this->meta, 1),
|
||||
);
|
||||
@ -459,16 +457,11 @@ abstract class Block extends Position{
|
||||
/**
|
||||
* Returns the seconds that this block takes to be broken using an specific Item
|
||||
*
|
||||
* @param Item $item
|
||||
* @param Player $player
|
||||
* @param Item $item
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.15;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item){
|
||||
return $this->breakTime;
|
||||
}
|
||||
|
||||
@ -498,48 +491,46 @@ abstract class Block extends Position{
|
||||
/**
|
||||
* Returns if the item can be broken with an specific Item
|
||||
*
|
||||
* @param Item $item
|
||||
* @param Player $player
|
||||
* @param Item $item
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
abstract function isBreakable(Item $item, PocketMine\Player $player);
|
||||
abstract function isBreakable(Item $item);
|
||||
|
||||
/**
|
||||
* Do the actions needed so the block is broken with the Item
|
||||
*
|
||||
* @param Item $item
|
||||
* @param Player $player
|
||||
* @param Item $item
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
abstract function onBreak(Item $item, PocketMine\Player $player);
|
||||
abstract function onBreak(Item $item);
|
||||
|
||||
/**
|
||||
* Places the Block, using block space and block target, and side. Returns if the block has been placed.
|
||||
*
|
||||
* @param Item $item
|
||||
* @param Player $player
|
||||
* @param Block $block
|
||||
* @param Block $target
|
||||
* @param int $face
|
||||
* @param float $fx
|
||||
* @param float $fy
|
||||
* @param float $fz
|
||||
* @param Item $item
|
||||
* @param Block $block
|
||||
* @param Block $target
|
||||
* @param int $face
|
||||
* @param float $fx
|
||||
* @param float $fy
|
||||
* @param float $fz
|
||||
* @param \PocketMine\Player $player = null
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
abstract function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz);
|
||||
abstract function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null);
|
||||
|
||||
/**
|
||||
* Do actions when activated by Item. Returns if it has done anything
|
||||
*
|
||||
* @param Item $item
|
||||
* @param Player $player
|
||||
* @param Item $item
|
||||
* @param \PocketMine\Player $player
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
abstract function onActivate(Item $item, PocketMine\Player $player);
|
||||
abstract function onActivate(Item $item, PocketMine\Player $player = null);
|
||||
|
||||
/**
|
||||
* Fires a block update on the Block
|
||||
|
@ -30,10 +30,7 @@ class Bricks extends Solid{
|
||||
$this->hardness = 30;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.4;
|
||||
@ -50,12 +47,12 @@ class Bricks extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array(Item::BRICKS_BLOCK, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class BrownMushroom extends Flowable{
|
||||
public function __construct(){
|
||||
@ -45,7 +45,7 @@ class BrownMushroom extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->isTransparent === false){
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
|
@ -22,14 +22,14 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine;
|
||||
use PocketMine\NBT\NBT;
|
||||
use PocketMine\NBT\Tag\Compound;
|
||||
use PocketMine\NBT\Tag\Enum;
|
||||
use PocketMine\NBT\Tag\Int;
|
||||
use PocketMine\NBT\Tag\String;
|
||||
use PocketMine\Tile\Furnace;
|
||||
use PocketMine\Tile\Tile;
|
||||
use PocketMine;
|
||||
use PocketMine\NBT\NBT;
|
||||
|
||||
class BurningFurnace extends Solid{
|
||||
public function __construct($meta = 0){
|
||||
@ -38,14 +38,14 @@ class BurningFurnace extends Solid{
|
||||
$this->hardness = 17.5;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$faces = array(
|
||||
0 => 4,
|
||||
1 => 2,
|
||||
2 => 5,
|
||||
3 => 3,
|
||||
);
|
||||
$this->meta = $faces[$player->getDirection()];
|
||||
$this->meta = $faces[$player instanceof PocketMine\Player ? $player->getDirection() : 0];
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
$nbt = new Compound(false, array(
|
||||
new Enum("Items", array()),
|
||||
@ -60,43 +60,41 @@ class BurningFurnace extends Solid{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function onBreak(Item $item, PocketMine\Player $player){
|
||||
public function onBreak(Item $item){
|
||||
$this->level->setBlock($this, new Air(), true, true, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($player instanceof PocketMine\Player){
|
||||
$t = $this->level->getTile($this);
|
||||
$furnace = false;
|
||||
if($t instanceof Furnace){
|
||||
$furnace = $t;
|
||||
}else{
|
||||
$nbt = new Compound(false, array(
|
||||
new Enum("Items", array()),
|
||||
new String("id", Tile::FURNACE),
|
||||
new Int("x", $this->x),
|
||||
new Int("y", $this->y),
|
||||
new Int("z", $this->z)
|
||||
));
|
||||
$nbt->Items->setTagType(NBT::TAG_Compound);
|
||||
$furnace = new Furnace($this->level, $nbt);
|
||||
}
|
||||
|
||||
$t = $this->level->getTile($this);
|
||||
$furnace = false;
|
||||
if($t instanceof Furnace){
|
||||
$furnace = $t;
|
||||
} else{
|
||||
$nbt = new Compound(false, array(
|
||||
new Enum("Items", array()),
|
||||
new String("id", Tile::FURNACE),
|
||||
new Int("x", $this->x),
|
||||
new Int("y", $this->y),
|
||||
new Int("z", $this->z)
|
||||
));
|
||||
$nbt->Items->setTagType(NBT::TAG_Compound);
|
||||
$furnace = new Furnace($this->level, $nbt);
|
||||
if(($player->getGamemode() & 0x01) === 0x01){
|
||||
return true;
|
||||
}
|
||||
|
||||
$furnace->openInventory($player);
|
||||
}
|
||||
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return true;
|
||||
}
|
||||
|
||||
$furnace->openInventory($player);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.7;
|
||||
@ -113,7 +111,7 @@ class BurningFurnace extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
$drops = array();
|
||||
if($item->isPickaxe() >= 1){
|
||||
$drops[] = array(Item::FURNACE, 0, 1);
|
||||
|
@ -21,11 +21,11 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Math\Vector3 as Vector3;
|
||||
use PocketMine\ServerAPI;
|
||||
use PocketMine;
|
||||
|
||||
class Cactus extends Transparent{
|
||||
public function __construct($meta = 0){
|
||||
@ -43,7 +43,7 @@ class Cactus extends Transparent{
|
||||
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
}elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
if($this->getSide(0)->getID() !== self::CACTUS){
|
||||
if($this->meta == 0x0F){
|
||||
for($y = 1; $y < 3; ++$y){
|
||||
@ -55,7 +55,7 @@ class Cactus extends Transparent{
|
||||
}
|
||||
$this->meta = 0;
|
||||
$this->level->setBlock($this, $this, false);
|
||||
} else{
|
||||
}else{
|
||||
++$this->meta;
|
||||
$this->level->setBlock($this, $this, false);
|
||||
}
|
||||
@ -67,7 +67,7 @@ class Cactus extends Transparent{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() === self::SAND or $down->getID() === self::CACTUS){
|
||||
$block0 = $this->getSide(2);
|
||||
@ -84,7 +84,7 @@ class Cactus extends Transparent{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, 0, 1),
|
||||
);
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class Cake extends Transparent{
|
||||
public function __construct($meta = 0){
|
||||
@ -34,7 +34,7 @@ class Cake extends Transparent{
|
||||
$this->hardness = 2.5;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() !== self::AIR){
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
@ -57,17 +57,17 @@ class Cake extends Transparent{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array();
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
if($player->getHealth() < 20){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($player instanceof PocketMine\Player and $player->getHealth() < 20){
|
||||
++$this->meta;
|
||||
$player->heal(3, "cake");
|
||||
if($this->meta >= 0x06){
|
||||
$this->level->setBlock($this, new Air(), true, false, true);
|
||||
} else{
|
||||
}else{
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
}
|
||||
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class Carpet extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -52,7 +52,7 @@ class Carpet extends Flowable{
|
||||
$this->isSolid = true;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() !== self::AIR){
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class Carrot extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -32,7 +32,7 @@ class Carrot extends Flowable{
|
||||
$this->hardness = 0;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() === self::FARMLAND){
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
@ -43,13 +43,11 @@ class Carrot extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($item->getID() === Item::DYE and $item->getMetadata() === 0x0F){ //Bonemeal
|
||||
$this->meta = 0x07;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
if(($player->gamemode & 0x01) === 0){
|
||||
$item->count--;
|
||||
}
|
||||
$item->count--;
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -66,7 +64,7 @@ class Carrot extends Flowable{
|
||||
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
}elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
if(mt_rand(0, 2) == 1){
|
||||
if($this->meta < 0x07){
|
||||
++$this->meta;
|
||||
@ -74,7 +72,7 @@ class Carrot extends Flowable{
|
||||
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
} else{
|
||||
}else{
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
}
|
||||
@ -82,11 +80,11 @@ class Carrot extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
$drops = array();
|
||||
if($this->meta >= 0x07){
|
||||
$drops[] = array(Item::CARROT, 0, mt_rand(1, 4));
|
||||
} else{
|
||||
}else{
|
||||
$drops[] = array(Item::CARROT, 0, 1);
|
||||
}
|
||||
|
||||
|
@ -22,14 +22,14 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine;
|
||||
use PocketMine\NBT\NBT;
|
||||
use PocketMine\NBT\Tag\Compound;
|
||||
use PocketMine\NBT\Tag\Enum;
|
||||
use PocketMine\NBT\Tag\Int;
|
||||
use PocketMine\NBT\Tag\String;
|
||||
use PocketMine\Tile\Chest as TileChest;
|
||||
use PocketMine\Tile\Tile;
|
||||
use PocketMine;
|
||||
use PocketMine\NBT\NBT;
|
||||
|
||||
class Chest extends Transparent{
|
||||
|
||||
@ -41,7 +41,7 @@ class Chest extends Transparent{
|
||||
$this->hardness = 15;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$faces = array(
|
||||
0 => 4,
|
||||
1 => 2,
|
||||
@ -50,12 +50,12 @@ class Chest extends Transparent{
|
||||
);
|
||||
|
||||
$chest = false;
|
||||
$this->meta = $faces[$player->getDirection()];
|
||||
$this->meta = $faces[$player instanceof PocketMine\Player ? $player->getDirection() : 0];
|
||||
|
||||
for($side = 2; $side <= 5; ++$side){
|
||||
if(($this->meta === 4 or $this->meta === 5) and ($side === 4 or $side === 5)){
|
||||
continue;
|
||||
} elseif(($this->meta === 3 or $this->meta === 2) and ($side === 2 or $side === 3)){
|
||||
}elseif(($this->meta === 3 or $this->meta === 2) and ($side === 2 or $side === 3)){
|
||||
continue;
|
||||
}
|
||||
$c = $this->getSide($side);
|
||||
@ -86,7 +86,7 @@ class Chest extends Transparent{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function onBreak(Item $item, PocketMine\Player $player){
|
||||
public function onBreak(Item $item){
|
||||
$t = $this->level->getTile($this);
|
||||
if($t instanceof TileChest){
|
||||
$t->unpair();
|
||||
@ -96,39 +96,41 @@ class Chest extends Transparent{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
$top = $this->getSide(1);
|
||||
if($top->isTransparent !== true){
|
||||
return true;
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($player instanceof PocketMine\Player){
|
||||
$top = $this->getSide(1);
|
||||
if($top->isTransparent !== true){
|
||||
return true;
|
||||
}
|
||||
|
||||
$t = $this->level->getTile($this);
|
||||
$chest = false;
|
||||
if($t instanceof TileChest){
|
||||
$chest = $t;
|
||||
}else{
|
||||
$nbt = new Compound(false, array(
|
||||
new Enum("Items", array()),
|
||||
new String("id", Tile::CHEST),
|
||||
new Int("x", $this->x),
|
||||
new Int("y", $this->y),
|
||||
new Int("z", $this->z)
|
||||
));
|
||||
$nbt->Items->setTagType(NBT::TAG_Compound);
|
||||
$chest = new TileChest($this->level, $nbt);
|
||||
}
|
||||
|
||||
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return true;
|
||||
}
|
||||
|
||||
$chest->openInventory($player);
|
||||
}
|
||||
|
||||
$t = $this->level->getTile($this);
|
||||
$chest = false;
|
||||
if($t instanceof TileChest){
|
||||
$chest = $t;
|
||||
} else{
|
||||
$nbt = new Compound(false, array(
|
||||
new Enum("Items", array()),
|
||||
new String("id", Tile::CHEST),
|
||||
new Int("x", $this->x),
|
||||
new Int("y", $this->y),
|
||||
new Int("z", $this->z)
|
||||
));
|
||||
$nbt->Items->setTagType(NBT::TAG_Compound);
|
||||
$chest = new TileChest($this->level, $nbt);
|
||||
}
|
||||
|
||||
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return true;
|
||||
}
|
||||
|
||||
$chest->openInventory($player);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
$drops = array(
|
||||
array($this->id, 0, 1),
|
||||
);
|
||||
|
@ -30,7 +30,7 @@ class Clay extends Solid{
|
||||
$this->hardness = 3;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array(Item::CLAY, 0, 4),
|
||||
);
|
||||
|
@ -30,10 +30,7 @@ class Coal extends Solid{
|
||||
$this->hardness = 30;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.95;
|
||||
@ -50,12 +47,12 @@ class Coal extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array(Item::COAL_BLOCK, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -30,10 +30,7 @@ class CoalOre extends Solid{
|
||||
$this->hardness = 15;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.6;
|
||||
@ -50,12 +47,12 @@ class CoalOre extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array(Item::COAL, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -30,10 +30,7 @@ class Cobblestone extends Solid{
|
||||
$this->hardness = 30;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.4;
|
||||
@ -50,12 +47,12 @@ class Cobblestone extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array(Item::COBBLESTONE, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ class Cobweb extends Flowable{
|
||||
$this->hardness = 25;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array();
|
||||
}
|
||||
}
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class CyanFlower extends Flowable{
|
||||
public function __construct(){
|
||||
@ -31,7 +31,7 @@ class CyanFlower extends Flowable{
|
||||
$this->hardness = 0;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() === 2 or $down->getID() === 3 or $down->getID() === 60){
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class Dandelion extends Flowable{
|
||||
public function __construct(){
|
||||
@ -31,7 +31,7 @@ class Dandelion extends Flowable{
|
||||
$this->hardness = 0;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() === 2 or $down->getID() === 3 or $down->getID() === 60){
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
|
@ -30,10 +30,7 @@ class Diamond extends Solid{
|
||||
$this->hardness = 30;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.95;
|
||||
@ -44,12 +41,12 @@ class Diamond extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 4){
|
||||
return array(
|
||||
array(Item::DIAMOND_BLOCK, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -30,10 +30,7 @@ class DiamondOre extends Solid{
|
||||
$this->hardness = 15;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.6;
|
||||
@ -44,12 +41,12 @@ class DiamondOre extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 4){
|
||||
return array(
|
||||
array(Item::DIAMOND, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -31,11 +31,9 @@ class Dirt extends Solid{
|
||||
$this->hardness = 2.5;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($item->isHoe()){
|
||||
if(($player->gamemode & 0x01) === 0){
|
||||
$item->useOn($this);
|
||||
}
|
||||
$item->useOn($this);
|
||||
$this->level->setBlock($this, Block::get(Item::FARMLAND, 0), true, false, true);
|
||||
|
||||
return true;
|
||||
|
@ -21,11 +21,11 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Network\Protocol\LevelEventPacket;
|
||||
use PocketMine\Player;
|
||||
use PocketMine;
|
||||
|
||||
|
||||
abstract class Door extends Transparent{
|
||||
@ -49,14 +49,14 @@ abstract class Door extends Transparent{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
if($face === 1){
|
||||
$blockUp = $this->getSide(1);
|
||||
$blockDown = $this->getSide(0);
|
||||
if($blockUp->isReplaceable === false or $blockDown->isTransparent === true){
|
||||
return false;
|
||||
}
|
||||
$direction = $player->getDirection();
|
||||
$direction = $player instanceof Player ? $player->getDirection() : 0;
|
||||
$face = array(
|
||||
0 => 3,
|
||||
1 => 4,
|
||||
@ -71,7 +71,7 @@ abstract class Door extends Transparent{
|
||||
}
|
||||
$this->level->setBlock($blockUp, Block::get($this->id, $metaUp), true, false, true); //Top
|
||||
|
||||
$this->meta = $direction & 0x03;
|
||||
$this->meta = $player->getDirection() & 0x03;
|
||||
$this->level->setBlock($block, $this, true, false, true); //Bottom
|
||||
return true;
|
||||
}
|
||||
@ -79,13 +79,13 @@ abstract class Door extends Transparent{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function onBreak(Item $item, PocketMine\Player $player){
|
||||
public function onBreak(Item $item){
|
||||
if(($this->meta & 0x08) === 0x08){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() === $this->id){
|
||||
$this->level->setBlock($down, new Air(), true, false, true);
|
||||
}
|
||||
} else{
|
||||
}else{
|
||||
$up = $this->getSide(1);
|
||||
if($up->getID() === $this->id){
|
||||
$this->level->setBlock($up, new Air(), true, false, true);
|
||||
@ -96,14 +96,16 @@ abstract class Door extends Transparent{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if(($this->meta & 0x08) === 0x08){ //Top
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() === $this->id){
|
||||
$meta = $down->getMetadata() ^ 0x04;
|
||||
$this->level->setBlock($down, Block::get($this->id, $meta), true, false, true);
|
||||
$players = $this->level->getUsingChunk($this->x >> 4, $this->z >> 4);
|
||||
unset($players[$player->CID]);
|
||||
if($player instanceof Player){
|
||||
unset($players[$player->CID]);
|
||||
}
|
||||
$pk = new LevelEventPacket;
|
||||
$pk->x = $this->x;
|
||||
$pk->y = $this->y;
|
||||
@ -116,11 +118,13 @@ abstract class Door extends Transparent{
|
||||
}
|
||||
|
||||
return false;
|
||||
} else{
|
||||
}else{
|
||||
$this->meta ^= 0x04;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
$players = $this->level->getUsingChunk($this->x >> 4, $this->z >> 4);
|
||||
unset($players[$player->CID]);
|
||||
if($player instanceof Player){
|
||||
unset($players[$player->CID]);
|
||||
}
|
||||
$pk = new LevelEventPacket;
|
||||
$pk->x = $this->x;
|
||||
$pk->y = $this->y;
|
||||
|
@ -40,10 +40,7 @@ class DoubleSlab extends Solid{
|
||||
$this->hardness = 30;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.4;
|
||||
@ -60,12 +57,12 @@ class DoubleSlab extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array(Item::SLAB, $this->meta & 0x07, 2),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -37,10 +37,7 @@ class DoubleWoodSlab extends Solid{
|
||||
$this->hardness = 15;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isAxe()){
|
||||
case 5:
|
||||
return 0.4;
|
||||
@ -57,7 +54,7 @@ class DoubleWoodSlab extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array(Item::WOOD_SLAB, $this->meta & 0x07, 2),
|
||||
);
|
||||
|
@ -21,10 +21,10 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\ServerAPI;
|
||||
use PocketMine;
|
||||
|
||||
class Fallable extends Solid{
|
||||
|
||||
@ -33,7 +33,7 @@ class Fallable extends Solid{
|
||||
$this->hasPhysics = true;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$ret = $this->level->setBlock($this, $this, true, false, true);
|
||||
ServerAPI::request()->api->block->blockUpdate(clone $this, Level::BLOCK_UPDATE_NORMAL);
|
||||
|
||||
|
@ -30,7 +30,7 @@ class Farmland extends Solid{
|
||||
$this->hardness = 3;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array(Item::DIRT, 0, 1),
|
||||
);
|
||||
|
@ -30,42 +30,42 @@ class FenceGate extends Transparent{
|
||||
$this->isActivable = true;
|
||||
if(($this->meta & 0x04) === 0x04){
|
||||
$this->isFullBlock = true;
|
||||
} else{
|
||||
}else{
|
||||
$this->isFullBlock = false;
|
||||
}
|
||||
$this->hardness = 15;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$faces = array(
|
||||
0 => 3,
|
||||
1 => 0,
|
||||
2 => 1,
|
||||
3 => 2,
|
||||
);
|
||||
$this->meta = $faces[$player->getDirection()] & 0x03;
|
||||
$this->meta = $faces[$player instanceof PocketMine\Player ? $player->getDirection() : 0] & 0x03;
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, 0, 1),
|
||||
);
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
$faces = array(
|
||||
0 => 3,
|
||||
1 => 0,
|
||||
2 => 1,
|
||||
3 => 2,
|
||||
);
|
||||
$this->meta = ($faces[$player->getDirection()] & 0x03) | ((~$this->meta) & 0x04);
|
||||
$this->meta = ($faces[$player instanceof PocketMine\Player ? $player->getDirection() : 0] & 0x03) | ((~$this->meta) & 0x04);
|
||||
if(($this->meta & 0x04) === 0x04){
|
||||
$this->isFullBlock = true;
|
||||
} else{
|
||||
}else{
|
||||
$this->isFullBlock = false;
|
||||
}
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class Fire extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -34,7 +34,7 @@ class Fire extends Flowable{
|
||||
$this->hardness = 0;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array();
|
||||
}
|
||||
|
||||
@ -49,7 +49,7 @@ class Fire extends Flowable{
|
||||
$this->level->setBlock($this, new Air(), true, false, true);
|
||||
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
} elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
}elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
if($this->getSide(0)->getID() !== self::NETHERRACK){
|
||||
$this->level->setBlock($this, new Air(), true, false, true);
|
||||
|
||||
|
@ -21,10 +21,10 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\ServerAPI;
|
||||
use PocketMine;
|
||||
|
||||
class Generic extends Block{
|
||||
|
||||
@ -37,15 +37,15 @@ class Generic extends Block{
|
||||
parent::__construct($id, $meta, $name);
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
return $this->level->setBlock($this, $this, true, false, true);
|
||||
}
|
||||
|
||||
public function isBreakable(Item $item, PocketMine\Player $player){
|
||||
public function isBreakable(Item $item){
|
||||
return $this->breakable;
|
||||
}
|
||||
|
||||
public function onBreak(Item $item, PocketMine\Player $player){
|
||||
public function onBreak(Item $item){
|
||||
return $this->level->setBlock($this, new Air(), true, false, true);
|
||||
}
|
||||
|
||||
@ -73,7 +73,7 @@ class Generic extends Block{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
return $this->isActivable;
|
||||
}
|
||||
}
|
@ -30,7 +30,7 @@ class Glass extends Transparent{
|
||||
$this->hardness = 1.5;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array();
|
||||
}
|
||||
}
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class GlowingRedstoneOre extends Solid{
|
||||
public function __construct(){
|
||||
@ -42,10 +42,7 @@ class GlowingRedstoneOre extends Solid{
|
||||
}
|
||||
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.6;
|
||||
@ -56,12 +53,12 @@ class GlowingRedstoneOre extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 4){
|
||||
return array(
|
||||
array(Item::REDSTONE_DUST, 0, mt_rand(4, 5)),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ class Glowstone extends Transparent{
|
||||
$this->hardness = 1.5;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array(Item::GLOWSTONE_DUST, 0, mt_rand(2, 4)),
|
||||
);
|
||||
|
@ -30,10 +30,7 @@ class Gold extends Solid{
|
||||
$this->hardness = 30;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.6;
|
||||
@ -44,12 +41,12 @@ class Gold extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 4){
|
||||
return array(
|
||||
array(Item::GOLD_BLOCK, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -30,10 +30,7 @@ class GoldOre extends Solid{
|
||||
$this->hardness = 15;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.6;
|
||||
@ -44,12 +41,12 @@ class GoldOre extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 4){
|
||||
return array(
|
||||
array(Item::GOLD_ORE, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -21,10 +21,10 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Generator\Object\TallGrass;
|
||||
use PocketMine\Utils\Random;
|
||||
use PocketMine;
|
||||
|
||||
class Grass extends Solid{
|
||||
public function __construct(){
|
||||
@ -33,24 +33,20 @@ class Grass extends Solid{
|
||||
$this->hardness = 3;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array(Item::DIRT, 0, 1),
|
||||
);
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($item->getID() === Item::DYE and $item->getMetadata() === 0x0F){
|
||||
if(($player->gamemode & 0x01) === 0){
|
||||
$item->count--;
|
||||
}
|
||||
$item->count--;
|
||||
TallGrass::growGrass($this->level, $this, new Random(), 8, 2);
|
||||
|
||||
return true;
|
||||
} elseif($item->isHoe()){
|
||||
if(($player->gamemode & 0x01) === 0){
|
||||
$item->useOn($this);
|
||||
}
|
||||
}elseif($item->isHoe()){
|
||||
$item->useOn($this);
|
||||
$this->level->setBlock($this, new Farmland());
|
||||
|
||||
return true;
|
||||
|
@ -30,7 +30,7 @@ class Gravel extends Fallable{
|
||||
$this->hardness = 3;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if(mt_rand(1, 10) === 1){
|
||||
return array(
|
||||
array(Item::FLINT, 0, 1),
|
||||
|
@ -30,7 +30,7 @@ class HayBale extends Solid{
|
||||
$this->hardness = 10;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$faces = array(
|
||||
0 => 0,
|
||||
1 => 0,
|
||||
@ -46,7 +46,7 @@ class HayBale extends Solid{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, 0, 1),
|
||||
);
|
||||
|
@ -30,20 +30,13 @@ class Ice extends Transparent{
|
||||
$this->hardness = 2.5;
|
||||
}
|
||||
|
||||
public function onBreak(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0){
|
||||
$this->level->setBlock($this, new Water(), true, false, true);
|
||||
} else{
|
||||
$this->level->setBlock($this, new Air(), true, false, true);
|
||||
}
|
||||
public function onBreak(Item $item){
|
||||
$this->level->setBlock($this, new Water(), true, false, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.1;
|
||||
@ -60,7 +53,7 @@ class Ice extends Transparent{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array();
|
||||
}
|
||||
}
|
@ -30,10 +30,7 @@ class Iron extends Solid{
|
||||
$this->hardness = 30;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.95;
|
||||
@ -46,12 +43,12 @@ class Iron extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 3){
|
||||
return array(
|
||||
array(Item::IRON_BLOCK, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -31,10 +31,7 @@ class IronDoor extends Door{
|
||||
$this->hardness = 25;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.95;
|
||||
@ -51,12 +48,12 @@ class IronDoor extends Door{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array(Item::IRON_DOOR, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -30,10 +30,7 @@ class IronOre extends Solid{
|
||||
$this->hardness = 15;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.6;
|
||||
@ -46,12 +43,12 @@ class IronOre extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 3){
|
||||
return array(
|
||||
array(Item::IRON_ORE, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ class JungleWoodStairs extends Stair{
|
||||
parent::__construct(self::JUNGLE_WOOD_STAIRS, $meta, "Jungle Wood Stairs");
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, 0, 1),
|
||||
);
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class Ladder extends Transparent{
|
||||
public function __construct($meta = 0){
|
||||
@ -33,7 +33,7 @@ class Ladder extends Transparent{
|
||||
$this->hardness = 2;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
if($target->isTransparent === false){
|
||||
$faces = array(
|
||||
2 => 2,
|
||||
@ -64,7 +64,7 @@ class Ladder extends Transparent{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, 0, 1),
|
||||
);
|
||||
|
@ -30,10 +30,7 @@ class Lapis extends Solid{
|
||||
$this->hardness = 15;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.6;
|
||||
@ -46,12 +43,12 @@ class Lapis extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 3){
|
||||
return array(
|
||||
array(Item::LAPIS_BLOCK, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -30,10 +30,8 @@ class LapisOre extends Solid{
|
||||
$this->hardness = 15;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.6;
|
||||
@ -46,12 +44,12 @@ class LapisOre extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 3){
|
||||
return array(
|
||||
array(Item::DYE, 4, mt_rand(4, 8)),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -21,11 +21,11 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Level\Position;
|
||||
use PocketMine\ServerAPI;
|
||||
use PocketMine;
|
||||
|
||||
class Lava extends Liquid{
|
||||
public function __construct($meta = 0){
|
||||
@ -33,7 +33,7 @@ class Lava extends Liquid{
|
||||
$this->hardness = 0;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$ret = $this->level->setBlock($this, $this, true, false, true);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(clone $this, 40, Level::BLOCK_UPDATE_NORMAL);
|
||||
|
||||
@ -62,7 +62,7 @@ class Lava extends Liquid{
|
||||
$level = $this->meta & 0x07;
|
||||
if($level == 0x00){
|
||||
$this->level->setBlock($this, new Obsidian(), false, false, true);
|
||||
} else{
|
||||
}else{
|
||||
$this->level->setBlock($this, new Cobblestone(), false, false, true);
|
||||
}
|
||||
}
|
||||
@ -105,19 +105,19 @@ class Lava extends Liquid{
|
||||
if($down instanceof Air || $down instanceof Lava){
|
||||
$this->level->setBlock($down, new Lava(0x01), false, false, true);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($down, 0, 0, $this->level), 40, Level::BLOCK_UPDATE_NORMAL);
|
||||
} else{
|
||||
}else{
|
||||
for($side = 2; $side <= 5; ++$side){
|
||||
$b = $this->getSide($side);
|
||||
if($b instanceof Lava){
|
||||
|
||||
} elseif($b->isFlowable === true){
|
||||
}elseif($b->isFlowable === true){
|
||||
$this->level->setBlock($b, new Lava(min($level + 2, 7)), false, false, true);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(Position::fromObject($b, $this->level), 40, Level::BLOCK_UPDATE_NORMAL);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else{
|
||||
}else{
|
||||
//Extend Remove for Left Lavas
|
||||
for($side = 2; $side <= 5; ++$side){
|
||||
$sb = $this->getSide($side);
|
||||
|
@ -21,10 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\ServerAPI;
|
||||
use PocketMine;
|
||||
|
||||
class Leaves extends Transparent{
|
||||
const OAK = 0;
|
||||
@ -52,7 +51,7 @@ class Leaves extends Transparent{
|
||||
}
|
||||
if($pos->getID() === self::WOOD){
|
||||
return true;
|
||||
} elseif($pos->getID() === self::LEAVES and $distance < 3){
|
||||
}elseif($pos->getID() === self::LEAVES and $distance < 3){
|
||||
$visited[$index] = true;
|
||||
$down = $pos->getSide(0)->getID();
|
||||
if($down === Item::WOOD){
|
||||
@ -64,41 +63,41 @@ class Leaves extends Transparent{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else{ //No more loops
|
||||
}else{ //No more loops
|
||||
switch($fromSide){
|
||||
case 2:
|
||||
if($this->findLog($pos->getSide(2), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
} elseif($this->findLog($pos->getSide(4), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(4), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
} elseif($this->findLog($pos->getSide(5), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(5), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if($this->findLog($pos->getSide(3), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
} elseif($this->findLog($pos->getSide(4), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(4), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
} elseif($this->findLog($pos->getSide(5), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(5), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if($this->findLog($pos->getSide(2), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
} elseif($this->findLog($pos->getSide(3), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(3), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
} elseif($this->findLog($pos->getSide(4), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(4), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if($this->findLog($pos->getSide(2), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
} elseif($this->findLog($pos->getSide(3), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(3), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
} elseif($this->findLog($pos->getSide(5), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(5), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
@ -115,14 +114,14 @@ class Leaves extends Transparent{
|
||||
$this->meta |= 0x08;
|
||||
$this->level->setBlock($this, $this, false, false, true);
|
||||
}
|
||||
} elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
}elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
if(($this->meta & 0b00001100) === 0x08){
|
||||
$this->meta &= 0x03;
|
||||
$visited = array();
|
||||
$check = 0;
|
||||
if($this->findLog($this, $visited, 0, $check) === true){
|
||||
$this->level->setBlock($this, $this, false, false, true);
|
||||
} else{
|
||||
}else{
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
if(mt_rand(1, 20) === 1){ //Saplings
|
||||
//TODO
|
||||
@ -141,16 +140,16 @@ class Leaves extends Transparent{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$this->meta |= 0x04;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
$drops = array();
|
||||
if($item->isShears()){
|
||||
$drops[] = array(Item::LEAVES, $this->meta & 0x03, 1);
|
||||
} else{
|
||||
}else{
|
||||
if(mt_rand(1, 20) === 1){ //Saplings
|
||||
$drops[] = array(Item::SAPLING, $this->meta & 0x03, 1);
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ class LitPumpkin extends Solid{
|
||||
$this->hardness = 5;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$faces = array(
|
||||
0 => 4,
|
||||
1 => 2,
|
||||
|
@ -30,7 +30,7 @@ class Melon extends Transparent{
|
||||
$this->hardness = 5;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array(Item::MELON_SLICE, 0, mt_rand(3, 7)),
|
||||
);
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class MelonStem extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -32,7 +32,7 @@ class MelonStem extends Flowable{
|
||||
$this->hardness = 0;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() === self::FARMLAND){
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
@ -52,14 +52,14 @@ class MelonStem extends Flowable{
|
||||
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
}elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
if(mt_rand(0, 2) == 1){
|
||||
if($this->meta < 0x07){
|
||||
++$this->meta;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
} else{
|
||||
}else{
|
||||
for($side = 2; $side <= 5; ++$side){
|
||||
$b = $this->getSide($side);
|
||||
if($b->getID() === self::MELON_BLOCK){
|
||||
@ -80,7 +80,7 @@ class MelonStem extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($item->getID() === Item::DYE and $item->getMetadata() === 0x0F){ //Bonemeal
|
||||
$this->meta = 0x07;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
@ -94,7 +94,7 @@ class MelonStem extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array(Item::MELON_SEEDS, 0, mt_rand(0, 2)),
|
||||
);
|
||||
|
@ -30,10 +30,8 @@ class MossStone extends Solid{
|
||||
$this->hardness = 30;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.4;
|
||||
@ -50,12 +48,12 @@ class MossStone extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array(Item::MOSS_STONE, $this->meta, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -30,10 +30,8 @@ class NetherBrick extends Solid{
|
||||
$this->hardness = 30;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.4;
|
||||
@ -50,12 +48,12 @@ class NetherBrick extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array(Item::NETHER_BRICKS, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -30,10 +30,8 @@ class Netherrack extends Solid{
|
||||
$this->hardness = 2;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.1;
|
||||
@ -50,12 +48,12 @@ class Netherrack extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array(Item::NETHERRACK, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -30,23 +30,21 @@ class Obsidian extends Solid{
|
||||
$this->hardness = 6000;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
|
||||
if($item->isPickaxe() >= 5){
|
||||
return 9.4;
|
||||
} else{
|
||||
}else{
|
||||
return 250;
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 5){
|
||||
return array(
|
||||
array(Item::OBSIDIAN, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class Potato extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -32,7 +32,7 @@ class Potato extends Flowable{
|
||||
$this->hardness = 0;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() === self::FARMLAND){
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
@ -43,7 +43,7 @@ class Potato extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($item->getID() === Item::DYE and $item->getMetadata() === 0x0F){ //Bonemeal
|
||||
$this->meta = 0x07;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
@ -66,7 +66,7 @@ class Potato extends Flowable{
|
||||
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
}elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
if(mt_rand(0, 2) == 1){
|
||||
if($this->meta < 0x07){
|
||||
++$this->meta;
|
||||
@ -74,7 +74,7 @@ class Potato extends Flowable{
|
||||
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
} else{
|
||||
}else{
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
}
|
||||
@ -82,11 +82,11 @@ class Potato extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
$drops = array();
|
||||
if($this->meta >= 0x07){
|
||||
$drops[] = array(Item::POTATO, 0, mt_rand(1, 4));
|
||||
} else{
|
||||
}else{
|
||||
$drops[] = array(Item::POTATO, 0, 1);
|
||||
}
|
||||
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class PumpkinStem extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -32,7 +32,7 @@ class PumpkinStem extends Flowable{
|
||||
$this->hardness = 0;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() === self::FARMLAND){
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
@ -52,14 +52,14 @@ class PumpkinStem extends Flowable{
|
||||
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
}elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
if(mt_rand(0, 2) == 1){
|
||||
if($this->meta < 0x07){
|
||||
++$this->meta;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
} else{
|
||||
}else{
|
||||
for($side = 2; $side <= 5; ++$side){
|
||||
$b = $this->getSide($side);
|
||||
if($b->getID() === self::PUMPKIN){
|
||||
@ -80,7 +80,7 @@ class PumpkinStem extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($item->getID() === Item::DYE and $item->getMetadata() === 0x0F){ //Bonemeal
|
||||
$this->meta = 0x07;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
@ -94,7 +94,7 @@ class PumpkinStem extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array(Item::PUMPKIN_SEEDS, 0, mt_rand(0, 2)),
|
||||
);
|
||||
|
@ -36,10 +36,8 @@ class Quartz extends Solid{
|
||||
$this->name = $names[$this->meta & 0x03];
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.15;
|
||||
@ -56,12 +54,12 @@ class Quartz extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array(Item::QUARTZ_BLOCK, $this->meta & 0x03, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class RedMushroom extends Flowable{
|
||||
public function __construct(){
|
||||
@ -45,7 +45,7 @@ class RedMushroom extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->isTransparent === false){
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class RedstoneOre extends Solid{
|
||||
public function __construct(){
|
||||
@ -41,12 +41,12 @@ class RedstoneOre extends Solid{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 2){
|
||||
return array(
|
||||
array(Item::REDSTONE_DUST, 0, mt_rand(4, 5)),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -36,10 +36,8 @@ class Sandstone extends Solid{
|
||||
$this->hardness = 4;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.15;
|
||||
@ -56,12 +54,12 @@ class Sandstone extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array(Item::SANDSTONE, $this->meta & 0x03, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -21,11 +21,11 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Generator\Object\Tree;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Utils\Random;
|
||||
use PocketMine;
|
||||
|
||||
class Sapling extends Flowable{
|
||||
const OAK = 0;
|
||||
@ -47,7 +47,7 @@ class Sapling extends Flowable{
|
||||
$this->hardness = 0;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() === self::GRASS or $down->getID() === self::DIRT or $down->getID() === self::FARMLAND){
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
@ -58,7 +58,7 @@ class Sapling extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($item->getID() === Item::DYE and $item->getMetadata() === 0x0F){ //Bonemeal
|
||||
Tree::growTree($this->level, $this, new Random(), $this->meta & 0x03);
|
||||
if(($player->gamemode & 0x01) === 0){
|
||||
@ -80,17 +80,17 @@ class Sapling extends Flowable{
|
||||
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === Level::BLOCK_UPDATE_RANDOM){ //Growth
|
||||
}elseif($type === Level::BLOCK_UPDATE_RANDOM){ //Growth
|
||||
if(mt_rand(1, 7) === 1){
|
||||
if(($this->meta & 0x08) === 0x08){
|
||||
Tree::growTree($this->level, $this, new Random(), $this->meta & 0x03);
|
||||
} else{
|
||||
}else{
|
||||
$this->meta |= 0x08;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
} else{
|
||||
}else{
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
}
|
||||
@ -98,7 +98,7 @@ class Sapling extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, $this->meta & 0x03, 1),
|
||||
);
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class SignPost extends Transparent{
|
||||
public function __construct($meta = 0){
|
||||
@ -33,7 +33,7 @@ class SignPost extends Transparent{
|
||||
$this->hardness = 5;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
if($face !== 0){
|
||||
$faces = array(
|
||||
2 => 2,
|
||||
@ -46,7 +46,7 @@ class SignPost extends Transparent{
|
||||
$this->level->setBlock($block, Block::get(Item::SIGN_POST, $this->meta), true, false, true);
|
||||
|
||||
return true;
|
||||
} else{
|
||||
}else{
|
||||
$this->meta = $faces[$face];
|
||||
$this->level->setBlock($block, Block::get(Item::WALL_SIGN, $this->meta), true, false, true);
|
||||
|
||||
@ -71,13 +71,13 @@ class SignPost extends Transparent{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function onBreak(Item $item, PocketMine\Player $player){
|
||||
public function onBreak(Item $item){
|
||||
$this->level->setBlock($this, new Air(), true, true, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array(Item::SIGN, 0, 1),
|
||||
);
|
||||
|
@ -40,37 +40,37 @@ class Slab extends Transparent{
|
||||
$this->name = (($this->meta & 0x08) === 0x08 ? "Upper " : "") . $names[$this->meta & 0x07] . " Slab";
|
||||
if(($this->meta & 0x08) === 0x08){
|
||||
$this->isFullBlock = true;
|
||||
} else{
|
||||
}else{
|
||||
$this->isFullBlock = false;
|
||||
}
|
||||
$this->hardness = 30;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$this->meta &= 0x07;
|
||||
if($face === 0){
|
||||
if($target->getID() === self::SLAB and ($target->getMetadata() & 0x08) === 0x08 and ($target->getMetadata() & 0x07) === ($this->meta & 0x07)){
|
||||
$this->level->setBlock($target, Block::get(Item::DOUBLE_SLAB, $this->meta), true, false, true);
|
||||
|
||||
return true;
|
||||
} elseif($block->getID() === self::SLAB and ($block->getMetadata() & 0x07) === ($this->meta & 0x07)){
|
||||
}elseif($block->getID() === self::SLAB and ($block->getMetadata() & 0x07) === ($this->meta & 0x07)){
|
||||
$this->level->setBlock($block, Block::get(Item::DOUBLE_SLAB, $this->meta), true, false, true);
|
||||
|
||||
return true;
|
||||
} else{
|
||||
}else{
|
||||
$this->meta |= 0x08;
|
||||
}
|
||||
} elseif($face === 1){
|
||||
}elseif($face === 1){
|
||||
if($target->getID() === self::SLAB and ($target->getMetadata() & 0x08) === 0 and ($target->getMetadata() & 0x07) === ($this->meta & 0x07)){
|
||||
$this->level->setBlock($target, Block::get(Item::DOUBLE_SLAB, $this->meta), true, false, true);
|
||||
|
||||
return true;
|
||||
} elseif($block->getID() === self::SLAB and ($block->getMetadata() & 0x07) === ($this->meta & 0x07)){
|
||||
}elseif($block->getID() === self::SLAB and ($block->getMetadata() & 0x07) === ($this->meta & 0x07)){
|
||||
$this->level->setBlock($block, Block::get(Item::DOUBLE_SLAB, $this->meta), true, false, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
} elseif(!$player->inBlock($block)){
|
||||
}elseif(!($player instanceof PocketMine\Player) or !$player->inBlock($block)){
|
||||
if($block->getID() === self::SLAB){
|
||||
if(($block->getMetadata() & 0x07) === ($this->meta & 0x07)){
|
||||
$this->level->setBlock($block, Block::get(Item::DOUBLE_SLAB, $this->meta), true, false, true);
|
||||
@ -79,12 +79,12 @@ class Slab extends Transparent{
|
||||
}
|
||||
|
||||
return false;
|
||||
} else{
|
||||
}else{
|
||||
if($fy > 0.5){
|
||||
$this->meta |= 0x08;
|
||||
}
|
||||
}
|
||||
} else{
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
if($block->getID() === self::SLAB and ($target->getMetadata() & 0x07) !== ($this->meta & 0x07)){
|
||||
@ -95,10 +95,8 @@ class Slab extends Transparent{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.4;
|
||||
@ -115,12 +113,12 @@ class Slab extends Transparent{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array($this->id, $this->meta & 0x07, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class SnowLayer extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -34,7 +34,7 @@ class SnowLayer extends Flowable{
|
||||
$this->hardness = 0.5;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down instanceof Solid){
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
@ -57,7 +57,7 @@ class SnowLayer extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isShovel() !== false){
|
||||
return array(
|
||||
array(Item::SNOWBALL, 0, 1),
|
||||
|
@ -29,7 +29,7 @@ class SpruceWoodStairs extends Stair{
|
||||
parent::__construct(self::SPRUCE_WOOD_STAIRS, $meta, "Spruce Wood Stairs");
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, 0, 1),
|
||||
);
|
||||
|
@ -30,13 +30,13 @@ class Stair extends Transparent{
|
||||
parent::__construct($id, $meta, $name);
|
||||
if(($this->meta & 0x04) === 0x04){
|
||||
$this->isFullBlock = true;
|
||||
} else{
|
||||
}else{
|
||||
$this->isFullBlock = false;
|
||||
}
|
||||
$this->hardness = 30;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$faces = array(
|
||||
0 => 0,
|
||||
1 => 2,
|
||||
@ -52,12 +52,12 @@ class Stair extends Transparent{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array($this->id, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -30,10 +30,8 @@ class Stone extends Solid{
|
||||
$this->hardness = 30;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.4;
|
||||
@ -50,12 +48,12 @@ class Stone extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array(Item::COBBLESTONE, 0, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -37,10 +37,8 @@ class StoneBricks extends Solid{
|
||||
$this->hardness = 30;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.4;
|
||||
@ -57,12 +55,12 @@ class StoneBricks extends Solid{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
if($item->isPickaxe() >= 1){
|
||||
return array(
|
||||
array(Item::STONE_BRICKS, $this->meta & 0x03, 1),
|
||||
);
|
||||
} else{
|
||||
}else{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
@ -30,13 +30,13 @@ class Stonecutter extends Solid{
|
||||
$this->isActivable = true;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
$player->toCraft[-1] = 2;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, 0, 1),
|
||||
);
|
||||
|
@ -21,10 +21,10 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Math\Vector3 as Vector3;
|
||||
use PocketMine;
|
||||
|
||||
class Sugarcane extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -32,13 +32,13 @@ class Sugarcane extends Flowable{
|
||||
$this->hardness = 0;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array(Item::SUGARCANE, 0, 1),
|
||||
);
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($item->getID() === Item::DYE and $item->getMetadata() === 0x0F){ //Bonemeal
|
||||
if($this->getSide(0)->getID() !== self::SUGARCANE_BLOCK){
|
||||
for($y = 1; $y < 3; ++$y){
|
||||
@ -71,7 +71,7 @@ class Sugarcane extends Flowable{
|
||||
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
}elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
if($this->getSide(0)->getID() !== self::SUGARCANE_BLOCK){
|
||||
if($this->meta === 0x0F){
|
||||
for($y = 1; $y < 3; ++$y){
|
||||
@ -83,7 +83,7 @@ class Sugarcane extends Flowable{
|
||||
}
|
||||
$this->meta = 0;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
} else{
|
||||
}else{
|
||||
++$this->meta;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
}
|
||||
@ -95,13 +95,13 @@ class Sugarcane extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() === self::SUGARCANE_BLOCK){
|
||||
$this->level->setBlock($block, new Sugarcane(), true, false, true);
|
||||
|
||||
return true;
|
||||
} elseif($down->getID() === self::GRASS or $down->getID() === self::DIRT or $down->getID() === self::SAND){
|
||||
}elseif($down->getID() === self::GRASS or $down->getID() === self::DIRT or $down->getID() === self::SAND){
|
||||
$block0 = $down->getSide(2);
|
||||
$block1 = $down->getSide(3);
|
||||
$block2 = $down->getSide(4);
|
||||
|
@ -31,7 +31,7 @@ class TNT extends Solid{
|
||||
$this->isActivable = true;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($item->getID() === Item::FLINT_STEEL){
|
||||
if(($player->gamemode & 0x01) === 0){
|
||||
$item->useOn($this);
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class TallGrass extends Flowable{
|
||||
public function __construct($meta = 1){
|
||||
@ -50,7 +50,7 @@ class TallGrass extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
$drops = array();
|
||||
$possibleDrops = array(
|
||||
array(Item::WHEAT_SEEDS, 0, 1),
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class Torch extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -56,7 +56,7 @@ class Torch extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
if($target->isTransparent === false and $face !== 0){
|
||||
$faces = array(
|
||||
1 => 5,
|
||||
@ -69,7 +69,7 @@ class Torch extends Flowable{
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
|
||||
return true;
|
||||
} elseif($this->getSide(0)->isTransparent === false or $this->getSide(0)->getID() === self::FENCE){
|
||||
}elseif($this->getSide(0)->isTransparent === false or $this->getSide(0)->getID() === self::FENCE){
|
||||
$this->meta = 0;
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
|
||||
@ -79,7 +79,7 @@ class Torch extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, 0, 1),
|
||||
);
|
||||
|
@ -30,13 +30,13 @@ class Trapdoor extends Transparent{
|
||||
$this->isActivable = true;
|
||||
if(($this->meta & 0x04) === 0x04){
|
||||
$this->isFullBlock = false;
|
||||
} else{
|
||||
}else{
|
||||
$this->isFullBlock = true;
|
||||
}
|
||||
$this->hardness = 15;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
if(($target->isTransparent === false or $target->getID() === self::SLAB) and $face !== 0 and $face !== 1){
|
||||
$faces = array(
|
||||
2 => 0,
|
||||
@ -56,13 +56,13 @@ class Trapdoor extends Transparent{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, 0, 1),
|
||||
);
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
$this->meta ^= 0x04;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
|
||||
|
@ -22,10 +22,10 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\ServerAPI;
|
||||
use PocketMine;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Level\Position;
|
||||
use PocketMine\ServerAPI;
|
||||
|
||||
class Water extends Liquid{
|
||||
public function __construct($meta = 0){
|
||||
@ -33,7 +33,7 @@ class Water extends Liquid{
|
||||
$this->hardness = 500;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$ret = $this->level->setBlock($this, $this, true, false, true);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(clone $this, 10, Level::BLOCK_UPDATE_NORMAL);
|
||||
|
||||
@ -65,7 +65,7 @@ class Water extends Liquid{
|
||||
$level = $b->meta & 0x07;
|
||||
if($level == 0x00){
|
||||
$this->level->setBlock($b, new Obsidian(), false, false, true);
|
||||
} else{
|
||||
}else{
|
||||
$this->level->setBlock($b, new Cobblestone(), false, false, true);
|
||||
}
|
||||
|
||||
@ -111,21 +111,21 @@ class Water extends Liquid{
|
||||
if($down instanceof Air || $down instanceof Water){
|
||||
$this->level->setBlock($down, new Water(0x01), false, false, true);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(Position::fromObject($down, $this->level), 10, Level::BLOCK_UPDATE_NORMAL);
|
||||
} else{
|
||||
}else{
|
||||
for($side = 2; $side <= 5; ++$side){
|
||||
$b = $this->getSide($side);
|
||||
if($b instanceof Water){
|
||||
if($this->getSourceCount() >= 2 && $level != 0x00){
|
||||
$this->level->setBlock($this, new Water(0), false, false, true);
|
||||
}
|
||||
} elseif($b->isFlowable === true){
|
||||
}elseif($b->isFlowable === true){
|
||||
$this->level->setBlock($b, new Water($level + 1), false, false, true);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(Position::fromObject($b, $this->level), 10, Level::BLOCK_UPDATE_NORMAL);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else{
|
||||
}else{
|
||||
//Extend Remove for Left Waters
|
||||
for($side = 2; $side <= 5; ++$side){
|
||||
$sb = $this->getSide($side);
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
|
||||
class Wheat extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -32,7 +32,7 @@ class Wheat extends Flowable{
|
||||
$this->hardness = 0;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() === self::FARMLAND){
|
||||
$this->level->setBlock($block, $this, true, false, true);
|
||||
@ -43,7 +43,7 @@ class Wheat extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
if($item->getID() === Item::DYE and $item->getMetadata() === 0x0F){ //Bonemeal
|
||||
$this->meta = 0x07;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
@ -66,7 +66,7 @@ class Wheat extends Flowable{
|
||||
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
}elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
if(mt_rand(0, 2) == 1){
|
||||
if($this->meta < 0x07){
|
||||
++$this->meta;
|
||||
@ -78,12 +78,12 @@ class Wheat extends Flowable{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
$drops = array();
|
||||
if($this->meta >= 0x07){
|
||||
$drops[] = array(Item::WHEAT, 0, 1);
|
||||
$drops[] = array(Item::WHEAT_SEEDS, 0, mt_rand(0, 3));
|
||||
} else{
|
||||
}else{
|
||||
$drops[] = array(Item::WHEAT_SEEDS, 0, 1);
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,7 @@ class Wood extends Solid{
|
||||
$this->hardness = 10;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$faces = array(
|
||||
0 => 0,
|
||||
1 => 0,
|
||||
@ -58,7 +58,7 @@ class Wood extends Solid{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, $this->meta & 0x03, 1),
|
||||
);
|
||||
|
@ -31,7 +31,7 @@ class WoodDoor extends Door{
|
||||
$this->hardness = 15;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array(Item::WOODEN_DOOR, 0, 1),
|
||||
);
|
||||
|
@ -36,37 +36,37 @@ class WoodSlab extends Transparent{
|
||||
$this->name = (($this->meta & 0x08) === 0x08 ? "Upper " : "") . $names[$this->meta & 0x07] . " Wooden Slab";
|
||||
if(($this->meta & 0x08) === 0x08){
|
||||
$this->isFullBlock = true;
|
||||
} else{
|
||||
}else{
|
||||
$this->isFullBlock = false;
|
||||
}
|
||||
$this->hardness = 15;
|
||||
}
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, PocketMine\Player $player = null){
|
||||
$this->meta &= 0x07;
|
||||
if($face === 0){
|
||||
if($target->getID() === self::WOOD_SLAB and ($target->getMetadata() & 0x08) === 0x08 and ($target->getMetadata() & 0x07) === ($this->meta & 0x07)){
|
||||
$this->level->setBlock($target, Block::get(Item::DOUBLE_WOOD_SLAB, $this->meta), true, false, true);
|
||||
|
||||
return true;
|
||||
} elseif($block->getID() === self::WOOD_SLAB and ($block->getMetadata() & 0x07) === ($this->meta & 0x07)){
|
||||
}elseif($block->getID() === self::WOOD_SLAB and ($block->getMetadata() & 0x07) === ($this->meta & 0x07)){
|
||||
$this->level->setBlock($block, Block::get(Item::DOUBLE_WOOD_SLAB, $this->meta), true, false, true);
|
||||
|
||||
return true;
|
||||
} else{
|
||||
}else{
|
||||
$this->meta |= 0x08;
|
||||
}
|
||||
} elseif($face === 1){
|
||||
}elseif($face === 1){
|
||||
if($target->getID() === self::WOOD_SLAB and ($target->getMetadata() & 0x08) === 0 and ($target->getMetadata() & 0x07) === ($this->meta & 0x07)){
|
||||
$this->level->setBlock($target, Block::get(Item::DOUBLE_WOOD_SLAB, $this->meta), true, false, true);
|
||||
|
||||
return true;
|
||||
} elseif($block->getID() === self::WOOD_SLAB and ($block->getMetadata() & 0x07) === ($this->meta & 0x07)){
|
||||
}elseif($block->getID() === self::WOOD_SLAB and ($block->getMetadata() & 0x07) === ($this->meta & 0x07)){
|
||||
$this->level->setBlock($block, Block::get(Item::DOUBLE_WOOD_SLAB, $this->meta), true, false, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
} elseif(!$player->inBlock($block)){
|
||||
}elseif(!($player instanceof PocketMine\Player) or !$player->inBlock($block)){
|
||||
if($block->getID() === self::WOOD_SLAB){
|
||||
if(($block->getMetadata() & 0x07) === ($this->meta & 0x07)){
|
||||
$this->level->setBlock($block, Block::get(Item::DOUBLE_WOOD_SLAB, $this->meta), true, false, true);
|
||||
@ -75,12 +75,12 @@ class WoodSlab extends Transparent{
|
||||
}
|
||||
|
||||
return false;
|
||||
} else{
|
||||
}else{
|
||||
if($fy > 0.5){
|
||||
$this->meta |= 0x08;
|
||||
}
|
||||
}
|
||||
} else{
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
if($block->getID() === self::WOOD_SLAB and ($target->getMetadata() & 0x07) !== ($this->meta & 0x07)){
|
||||
@ -91,10 +91,8 @@ class WoodSlab extends Transparent{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
|
||||
switch($item->isAxe()){
|
||||
case 5:
|
||||
return 0.4;
|
||||
@ -111,7 +109,7 @@ class WoodSlab extends Transparent{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, $this->meta & 0x07, 1),
|
||||
);
|
||||
|
@ -29,10 +29,8 @@ class WoodStairs extends Stair{
|
||||
parent::__construct(self::WOOD_STAIRS, $meta, "Wood Stairs");
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item, PocketMine\Player $player){
|
||||
if(($player->gamemode & 0x01) === 0x01){
|
||||
return 0.20;
|
||||
}
|
||||
public function getBreakTime(Item $item){
|
||||
|
||||
switch($item->isAxe()){
|
||||
case 5:
|
||||
return 0.4;
|
||||
@ -49,7 +47,7 @@ class WoodStairs extends Stair{
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, 0, 1),
|
||||
);
|
||||
|
@ -31,13 +31,13 @@ class Workbench extends Solid{
|
||||
$this->hardness = 15;
|
||||
}
|
||||
|
||||
public function onActivate(Item $item, PocketMine\Player $player){
|
||||
public function onActivate(Item $item, PocketMine\Player $player = null){
|
||||
$player->toCraft[-1] = 1;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item, PocketMine\Player $player){
|
||||
public function getDrops(Item $item){
|
||||
return array(
|
||||
array($this->id, 0, 1),
|
||||
);
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
namespace PocketMine\Entity;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Event\Entity\EntityArmorChangeEvent;
|
||||
use PocketMine\Event\Entity\EntityInventoryChangeEvent;
|
||||
use PocketMine\Event\Event;
|
||||
@ -29,14 +30,13 @@ use PocketMine\Item\Item;
|
||||
use PocketMine\NBT\Tag\Byte;
|
||||
use PocketMine\NBT\Tag\Compound;
|
||||
use PocketMine\NBT\Tag\Short;
|
||||
use PocketMine\Network;
|
||||
use PocketMine\Network\Protocol\AddPlayerPacket;
|
||||
use PocketMine\Network\Protocol\ContainerSetContentPacket;
|
||||
use PocketMine\Network\Protocol\PlayerEquipmentPacket;
|
||||
use PocketMine\Network\Protocol\RemovePlayerPacket;
|
||||
use PocketMine\Network\Protocol\SetEntityMotionPacket;
|
||||
use PocketMine\Network;
|
||||
use PocketMine\Player;
|
||||
use PocketMine;
|
||||
|
||||
class Human extends Creature implements ProjectileSource, InventorySource{
|
||||
|
||||
@ -61,9 +61,9 @@ class Human extends Creature implements ProjectileSource, InventorySource{
|
||||
foreach($this->namedtag->Inventory as $item){
|
||||
if($item["Slot"] >= 0 and $item["Slot"] < 9){ //Hotbar
|
||||
$this->hotbar[$item["Slot"]] = isset($item["TrueSlot"]) ? $item["TrueSlot"] : -1;
|
||||
} elseif($item["Slot"] >= 100 and $item["Slot"] < 104){ //Armor
|
||||
}elseif($item["Slot"] >= 100 and $item["Slot"] < 104){ //Armor
|
||||
$this->armor[$item["Slot"] - 100] = Item::get($item["id"], $item["Damage"], $item["Count"]);
|
||||
} else{
|
||||
}else{
|
||||
$this->inventory[$item["Slot"] - 9] = Item::get($item["id"], $item["Damage"], $item["Count"]);
|
||||
}
|
||||
}
|
||||
@ -75,6 +75,8 @@ class Human extends Creature implements ProjectileSource, InventorySource{
|
||||
|
||||
public function saveNBT(){
|
||||
parent::saveNBT();
|
||||
$this->namedtag->Inventory = new PocketMine\NBT\Tag\Enum("Inventory", array());
|
||||
$this->namedtag->Inventory->setTagType(PocketMine\NBT\NBT::TAG_Compound);
|
||||
for($slot = 0; $slot < 9; ++$slot){
|
||||
if(isset($this->hotbar[$slot]) and $this->hotbar[$slot] !== -1){
|
||||
$item = $this->getSlot($this->hotbar[$slot]);
|
||||
@ -93,15 +95,16 @@ class Human extends Creature implements ProjectileSource, InventorySource{
|
||||
new Byte("Count", 0),
|
||||
new Short("Damage", 0),
|
||||
new Byte("Slot", $slot),
|
||||
new Byte("Slot", -1),
|
||||
new Byte("TrueSlot", -1),
|
||||
new Short("id", 0),
|
||||
));
|
||||
}
|
||||
|
||||
//Normal inventory
|
||||
$slotCount = (($this instanceof Player and ($this->gamemode & 0x01) === 1) ? Player::CREATIVE_SLOTS : Player::SURVIVAL_SLOTS) + 9;
|
||||
$slotCount = Player::SURVIVAL_SLOTS + 9;
|
||||
//$slotCount = (($this instanceof Player and ($this->gamemode & 0x01) === 1) ? Player::CREATIVE_SLOTS : Player::SURVIVAL_SLOTS) + 9;
|
||||
for($slot = 9; $slot < $slotCount; ++$slot){
|
||||
$item = $this->getSlot($slot);
|
||||
$item = $this->getSlot($slot - 9);
|
||||
$this->namedtag->Inventory[$slot] = new Compound(false, array(
|
||||
new Byte("Count", $item->getCount()),
|
||||
new Short("Damage", $item->getMetadata()),
|
||||
@ -216,7 +219,7 @@ class Human extends Creature implements ProjectileSource, InventorySource{
|
||||
return $this->armor[$slot];
|
||||
}
|
||||
|
||||
public function sendArmor(Player $player = null){
|
||||
public function sendArmor($player = null){
|
||||
$slots = array();
|
||||
for($i = 0; $i < 4; ++$i){
|
||||
if(isset($this->armor[$i]) and ($this->armor[$i] instanceof Item) and $this->armor[$i]->getID() > Item::AIR){
|
||||
|
74
src/PocketMine/event/block/BlockBreakEvent.php
Normal file
74
src/PocketMine/event/block/BlockBreakEvent.php
Normal file
@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace PocketMine\Event\Block;
|
||||
|
||||
use PocketMine\Block\Block;
|
||||
use PocketMine\Event\CancellableEvent;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Player;
|
||||
use PocketMine;
|
||||
|
||||
class BlockBreakEvent extends BlockEvent implements CancellableEvent{
|
||||
public static $handlers;
|
||||
public static $handlerPriority;
|
||||
|
||||
/**
|
||||
* @var \PocketMine\Player
|
||||
*/
|
||||
protected $player;
|
||||
|
||||
/**
|
||||
* @var \PocketMine\Item\Item
|
||||
*/
|
||||
protected $item;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $instaBreak = false;
|
||||
|
||||
public function __construct(Player $player, Block $block, Item $item, $instaBreak = false){
|
||||
$this->block = $block;
|
||||
$this->item = $item;
|
||||
$this->player = $player;
|
||||
$this->instaBreak = (bool) $instaBreak;
|
||||
}
|
||||
|
||||
public function getPlayer(){
|
||||
return $this->player;
|
||||
}
|
||||
|
||||
public function getItem(){
|
||||
return $item;
|
||||
}
|
||||
|
||||
public function getInstaBreak(){
|
||||
return $this->instaBreak;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param boolean $instaBreak
|
||||
*/
|
||||
public function setInstaBreak($instaBreak){
|
||||
$this->instaBreak = (bool) $instaBreak;
|
||||
}
|
||||
}
|
39
src/PocketMine/event/block/BlockEvent.php
Normal file
39
src/PocketMine/event/block/BlockEvent.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Block related events
|
||||
*/
|
||||
namespace PocketMine\Event\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Event\Event;
|
||||
|
||||
abstract class BlockEvent extends Event{
|
||||
/**
|
||||
* @var PocketMine\Block\Block
|
||||
*/
|
||||
protected $block;
|
||||
|
||||
public function getBlock(){
|
||||
return $this->block;
|
||||
}
|
||||
}
|
79
src/PocketMine/event/block/BlockPlaceEvent.php
Normal file
79
src/PocketMine/event/block/BlockPlaceEvent.php
Normal file
@ -0,0 +1,79 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace PocketMine\Event\Block;
|
||||
|
||||
use PocketMine\Block\Block;
|
||||
use PocketMine\Event\CancellableEvent;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Player;
|
||||
use PocketMine;
|
||||
|
||||
/**
|
||||
* Called when a player places a block
|
||||
*/
|
||||
class BlockPlaceEvent extends BlockEvent implements CancellableEvent{
|
||||
public static $handlers;
|
||||
public static $handlerPriority;
|
||||
|
||||
/**
|
||||
* @var \PocketMine\Player
|
||||
*/
|
||||
protected $player;
|
||||
|
||||
/**
|
||||
* @var \PocketMine\Item\Item
|
||||
*/
|
||||
protected $item;
|
||||
|
||||
|
||||
protected $blockReplace;
|
||||
protected $blockAgainst;
|
||||
|
||||
public function __construct(Player $player, Block $blockPlace, Block $blockReplace, Block $blockAgainst, Item $item){
|
||||
$this->block = $blockPlace;
|
||||
$this->blockReplace = $blockReplace;
|
||||
$this->blockAgainst = $blockAgainst;
|
||||
$this->item = $item;
|
||||
$this->player = $player;
|
||||
}
|
||||
|
||||
public function getPlayer(){
|
||||
return $this->player;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the item in hand
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getItem(){
|
||||
return $item;
|
||||
}
|
||||
|
||||
public function getBlockReplaced(){
|
||||
return $this->blockReplace;
|
||||
}
|
||||
|
||||
public function getBlockAgainst(){
|
||||
return $this->blockAgainst;
|
||||
}
|
||||
}
|
70
src/PocketMine/event/player/PlayerInteractEvent.php
Normal file
70
src/PocketMine/event/player/PlayerInteractEvent.php
Normal file
@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace PocketMine\Event\Player;
|
||||
|
||||
use PocketMine\Block\Block;
|
||||
use PocketMine\Event\CancellableEvent;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Player;
|
||||
use PocketMine;
|
||||
|
||||
/**
|
||||
* Called when a player interacts or touches a block (including air?)
|
||||
*/
|
||||
class PlayerInteractEvent extends PlayerEvent implements CancellableEvent{
|
||||
public static $handlers;
|
||||
public static $handlerPriority;
|
||||
|
||||
/**
|
||||
* @var \PocketMine\Block\Block;
|
||||
*/
|
||||
protected $blockTouched;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
protected $blockFace;
|
||||
|
||||
/**
|
||||
* @var \PocketMine\Item\Item
|
||||
*/
|
||||
protected $item;
|
||||
|
||||
public function __construct(Player $player, Item $item, Block $block, $face){
|
||||
$this->blockTouched = $block;
|
||||
$this->player = $player;
|
||||
$this->item = $item;
|
||||
$this->blockFace = (int) $face;
|
||||
}
|
||||
|
||||
public function getItem(){
|
||||
return $item;
|
||||
}
|
||||
|
||||
public function getBlock(){
|
||||
return $this->blockTouched;
|
||||
}
|
||||
|
||||
public function getFace(){
|
||||
return $this->blockFace;
|
||||
}
|
||||
}
|
@ -21,13 +21,13 @@
|
||||
|
||||
namespace PocketMine\Event\Player;
|
||||
|
||||
use PocketMine\Event;
|
||||
use PocketMine\Event\CancellableEvent;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine;
|
||||
use PocketMine\Event;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Player;
|
||||
|
||||
class PlayerEquipmentChangeEvent extends PlayerEvent implements CancellableEvent{
|
||||
class PlayerItemHeldEvent extends PlayerEvent implements CancellableEvent{
|
||||
public static $handlers;
|
||||
public static $handlerPriority;
|
||||
|
@ -22,12 +22,12 @@
|
||||
namespace PocketMine\Item;
|
||||
|
||||
use PocketMine\Block\Air;
|
||||
use PocketMine;
|
||||
use PocketMine\Block\Block;
|
||||
use PocketMine\Block\Lava;
|
||||
use PocketMine\Block\Liquid;
|
||||
use PocketMine\Block\Water;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine;
|
||||
use PocketMine\Player;
|
||||
|
||||
class Bucket extends Item{
|
||||
@ -47,19 +47,19 @@ class Bucket extends Item{
|
||||
|
||||
return true;
|
||||
}
|
||||
} elseif($this->meta === Item::WATER){
|
||||
}elseif($this->meta === Item::WATER){
|
||||
//Support Make Non-Support Water to Support Water
|
||||
if($block->getID() === self::AIR || ($block instanceof Water && ($block->getMetadata() & 0x07) != 0x00)){
|
||||
$water = new Water();
|
||||
$level->setBlock($block, $water, true, false, true);
|
||||
$water->place(clone $this, $player, $block, $target, $face, $fx, $fy, $fz);
|
||||
$water->place(clone $this, $block, $target, $face, $fx, $fy, $fz, $player);
|
||||
if(($player->gamemode & 0x01) === 0){
|
||||
$this->meta = 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
} elseif($this->meta === Item::LAVA){
|
||||
}elseif($this->meta === Item::LAVA){
|
||||
if($block->getID() === self::AIR){
|
||||
$level->setBlock($block, new Lava(), true, false, true);
|
||||
if(($player->gamemode & 0x01) === 0){
|
||||
|
@ -24,16 +24,21 @@
|
||||
*/
|
||||
namespace PocketMine\Level;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Block\Air;
|
||||
use PocketMine\Block\Block;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Generator\Flat;
|
||||
use PocketMine\Level\Generator\Generator;
|
||||
use PocketMine\Level\Generator\Normal;
|
||||
use PocketMine\Math\Vector3 as Vector3;
|
||||
use PocketMine\NBT\NBT;
|
||||
use PocketMine\NBT\Tag\Byte;
|
||||
use PocketMine\NBT\Tag\Compound;
|
||||
use PocketMine\NBT\Tag\Enum;
|
||||
use PocketMine\NBT\Tag\Int;
|
||||
use PocketMine\NBT\Tag\Short;
|
||||
use PocketMine\NBT\Tag\String;
|
||||
use PocketMine\Network\Protocol\SetTimePacket;
|
||||
use PocketMine\Network\Protocol\UpdateBlockPacket;
|
||||
use PocketMine\Player;
|
||||
@ -47,10 +52,6 @@ use PocketMine\Utils\Cache;
|
||||
use PocketMine\Utils\Config;
|
||||
use PocketMine\Utils\Random;
|
||||
use PocketMine\Utils\Utils;
|
||||
use PocketMine;
|
||||
use PocketMine\NBT\Tag\Byte;
|
||||
use PocketMine\NBT\Tag\String;
|
||||
use PocketMine\NBT\Tag\Int;
|
||||
|
||||
/**
|
||||
* Class Level
|
||||
@ -682,6 +683,141 @@ class Level{
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to break a block using a item, including Player time checks if available
|
||||
*
|
||||
* @param Vector3 $vector
|
||||
* @param Item &$item (if null, can break anything)
|
||||
* @param Player $player
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function useBreakOn(Vector3 $vector, Item &$item = null, Player $player = null){
|
||||
$target = $this->getBlock($vector);
|
||||
|
||||
if($player instanceof Player){
|
||||
$lastTime = $player->lastBreak - $player->getLag() / 1000;
|
||||
if(($player->getGamemode() & 0x01) === 1 and ($lastTime + 0.15) >= microtime(true)){
|
||||
return false;
|
||||
}elseif(($lastTime + $target->getBreakTime($item)) >= microtime(true)){
|
||||
return false;
|
||||
}
|
||||
$player->lastBreak = microtime(true);
|
||||
}
|
||||
|
||||
//TODO: Adventure mode checks
|
||||
if($player instanceof Player){
|
||||
$ev = new PocketMine\Event\Block\BlockBreakEvent($player, $target, $item, ($player->getGamemode() & 0x01) === 1 ? true : false);
|
||||
if($item instanceof Item and !$target->isBreakable($item) and $ev->getInstaBreak() === false){
|
||||
$ev->setCancelled();
|
||||
}
|
||||
if(PocketMine\Event\EventHandler::callEvent($ev) === PocketMine\Event\Event::DENY){
|
||||
return false;
|
||||
}
|
||||
}elseif($item instanceof Item and !$target->isBreakable($item)){
|
||||
return false;
|
||||
}
|
||||
|
||||
$target->onBreak($item);
|
||||
if($item instanceof Item){
|
||||
$item->useOn($target);
|
||||
if($item->isTool() and $item->getMetadata() >= $item->getMaxDurability()){
|
||||
$item = Item::get(Item::AIR, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
return $target->getDrops($item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses a item on a position and face, placing it or activating the block
|
||||
*
|
||||
* @param Vector3 $vector
|
||||
* @param Item &$item
|
||||
* @param int $face
|
||||
* @param float $fx default 0.0
|
||||
* @param float $fy default 0.0
|
||||
* @param float $fz default 0.0
|
||||
* @param Player $player default null
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function useItemOn(Vector3 $vector, Item &$item, $face, $fx = 0.0, $fy = 0.0, $fz = 0.0, Player $player = null){
|
||||
$target = $this->getBlock($vector);
|
||||
$block = $target->getSide($face);
|
||||
|
||||
if($block->y > 127 or $block->y < 0){
|
||||
return false;
|
||||
}
|
||||
|
||||
if($target->getID() === Item::AIR){
|
||||
return false;
|
||||
}
|
||||
|
||||
if($player instanceof Player and PocketMine\Event\EventHandler::callEvent($ev = new PocketMine\Event\Player\PlayerInteractEvent($player, $item, $target, $face)) !== PocketMine\Event\Event::DENY){
|
||||
$target->onUpdate(Level::BLOCK_UPDATE_TOUCH);
|
||||
}
|
||||
|
||||
if($target->isActivable === true and $target->onActivate($item, $player) === true){
|
||||
return true;
|
||||
}
|
||||
|
||||
if($item->isPlaceable()){
|
||||
$hand = $item->getBlock();
|
||||
$hand->position($block);
|
||||
}elseif($block->getID() === Item::FIRE){
|
||||
$this->setBlock($block, new PocketMine\Block\Air(), true, false, true);
|
||||
|
||||
return false;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!($block->isReplaceable === true or ($hand->getID() === Item::SLAB and $block->getID() === Item::SLAB))){
|
||||
return false;
|
||||
}
|
||||
|
||||
if($target->isReplaceable === true){
|
||||
$block = $target;
|
||||
$hand->position($block);
|
||||
//$face = -1;
|
||||
}
|
||||
|
||||
//TODO: Implement using Bounding Boxes, all entities
|
||||
/*if($hand->isSolid === true and $player->inBlock($block)){
|
||||
return false; //Entity in block
|
||||
}*/
|
||||
$ev = new PocketMine\Event\Block\BlockPlaceEvent($player, $hand, $block, $target, $item);
|
||||
|
||||
if($player instanceof Player and PocketMine\Event\EventHandler::callEvent($ev) === PocketMine\Event\Event::DENY){
|
||||
return false;
|
||||
}elseif($hand->place($item, $block, $target, $face, $fx, $fy, $fz, $player) === false){
|
||||
return false;
|
||||
}
|
||||
|
||||
if($hand->getID() === Item::SIGN_POST or $hand->getID() === Item::WALL_SIGN){
|
||||
$tile = new Sign($this, new Compound(false, array(
|
||||
new String("id", PocketMine\Tile\Tile::SIGN),
|
||||
new Int("x", $block->x),
|
||||
new Int("y", $block->y),
|
||||
new Int("z", $block->z),
|
||||
new String("Text1", ""),
|
||||
new String("Text2", ""),
|
||||
new String("Text3", ""),
|
||||
new String("Text4", "")
|
||||
)));
|
||||
if($player instanceof Player){
|
||||
$tile->namedtag->creator = new String("creator", $player->getUsername());
|
||||
}
|
||||
}
|
||||
$item->setCount($item->getCount() - 1);
|
||||
if($item->getCount() <= 0){
|
||||
$item = Item::get(Item::AIR, 0, 0);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getBiome($x, $z){
|
||||
return $this->level->getBiome((int) $x, (int) $z);
|
||||
}
|
||||
@ -761,6 +897,9 @@ class Level{
|
||||
$tags = $this->level->getChunkNBT($X, $Z);
|
||||
if(isset($tags->Entities)){
|
||||
foreach($tags->Entities as $nbt){
|
||||
if(!isset($nbt["id"])){
|
||||
continue;
|
||||
}
|
||||
switch($nbt["id"]){
|
||||
//TODO: spawn entities
|
||||
}
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
namespace PocketMine\Level\Generator;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Block\CoalOre;
|
||||
use PocketMine\Block\DiamondOre;
|
||||
use PocketMine\Block\Dirt;
|
||||
@ -29,12 +30,11 @@ use PocketMine\Block\Gravel;
|
||||
use PocketMine\Block\IronOre;
|
||||
use PocketMine\Block\LapisOre;
|
||||
use PocketMine\Block\RedstoneOre;
|
||||
use PocketMine\BlockAPI;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Generator\Populator\Ore;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Math\Vector3 as Vector3;
|
||||
use PocketMine\Utils\Random;
|
||||
use PocketMine;
|
||||
|
||||
class Flat extends Generator{
|
||||
private $level, $random, $structure, $chunks, $options, $floorLevel, $preset, $populators = array();
|
||||
@ -87,7 +87,7 @@ class Flat extends Generator{
|
||||
$this->structure = array();
|
||||
$this->chunks = array();
|
||||
foreach($matches[3] as $i => $b){
|
||||
$b = BlockAPI::fromString($b);
|
||||
$b = Item::fromString($b);
|
||||
$cnt = $matches[2][$i] === "" ? 1 : intval($matches[2][$i]);
|
||||
for($cY = $y, $y += $cnt; $cY < $y; ++$cY){
|
||||
$this->structure[$cY] = $b;
|
||||
|
@ -24,6 +24,7 @@
|
||||
*/
|
||||
namespace PocketMine\NBT;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\NBT\Tag\Byte;
|
||||
use PocketMine\NBT\Tag\Byte_Array;
|
||||
use PocketMine\NBT\Tag\Compound;
|
||||
@ -39,7 +40,6 @@ use PocketMine\NBT\Tag\Short;
|
||||
use PocketMine\NBT\Tag\String;
|
||||
use PocketMine\NBT\Tag\Tag;
|
||||
use PocketMine\Utils\Utils;
|
||||
use PocketMine;
|
||||
|
||||
/**
|
||||
* Named Binary Tag encoder/decoder
|
||||
@ -190,12 +190,12 @@ class NBT{
|
||||
$tag->write($this);
|
||||
}
|
||||
|
||||
public function getByte(){
|
||||
return ord($this->get(1));
|
||||
public function getByte($signed = false){
|
||||
return Utils::readByte($this->get(1), $signed);
|
||||
}
|
||||
|
||||
public function putByte($v){
|
||||
$this->buffer .= chr($v);
|
||||
$this->buffer .= Utils::writeByte($v);
|
||||
}
|
||||
|
||||
public function getShort(){
|
||||
|
@ -31,7 +31,7 @@ class Byte extends NamedTag{
|
||||
}
|
||||
|
||||
public function read(NBT $nbt){
|
||||
$this->value = $nbt->getByte();
|
||||
$this->value = $nbt->getByte(true);
|
||||
}
|
||||
|
||||
public function write(NBT $nbt){
|
||||
|
Loading…
x
Reference in New Issue
Block a user