mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-03 10:32:33 +00:00
Finally, I can spawn AGAIN!
This commit is contained in:
parent
b4df7c9456
commit
b3a2d3164f
@ -176,7 +176,7 @@ $explosion->explode();
|
||||
public function getDrops(){
|
||||
if($this->class === ENTITY_PLAYER and $this->player instanceof Player and ($this->player->gamemode & 0x01) === 0){
|
||||
$inv = array();
|
||||
for($i = 0; $i < PLAYER_SURVIVAL_SLOTS; ++$i){
|
||||
for($i = 0; $i < Player::SURVIVAL_SLOTS; ++$i){
|
||||
$slot = $this->player->getSlot($i);
|
||||
$this->player->setSlot($i, Item\Item::get(AIR, 0, 0));
|
||||
if($slot->getID() !== AIR and $slot->getCount() > 0){
|
||||
|
@ -21,7 +21,9 @@
|
||||
|
||||
namespace PocketMine;
|
||||
|
||||
use PocketMine\Utils\Config as Config;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Math\Vector2;
|
||||
use PocketMine\Utils\Config;
|
||||
|
||||
class BanAPI{
|
||||
private $server;
|
||||
@ -103,7 +105,7 @@ class BanAPI{
|
||||
case "player.block.place": //Spawn protection detection. Allows OPs to place/break blocks in the spawn area.
|
||||
if(!$this->isOp($data["player"]->getUsername())){
|
||||
$t = new Vector2($data["target"]->x, $data["target"]->z);
|
||||
$s = new Vector2($this->server->spawn->x, $this->server->spawn->z);
|
||||
$s = new Vector2(Level::getDefault()->getSpawn()->x, Level::getDefault()->getSpawn()->z);
|
||||
if($t->distance($s) <= $this->server->api->getProperty("spawn-protection") and $this->server->api->dhandle($event . ".spawn", $data) !== true){
|
||||
return false;
|
||||
}
|
||||
@ -255,7 +257,7 @@ class BanAPI{
|
||||
$ip = strtolower($params[0]);
|
||||
$player = Player::get($ip);
|
||||
if($player instanceof Player){
|
||||
$ip = $player->ip;
|
||||
$ip = $player->getIP();
|
||||
$player->close("banned");
|
||||
}
|
||||
$this->bannedIPs->set($ip);
|
||||
|
@ -21,15 +21,15 @@
|
||||
|
||||
namespace PocketMine;
|
||||
|
||||
use PocketMine\Block\Block as Block;
|
||||
use PocketMine\Block\GenericBlock as GenericBlock;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Level\Position as Position;
|
||||
use PocketMine\NBT\Tag\Compound as Compound;
|
||||
use PocketMine\NBT\Tag\Int as Int;
|
||||
use PocketMine\NBT\Tag\String as String;
|
||||
use PocketMine\Network\Protocol\UpdateBlockPacket as UpdateBlockPacket;
|
||||
use PocketMine\Tile\Sign as Sign;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Block\Block;
|
||||
use PocketMine\Item\Item;
|
||||
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;
|
||||
@ -388,7 +388,7 @@ class BlockAPI{
|
||||
return $this->cancelAction($block, $player);
|
||||
}
|
||||
}
|
||||
$this->blockUpdate($target, BLOCK_UPDATE_TOUCH);
|
||||
$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){
|
||||
@ -469,7 +469,7 @@ class BlockAPI{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function blockUpdateAround(Position $pos, $type = BLOCK_UPDATE_NORMAL, $delay = false){
|
||||
public function blockUpdateAround(Position $pos, $type = Level::BLOCK_UPDATE_NORMAL, $delay = false){
|
||||
if($delay !== false){
|
||||
$this->scheduleBlockUpdate($pos->getSide(0), $delay, $type);
|
||||
$this->scheduleBlockUpdate($pos->getSide(1), $delay, $type);
|
||||
@ -487,7 +487,7 @@ class BlockAPI{
|
||||
}
|
||||
}
|
||||
|
||||
public function blockUpdate(Position $pos, $type = BLOCK_UPDATE_NORMAL){
|
||||
public function blockUpdate(Position $pos, $type = Level::BLOCK_UPDATE_NORMAL){
|
||||
if(!($pos instanceof Block)){
|
||||
$block = $pos->level->getBlock($pos);
|
||||
} else{
|
||||
@ -499,14 +499,14 @@ class BlockAPI{
|
||||
}
|
||||
|
||||
$level = $block->onUpdate($type);
|
||||
if($level === BLOCK_UPDATE_NORMAL){
|
||||
if($level === Level::BLOCK_UPDATE_NORMAL){
|
||||
$this->blockUpdateAround($block, $level);
|
||||
}
|
||||
|
||||
return $level;
|
||||
}
|
||||
|
||||
public function scheduleBlockUpdate(Position $pos, $delay, $type = BLOCK_UPDATE_SCHEDULED){
|
||||
public function scheduleBlockUpdate(Position $pos, $delay, $type = Level::BLOCK_UPDATE_SCHEDULED){
|
||||
$type = (int) $type;
|
||||
if($delay < 0){
|
||||
return false;
|
||||
|
@ -21,7 +21,8 @@
|
||||
|
||||
namespace PocketMine;
|
||||
|
||||
use PocketMine\Utils\TextFormat as TextFormat;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Utils\TextFormat;
|
||||
|
||||
class ConsoleAPI{
|
||||
private $loop, $server, $event, $help, $cmds, $alias;
|
||||
@ -207,7 +208,7 @@ class ConsoleAPI{
|
||||
break;
|
||||
case "w":
|
||||
case "world":
|
||||
$p = ($issuer instanceof Player) ? $issuer->level->getName() : $this->server->api->level->getDefault()->getName();
|
||||
$p = ($issuer instanceof Player) ? $issuer->level->getName() : Level::getDefault()->getName();
|
||||
$params = substr_replace($params, $p, $selector[1] + $offsetshift - 1, strlen($selector[0]) + 1);
|
||||
$offsetshift -= strlen($selector[0]) - strlen($p) + 1;
|
||||
break;
|
||||
|
@ -21,44 +21,13 @@
|
||||
|
||||
namespace PocketMine;
|
||||
|
||||
use PocketMine\Level\Generator\Flat as Flat;
|
||||
use PocketMine\Level\Generator\Normal as Normal;
|
||||
use PocketMine\Level\Level as Level;
|
||||
use PocketMine\Level\LevelImport as LevelImport;
|
||||
use PocketMine\Level\Position as Position;
|
||||
use PocketMine\Level\WorldGenerator as WorldGenerator;
|
||||
use PocketMine\NBT\Tag\Byte as Byte;
|
||||
use PocketMine\NBT\Tag\Compound as Compound;
|
||||
use PocketMine\NBT\Tag\Enum as Enum;
|
||||
use PocketMine\NBT\Tag\Int as Int;
|
||||
use PocketMine\NBT\Tag\Short as Short;
|
||||
use PocketMine\NBT\Tag\String as String;
|
||||
use PocketMine\PMF\LevelFormat as LevelFormat;
|
||||
use PocketMine\Tile\Chest as Chest;
|
||||
use PocketMine\Tile\Furnace as Furnace;
|
||||
use PocketMine\Tile\Sign as Sign;
|
||||
use PocketMine\Tile\Tile as Tile;
|
||||
use PocketMine\Utils\Config as Config;
|
||||
use PocketMine\Utils\Utils as Utils;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class LevelAPI{
|
||||
private $server, $levels, $default;
|
||||
private $server;
|
||||
|
||||
public function __construct(){
|
||||
$this->server = ServerAPI::request();
|
||||
$this->levels = array();
|
||||
}
|
||||
|
||||
public function get($name){
|
||||
if(isset($this->levels[$name])){
|
||||
return $this->levels[$name];
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDefault(){
|
||||
return $this->levels[$this->default];
|
||||
}
|
||||
|
||||
public function init(){
|
||||
@ -66,12 +35,6 @@ class LevelAPI{
|
||||
$this->server->api->console->register("save-all", "", array($this, "commandHandler"));
|
||||
$this->server->api->console->register("save-on", "", array($this, "commandHandler"));
|
||||
$this->server->api->console->register("save-off", "", array($this, "commandHandler"));
|
||||
$this->default = $this->server->api->getProperty("level-name");
|
||||
if($this->loadLevel($this->default) === false){
|
||||
$this->generateLevel($this->default, $this->server->seed);
|
||||
$this->loadLevel($this->default);
|
||||
}
|
||||
$this->server->spawn = $this->getDefault()->getSafeSpawn();
|
||||
}
|
||||
|
||||
public function commandHandler($cmd, $params, $issuer, $alias){
|
||||
@ -80,7 +43,7 @@ class LevelAPI{
|
||||
case "save-all":
|
||||
$save = $this->server->saveEnabled;
|
||||
$this->server->saveEnabled = true;
|
||||
$this->saveAll();
|
||||
Level::saveAll();
|
||||
$this->server->saveEnabled = $save;
|
||||
break;
|
||||
case "save-on":
|
||||
@ -93,220 +56,22 @@ class LevelAPI{
|
||||
if(!isset($params[0]) and ($issuer instanceof Player)){
|
||||
$output .= "Seed: " . $issuer->level->getSeed() . "\n";
|
||||
} elseif(isset($params[0])){
|
||||
if(($lv = $this->server->api->level->get(trim(implode(" ", $params)))) !== false){
|
||||
if(($lv = Level::get(trim(implode(" ", $params)))) !== false){
|
||||
$output .= "Seed: " . $lv->getSeed() . "\n";
|
||||
}
|
||||
} else{
|
||||
$output .= "Seed: " . $this->server->api->level->getDefault()->getSeed() . "\n";
|
||||
$output .= "Seed: " . Level::getDefault()->getSeed() . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
public function generateLevel($name, $seed = false, $generator = false){
|
||||
if($name == "" or $this->levelExists($name)){
|
||||
return false;
|
||||
}
|
||||
$options = array();
|
||||
if($this->server->api->getProperty("generator-settings") !== false and trim($this->server->api->getProperty("generator-settings")) != ""){
|
||||
$options["preset"] = $this->server->api->getProperty("generator-settings");
|
||||
}
|
||||
|
||||
if($generator !== false and class_exists($generator)){
|
||||
$generator = new $generator($options);
|
||||
} else{
|
||||
if(strtoupper($this->server->api->getProperty("level-type")) == "FLAT"){
|
||||
$generator = new Flat($options);
|
||||
} else{
|
||||
$generator = new Normal($options);
|
||||
}
|
||||
}
|
||||
$gen = new WorldGenerator($generator, $name, $seed === false ? Utils::readInt(Utils::getRandomBytes(4, false)) : (int) $seed);
|
||||
$gen->generate();
|
||||
$gen->close();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function levelExists($name){
|
||||
if($name === ""){
|
||||
return false;
|
||||
}
|
||||
$path = \PocketMine\DATA . "worlds/" . $name . "/";
|
||||
if($this->get($name) === false and !file_exists($path . "level.pmf")){
|
||||
$level = new LevelImport($path);
|
||||
if($level->import() === false){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function unloadLevel(Level $level, $force = false){
|
||||
$name = $level->getName();
|
||||
if($name === $this->default and $force !== true){
|
||||
return false;
|
||||
}
|
||||
console("[INFO] Unloading level \"" . $name . "\"");
|
||||
$level->nextSave = PHP_INT_MAX;
|
||||
$level->save();
|
||||
foreach($level->getPlayers() as $player){
|
||||
$player->teleport($this->server->spawn);
|
||||
}
|
||||
$level->close();
|
||||
unset($this->levels[$name]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function loadLevel($name){
|
||||
if($this->get($name) !== false){
|
||||
return true;
|
||||
} elseif($this->levelExists($name) === false){
|
||||
console("[NOTICE] Level \"" . $name . "\" not found");
|
||||
|
||||
return false;
|
||||
}
|
||||
$path = \PocketMine\DATA . "worlds/" . $name . "/";
|
||||
console("[INFO] Preparing level \"" . $name . "\"");
|
||||
$level = new LevelFormat($path . "level.pmf");
|
||||
if(!$level->isLoaded){
|
||||
console("[ERROR] Could not load level \"" . $name . "\"");
|
||||
|
||||
return false;
|
||||
}
|
||||
//$entities = new Config($path."entities.yml", Config::YAML);
|
||||
if(file_exists($path . "tileEntities.yml")){
|
||||
@rename($path . "tileEntities.yml", $path . "tiles.yml");
|
||||
}
|
||||
$blockUpdates = new Config($path . "bupdates.yml", Config::YAML);
|
||||
$this->levels[$name] = new Level($level, $name);
|
||||
/*foreach($entities->getAll() as $entity){
|
||||
if(!isset($entity["id"])){
|
||||
break;
|
||||
}
|
||||
if($entity["id"] === 64){ //Item Drop
|
||||
$e = $this->server->api->entity->add($this->levels[$name], ENTITY_ITEM, $entity["Item"]["id"], array(
|
||||
"meta" => $entity["Item"]["Damage"],
|
||||
"stack" => $entity["Item"]["Count"],
|
||||
"x" => $entity["Pos"][0],
|
||||
"y" => $entity["Pos"][1],
|
||||
"z" => $entity["Pos"][2],
|
||||
"yaw" => $entity["Rotation"][0],
|
||||
"pitch" => $entity["Rotation"][1],
|
||||
));
|
||||
}elseif($entity["id"] === FALLING_SAND){
|
||||
$e = $this->server->api->entity->add($this->levels[$name], ENTITY_FALLING, $entity["id"], $entity);
|
||||
$e->setPosition(new Vector3($entity["Pos"][0], $entity["Pos"][1], $entity["Pos"][2]), $entity["Rotation"][0], $entity["Rotation"][1]);
|
||||
$e->setHealth($entity["Health"]);
|
||||
}elseif($entity["id"] === OBJECT_PAINTING or $entity["id"] === OBJECT_ARROW){ //Painting
|
||||
$e = $this->server->api->entity->add($this->levels[$name], ENTITY_OBJECT, $entity["id"], $entity);
|
||||
$e->setPosition(new Vector3($entity["Pos"][0], $entity["Pos"][1], $entity["Pos"][2]), $entity["Rotation"][0], $entity["Rotation"][1]);
|
||||
$e->setHealth(1);
|
||||
}else{
|
||||
$e = $this->server->api->entity->add($this->levels[$name], ENTITY_MOB, $entity["id"], $entity);
|
||||
$e->setPosition(new Vector3($entity["Pos"][0], $entity["Pos"][1], $entity["Pos"][2]), $entity["Rotation"][0], $entity["Rotation"][1]);
|
||||
$e->setHealth($entity["Health"]);
|
||||
}
|
||||
}*/
|
||||
|
||||
if(file_exists($path . "tiles.yml")){
|
||||
$tiles = new Config($path . "tiles.yml", Config::YAML);
|
||||
foreach($tiles->getAll() as $tile){
|
||||
if(!isset($tile["id"])){
|
||||
continue;
|
||||
}
|
||||
$this->levels[$name]->loadChunk($tile["x"] >> 4, $tile["z"] >> 4);
|
||||
|
||||
$nbt = new Compound(false, array());
|
||||
foreach($tile as $index => $data){
|
||||
switch($index){
|
||||
case "Items":
|
||||
$tag = new Enum("Items", array());
|
||||
$tag->setTagType(NBT::TAG_Compound);
|
||||
foreach($data as $slot => $fields){
|
||||
$tag[(int) $slot] = new Compound(false, array(
|
||||
"Count" => new Byte("Count", $fields["Count"]),
|
||||
"Slot" => new Short("Slot", $fields["Slot"]),
|
||||
"Damage" => new Short("Damage", $fields["Damage"]),
|
||||
"id" => new String("id", $fields["id"])
|
||||
));
|
||||
}
|
||||
$nbt["Items"] = $tag;
|
||||
break;
|
||||
|
||||
case "id":
|
||||
case "Text1":
|
||||
case "Text2":
|
||||
case "Text3":
|
||||
case "Text4":
|
||||
$nbt[$index] = new String($index, $data);
|
||||
break;
|
||||
|
||||
case "x":
|
||||
case "y":
|
||||
case "z":
|
||||
case "pairx":
|
||||
case "pairz":
|
||||
$nbt[$index] = new Int($index, $data);
|
||||
break;
|
||||
|
||||
case "BurnTime":
|
||||
case "CookTime":
|
||||
case "MaxTime":
|
||||
$nbt[$index] = new Short($index, $data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch($tile["id"]){
|
||||
case Tile::FURNACE:
|
||||
new Furnace($this->levels[$name], $nbt);
|
||||
break;
|
||||
case Tile::CHEST:
|
||||
new Chest($this->levels[$name], $nbt);
|
||||
break;
|
||||
case Tile::SIGN:
|
||||
new Sign($this->levels[$name], $nbt);
|
||||
break;
|
||||
}
|
||||
}
|
||||
unlink($path . "tiles.yml");
|
||||
$this->levels[$name]->save(true, true);
|
||||
}
|
||||
|
||||
foreach($blockUpdates->getAll() as $bupdate){
|
||||
$this->server->api->block->scheduleBlockUpdate(new Position((int) $bupdate["x"], (int) $bupdate["y"], (int) $bupdate["z"], $this->levels[$name]), (float) $bupdate["delay"], (int) $bupdate["type"]);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function handle($data, $event){
|
||||
switch($event){
|
||||
}
|
||||
}
|
||||
|
||||
public function saveAll(){
|
||||
foreach($this->levels as $level){
|
||||
$level->save();
|
||||
}
|
||||
}
|
||||
|
||||
public function __destruct(){
|
||||
$this->saveAll();
|
||||
foreach($this->levels as $level){
|
||||
$this->unloadLevel($level, true);
|
||||
Level::saveAll();
|
||||
foreach(Level::getAll() as $level){
|
||||
$level->unload(true);
|
||||
}
|
||||
}
|
||||
|
||||
public function getSpawn(){
|
||||
return $this->server->spawn;
|
||||
}
|
||||
|
||||
public function getAll(){
|
||||
return $this->levels;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -21,62 +21,74 @@
|
||||
|
||||
namespace PocketMine;
|
||||
|
||||
use PocketMine\Entity\RealHuman as RealHuman;
|
||||
use PocketMine\Event\Event as Event;
|
||||
use PocketMine\Event\EventHandler as EventHandler;
|
||||
use PocketMine\Event\Server\DataPacketReceiveEvent as DataPacketReceiveEvent;
|
||||
use PocketMine\Event\Server\DataPacketSendEvent as DataPacketSendEvent;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Level\Position as Position;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Entity\RealHuman;
|
||||
use PocketMine\Event;
|
||||
use PocketMine\Event\EventHandler;
|
||||
use PocketMine\Event\Server\DataPacketReceiveEvent;
|
||||
use PocketMine\Event\Server\DataPacketSendEvent;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Position;
|
||||
use PocketMine\Math\Vector3 as Vector3;
|
||||
use PocketMine\NBT\NBT as NBT;
|
||||
use PocketMine\NBT\Tag\Byte as Byte;
|
||||
use PocketMine\NBT\Tag\Compound as Compound;
|
||||
use PocketMine\NBT\Tag\Double as Double;
|
||||
use PocketMine\NBT\Tag\Enum as Enum;
|
||||
use PocketMine\NBT\Tag\Float as Float;
|
||||
use PocketMine\NBT\Tag\Int as Int;
|
||||
use PocketMine\NBT\Tag\Short as Short;
|
||||
use PocketMine\NBT\Tag\String as String;
|
||||
use PocketMine\Network\Protocol\AdventureSettingsPacket as AdventureSettingsPacket;
|
||||
use PocketMine\Network\Protocol\AnimatePacket as AnimatePacket;
|
||||
use PocketMine\Network\Protocol\ChunkDataPacket as ChunkDataPacket;
|
||||
use PocketMine\Network\Protocol\ContainerClosePacket as ContainerClosePacket;
|
||||
use PocketMine\Network\Protocol\ContainerSetContentPacket as ContainerSetContentPacket;
|
||||
use PocketMine\Network\Protocol\ContainerSetDataPacket as ContainerSetDataPacket;
|
||||
use PocketMine\Network\Protocol\ContainerSetSlotPacket as ContainerSetSlotPacket;
|
||||
use PocketMine\Network\Protocol\DataPacket as DataPacket;
|
||||
use PocketMine\Network\Protocol\DisconnectPacket as DisconnectPacket;
|
||||
use PocketMine\Network\Protocol\EntityEventPacket as EntityEventPacket;
|
||||
use PocketMine\NBT\NBT;
|
||||
use PocketMine\NBT\Tag\Byte;
|
||||
use PocketMine\NBT\Tag\Compound;
|
||||
use PocketMine\NBT\Tag\Double;
|
||||
use PocketMine\NBT\Tag\Enum;
|
||||
use PocketMine\NBT\Tag\Float;
|
||||
use PocketMine\NBT\Tag\Int;
|
||||
use PocketMine\NBT\Tag\Short;
|
||||
use PocketMine\NBT\Tag\String;
|
||||
use PocketMine\Network\Protocol\AdventureSettingsPacket;
|
||||
use PocketMine\Network\Protocol\AnimatePacket;
|
||||
use PocketMine\Network\Protocol\ChunkDataPacket;
|
||||
use PocketMine\Network\Protocol\ContainerClosePacket;
|
||||
use PocketMine\Network\Protocol\ContainerSetContentPacket;
|
||||
use PocketMine\Network\Protocol\ContainerSetDataPacket;
|
||||
use PocketMine\Network\Protocol\ContainerSetSlotPacket;
|
||||
use PocketMine\Network\Protocol\DataPacket;
|
||||
use PocketMine\Network\Protocol\DisconnectPacket;
|
||||
use PocketMine\Network\Protocol\EntityEventPacket;
|
||||
use PocketMine\Network\Protocol\Info as ProtocolInfo;
|
||||
use PocketMine\Network\Protocol\LoginStatusPacket as LoginStatusPacket;
|
||||
use PocketMine\Network\Protocol\MessagePacket as MessagePacket;
|
||||
use PocketMine\Network\Protocol\PongPacket as PongPacket;
|
||||
use PocketMine\Network\Protocol\ServerHandshakePacket as ServerHandshakePacket;
|
||||
use PocketMine\Network\Protocol\SetEntityDataPacket as SetEntityDataPacket;
|
||||
use PocketMine\Network\Protocol\SetSpawnPositionPacket as SetSpawnPositionPacket;
|
||||
use PocketMine\Network\Protocol\SetTimePacket as SetTimePacket;
|
||||
use PocketMine\Network\Protocol\StartGamePacket as StartGamePacket;
|
||||
use PocketMine\Network\Protocol\TakeItemEntityPacket as TakeItemEntityPacket;
|
||||
use PocketMine\Network\Protocol\TileEventPacket as TileEventPacket;
|
||||
use PocketMine\Network\Protocol\UnknownPacket as UnknownPacket;
|
||||
use PocketMine\Network\Protocol\UpdateBlockPacket as UpdateBlockPacket;
|
||||
use PocketMine\Network\RakNet\Info as Info;
|
||||
use PocketMine\Network\RakNet\Packet as Packet;
|
||||
use PocketMine\PMF\LevelFormat as LevelFormat;
|
||||
use PocketMine\Recipes\Crafting as Crafting;
|
||||
use PocketMine\Tile\Chest as Chest;
|
||||
use PocketMine\Tile\Furnace as Furnace;
|
||||
use PocketMine\Tile\Sign as Sign;
|
||||
use PocketMine\Tile\Spawnable as Spawnable;
|
||||
use PocketMine\Tile\Tile as Tile;
|
||||
use PocketMine\Utils\Config as Config;
|
||||
use PocketMine\Utils\TextFormat as TextFormat;
|
||||
use PocketMine\Utils\Utils as Utils;
|
||||
use PocketMine\Network\Protocol\LoginStatusPacket;
|
||||
use PocketMine\Network\Protocol\MessagePacket;
|
||||
use PocketMine\Network\Protocol\PongPacket;
|
||||
use PocketMine\Network\Protocol\ServerHandshakePacket;
|
||||
use PocketMine\Network\Protocol\SetEntityDataPacket;
|
||||
use PocketMine\Network\Protocol\SetSpawnPositionPacket;
|
||||
use PocketMine\Network\Protocol\SetTimePacket;
|
||||
use PocketMine\Network\Protocol\StartGamePacket;
|
||||
use PocketMine\Network\Protocol\TakeItemEntityPacket;
|
||||
use PocketMine\Network\Protocol\TileEventPacket;
|
||||
use PocketMine\Network\Protocol\UnknownPacket;
|
||||
use PocketMine\Network\Protocol\UpdateBlockPacket;
|
||||
use PocketMine\Network\RakNet\Info;
|
||||
use PocketMine\Network\RakNet\Packet;
|
||||
use PocketMine\PMF\LevelFormat;
|
||||
use PocketMine\Recipes\Crafting;
|
||||
use PocketMine\Tile\Chest;
|
||||
use PocketMine\Tile\Furnace;
|
||||
use PocketMine\Tile\Sign;
|
||||
use PocketMine\Tile\Spawnable;
|
||||
use PocketMine\Tile\Tile;
|
||||
use PocketMine\Utils\Config;
|
||||
use PocketMine\Utils\TextFormat;
|
||||
use PocketMine\Utils\Utils;
|
||||
|
||||
/**
|
||||
* Main class that handles networking, recovery, and packet sending to the server part
|
||||
* TODO: Move reliability layer
|
||||
*
|
||||
* Class Player
|
||||
* @package PocketMine
|
||||
*/
|
||||
class Player extends RealHuman{
|
||||
public static $list = array();
|
||||
|
||||
const MAX_QUEUE = 2048;
|
||||
const SURVIVAL_SLOTS = 36;
|
||||
const CREATIVE_SLOTS = 112; //????
|
||||
|
||||
private $recoveryQueue = array();
|
||||
private $receiveQueue = array();
|
||||
private $resendQueue = array();
|
||||
@ -166,17 +178,18 @@ class Player extends RealHuman{
|
||||
$server = ServerAPI::request();
|
||||
$iname = strtolower($name);
|
||||
if(!file_exists(\PocketMine\DATA . "players/" . $iname . ".dat")){
|
||||
$spawn = Level::getDefault()->getSafeSpawn();
|
||||
$nbt = new Compound(false, array(
|
||||
"Pos" => new Enum("Pos", array(
|
||||
0 => new Double(0, $server->spawn->x),
|
||||
1 => new Double(1, $server->spawn->y),
|
||||
2 => new Double(2, $server->spawn->z)
|
||||
0 => new Double(0, $spawn->x),
|
||||
1 => new Double(1, $spawn->y),
|
||||
2 => new Double(2, $spawn->z)
|
||||
)),
|
||||
"Level" => new String("Level", $server->spawn->level->getName()),
|
||||
"SpawnLevel" => new String("SpawnLevel", $server->spawn->level->getName()),
|
||||
"SpawnX" => new Int("SpawnX", (int) $server->spawn->x),
|
||||
"SpawnY" => new Int("SpawnY", (int) $server->spawn->y),
|
||||
"SpawnZ" => new Int("SpawnZ", (int) $server->spawn->z),
|
||||
"Level" => new String("Level", Level::getDefault()->getName()),
|
||||
"SpawnLevel" => new String("SpawnLevel", Level::getDefault()->getName()),
|
||||
"SpawnX" => new Int("SpawnX", (int) $spawn->x),
|
||||
"SpawnY" => new Int("SpawnY", (int) $spawn->y),
|
||||
"SpawnZ" => new Int("SpawnZ", (int) $spawn->z),
|
||||
"SpawnForced" => new Byte("SpawnForced", 1), //TODO
|
||||
"Inventory" => new Enum("Inventory", array()),
|
||||
"Achievements" => new Compound("Achievements", array()),
|
||||
@ -363,10 +376,10 @@ class Player extends RealHuman{
|
||||
Player::$list[$this->CID] = $this;
|
||||
$this->ip = $ip;
|
||||
$this->port = $port;
|
||||
$this->spawnPosition = $this->server->spawn;
|
||||
$this->spawnPosition = Level::getDefault()->getSafeSpawn();
|
||||
$this->timeout = microtime(true) + 20;
|
||||
$this->gamemode = $this->server->gamemode;
|
||||
$this->level = $this->server->api->level->getDefault();
|
||||
$this->level = Level::getDefault();
|
||||
$this->viewDistance = (int) $this->server->api->getProperty("view-distance");
|
||||
$this->slot = 0;
|
||||
$this->hotbar = array(0, -1, -1, -1, -1, -1, -1, -1, -1);
|
||||
@ -384,7 +397,9 @@ class Player extends RealHuman{
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Vector3 $pos
|
||||
* Sets the spawnpoint of the player (and the compass direction) to a Vector3, or set it on another world with a Position object
|
||||
*
|
||||
* @param Vector3|Position $pos
|
||||
*/
|
||||
public function setSpawn(Vector3 $pos){
|
||||
if(!($pos instanceof Position)){
|
||||
@ -942,39 +957,37 @@ class Player extends RealHuman{
|
||||
}
|
||||
|
||||
switch($item->getID()){
|
||||
case WORKBENCH:
|
||||
case Item::WORKBENCH:
|
||||
$this->grantAchievement("buildWorkBench");
|
||||
break;
|
||||
case WOODEN_PICKAXE:
|
||||
case Item::WOODEN_PICKAXE:
|
||||
$this->grantAchievement("buildPickaxe");
|
||||
break;
|
||||
case FURNACE:
|
||||
case Item::FURNACE:
|
||||
$this->grantAchievement("buildFurnace");
|
||||
break;
|
||||
case WOODEN_HOE:
|
||||
case Item::WOODEN_HOE:
|
||||
$this->grantAchievement("buildHoe");
|
||||
break;
|
||||
case BREAD:
|
||||
case Item::BREAD:
|
||||
$this->grantAchievement("makeBread");
|
||||
break;
|
||||
case CAKE:
|
||||
case Item::CAKE:
|
||||
$this->grantAchievement("bakeCake");
|
||||
$this->addItem(Item::get(Item::BUCKET, 0, 3));
|
||||
break;
|
||||
case STONE_PICKAXE:
|
||||
case GOLD_PICKAXE:
|
||||
case IRON_PICKAXE:
|
||||
case DIAMOND_PICKAXE:
|
||||
case Item::STONE_PICKAXE:
|
||||
case Item::GOLD_PICKAXE:
|
||||
case Item::IRON_PICKAXE:
|
||||
case Item::DIAMOND_PICKAXE:
|
||||
$this->grantAchievement("buildBetterPickaxe");
|
||||
break;
|
||||
case WOODEN_SWORD:
|
||||
case Item::WOODEN_SWORD:
|
||||
$this->grantAchievement("buildSword");
|
||||
break;
|
||||
case DIAMOND:
|
||||
case Item::DIAMOND:
|
||||
$this->grantAchievement("diamond");
|
||||
break;
|
||||
case CAKE:
|
||||
$this->addItem(Item::get(BUCKET, 0, 3));
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
@ -1062,11 +1075,11 @@ class Player extends RealHuman{
|
||||
return false;
|
||||
}
|
||||
ksort($this->received);
|
||||
if(($cnt = count($this->received)) > PLAYER_MAX_QUEUE){
|
||||
if(($cnt = count($this->received)) > self::MAX_QUEUE){
|
||||
foreach($this->received as $c => $t){
|
||||
unset($this->received[$c]);
|
||||
--$cnt;
|
||||
if($cnt <= PLAYER_MAX_QUEUE){
|
||||
if($cnt <= self::MAX_QUEUE){
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1220,7 +1233,7 @@ class Player extends RealHuman{
|
||||
return;
|
||||
}
|
||||
|
||||
if(EventHandler::callEvent(new DataPacketReceiveEvent($this, $packet)) === Event::DENY){
|
||||
if(EventHandler::callEvent(new Event\Server\DataPacketReceiveEvent($this, $packet)) === Event\Event::DENY){
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1313,8 +1326,8 @@ class Player extends RealHuman{
|
||||
$nbt = Player::getOffline($this->username);
|
||||
$nbt->NameTag = $this->username;
|
||||
$this->gamemode = $nbt->playerGameType & 0x03;
|
||||
if(($this->level = $this->server->api->level->get($nbt->Level)) === false){
|
||||
$this->level = $this->server->api->level->getDefault();
|
||||
if(($this->level = Level::get($nbt->Level)) === false){
|
||||
$this->level = Level::getDefault();
|
||||
$nbt->Level = $this->level->getName();
|
||||
$nbt->Pos[0] = $this->level->getSpawn()->x;
|
||||
$nbt->Pos[1] = $this->level->getSpawn()->y;
|
||||
@ -1334,7 +1347,7 @@ class Player extends RealHuman{
|
||||
}
|
||||
|
||||
$this->achievements = array();
|
||||
foreach($nbt->Achievements->getValue() as $achievement){
|
||||
foreach($nbt->Achievements as $achievement){
|
||||
$this->achievements[$achievement->getName()] = $achievement->getValue() > 0 ? true : false;
|
||||
}
|
||||
|
||||
@ -1365,7 +1378,7 @@ class Player extends RealHuman{
|
||||
$this->dataPacket($pk);
|
||||
|
||||
|
||||
if(($level = $this->server->api->level->get($this->namedtag->SpawnLevel)) !== false){
|
||||
if(($level = Level::get($this->namedtag->SpawnLevel)) !== false){
|
||||
$this->spawnPosition = new Position($this->namedtag->SpawnX, $this->namedtag->SpawnY, $this->namedtag->SpawnZ, $level);
|
||||
|
||||
$pk = new SetSpawnPositionPacket;
|
||||
@ -1478,7 +1491,7 @@ class Player extends RealHuman{
|
||||
$item = $this->getSlot($packet->slot);
|
||||
}
|
||||
|
||||
if($packet->slot === false or EventHandler::callEvent(new PlayerEquipmentChangeEvent($this, $item, $packet->slot, 0)) === Event::DENY){
|
||||
if($packet->slot === false or EventHandler::callEvent(new Event\Player\PlayerEquipmentChangeEvent($this, $item, $packet->slot, 0)) === Event\Event::DENY){
|
||||
$this->sendInventorySlot($packet->slot);
|
||||
} else{
|
||||
$this->setEquipmentSlot(0, $packet->slot);
|
||||
@ -2262,7 +2275,7 @@ class Player extends RealHuman{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(EventHandler::callEvent(new DataPacketSendEvent($this, $packet)) === Event::DENY){
|
||||
if(EventHandler::callEvent(new Event\Server\DataPacketSendEvent($this, $packet)) === Event\Event::DENY){
|
||||
return array();
|
||||
}
|
||||
$packet->encode();
|
||||
@ -2280,8 +2293,7 @@ class Player extends RealHuman{
|
||||
}
|
||||
|
||||
/**
|
||||
* @param integer $id
|
||||
* @param array $data
|
||||
* @param DataPacket $packet
|
||||
*
|
||||
* @return array|bool
|
||||
*/
|
||||
@ -2290,7 +2302,7 @@ class Player extends RealHuman{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(EventHandler::callEvent(new DataPacketSendEvent($this, $packet)) === Event::DENY){
|
||||
if(EventHandler::callEvent(new Event\Server\DataPacketSendEvent($this, $packet)) === Event\Event::DENY){
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace PocketMine;
|
||||
|
||||
use PocketMine\Entity\Entity as Entity;
|
||||
use PocketMine\Level\Level as Level;
|
||||
use PocketMine\Level\Position as Position;
|
||||
use PocketMine\Entity\Entity;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Level\Position;
|
||||
use PocketMine\Math\Vector3 as Vector3;
|
||||
|
||||
class PlayerAPI{
|
||||
@ -139,7 +139,7 @@ class PlayerAPI{
|
||||
if(count($params) === 1 or count($params) === 4){
|
||||
$tg = array_shift($params);
|
||||
if(count($params) === 3 and substr($tg, 0, 2) === "w:"){
|
||||
$target = $this->server->api->level->get(substr($tg, 2));
|
||||
$target = Level::get(substr($tg, 2));
|
||||
} else{
|
||||
$target = Player::get($tg);
|
||||
}
|
||||
@ -176,7 +176,7 @@ class PlayerAPI{
|
||||
$output .= "Please run this command in-game.\n";
|
||||
break;
|
||||
}
|
||||
$issuer->teleport($this->server->spawn);
|
||||
$issuer->teleport(Level::getDefault()->getSafeSpawn());
|
||||
break;
|
||||
case "ping":
|
||||
if(!($issuer instanceof Player)){
|
||||
@ -302,7 +302,7 @@ class PlayerAPI{
|
||||
|
||||
public function teleport(&$name, &$target){
|
||||
if(substr($target, 0, 2) === "w:"){
|
||||
$lv = $this->server->api->level->get(substr($target, 2));
|
||||
$lv = Level::get(substr($target, 2));
|
||||
if($lv instanceof Level){
|
||||
$origin = Player::get($name);
|
||||
if($origin instanceof Player){
|
||||
|
@ -21,11 +21,11 @@
|
||||
|
||||
namespace PocketMine;
|
||||
|
||||
use PocketMine\Network\Protocol\Info as Info;
|
||||
use PocketMine\Network\Protocol\Info;
|
||||
use PocketMine\PMF\Plugin as PMFPlugin;
|
||||
use PocketMine\Utils\Config as Config;
|
||||
use PocketMine\Utils\TextFormat as TextFormat;
|
||||
use PocketMine\Utils\Utils as Utils;
|
||||
use PocketMine\Utils\Config;
|
||||
use PocketMine\Utils\TextFormat;
|
||||
use PocketMine\Utils\Utils;
|
||||
|
||||
class PluginAPI extends \stdClass{
|
||||
private $server;
|
||||
|
@ -19,13 +19,21 @@
|
||||
*
|
||||
*/
|
||||
|
||||
namespace{
|
||||
namespace {
|
||||
/**
|
||||
* Output text to the console, can contain Minecraft-formatted text.
|
||||
*
|
||||
* @param $message
|
||||
* @param bool $EOL
|
||||
* @param bool $log
|
||||
* @param int $level
|
||||
*/
|
||||
function console($message, $EOL = true, $log = true, $level = 1){
|
||||
return PocketMine\console($message, $EOL, $log, $level);
|
||||
PocketMine\console($message, $EOL, $log, $level);
|
||||
}
|
||||
}
|
||||
|
||||
namespace PocketMine{
|
||||
namespace PocketMine {
|
||||
const VERSION = "Alpha_1.4dev";
|
||||
const API_VERSION = "1.0.0";
|
||||
const CODENAME = "絶好(Zekkou)ケーキ(Cake)";
|
||||
@ -38,28 +46,28 @@ namespace PocketMine{
|
||||
$className = array_pop($path);
|
||||
if(count($path) > 0){
|
||||
$path = implode(DIRECTORY_SEPARATOR, array_map("strtolower", $path)) . DIRECTORY_SEPARATOR;
|
||||
}else{
|
||||
} else{
|
||||
$path = "";
|
||||
}
|
||||
$fPath = \PocketMine\PATH . "src" . DIRECTORY_SEPARATOR . "PocketMine" . DIRECTORY_SEPARATOR . $path . $className . ".php";
|
||||
if(file_exists($fPath)){
|
||||
require_once($fPath);
|
||||
}
|
||||
}else{ //Try plugin
|
||||
} else{ //Try plugin
|
||||
$className = array_pop($path);
|
||||
if(count($path) > 0){
|
||||
$path = implode(DIRECTORY_SEPARATOR, array_map("strtolower", $path)) . DIRECTORY_SEPARATOR;
|
||||
}else{
|
||||
} else{
|
||||
$path = "";
|
||||
}
|
||||
$fPath = \PocketMine\PATH . "plugins". DIRECTORY_SEPARATOR . $parent . DIRECTORY_SEPARATOR . "src" . DIRECTORY_SEPARATOR . $path . $className . ".php";
|
||||
$fPath = \PocketMine\PATH . "plugins" . DIRECTORY_SEPARATOR . $parent . DIRECTORY_SEPARATOR . "src" . DIRECTORY_SEPARATOR . $path . $className . ".php";
|
||||
if(file_exists($fPath)){
|
||||
require_once($fPath);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
define("PocketMine\PATH", \getcwd() . DIRECTORY_SEPARATOR);
|
||||
define("PocketMine\\PATH", \getcwd() . DIRECTORY_SEPARATOR);
|
||||
|
||||
//Startup code. Do not look at it, it can harm you. Most of them are hacks to fix date-related bugs, or basic functions used after this
|
||||
|
||||
@ -67,7 +75,7 @@ namespace PocketMine{
|
||||
|
||||
if(ini_get("date.timezone") == ""){ //No Timezone set
|
||||
date_default_timezone_set("GMT");
|
||||
if(strpos(" ".strtoupper(php_uname("s")), " WIN") !== false){
|
||||
if(strpos(" " . strtoupper(php_uname("s")), " WIN") !== false){
|
||||
$time = time();
|
||||
$time -= $time % 60;
|
||||
//TODO: Parse different time & date formats by region. ¬¬ world
|
||||
@ -77,7 +85,7 @@ namespace PocketMine{
|
||||
exec("date.exe /T", $date);
|
||||
$j = array_map("intval", explode(substr($date[0], 2, 1), trim($date[0])));
|
||||
$offset = round((mktime($i[0], $i[1], 0, $j[1], $j[0], $j[2]) - $time) / 60) * 60;
|
||||
}else{
|
||||
} else{
|
||||
exec("date +%s", $t);
|
||||
$offset = round((intval(trim($t[0])) - time()) / 60) * 60;
|
||||
}
|
||||
@ -86,7 +94,7 @@ namespace PocketMine{
|
||||
$d = timezone_name_from_abbr("", $offset, $daylight);
|
||||
@ini_set("date.timezone", $d);
|
||||
date_default_timezone_set($d);
|
||||
}else{
|
||||
} else{
|
||||
$d = @date_default_timezone_get();
|
||||
if(strpos($d, "/") === false){
|
||||
$d = timezone_name_from_abbr($d);
|
||||
@ -103,15 +111,15 @@ namespace PocketMine{
|
||||
ini_set("default_charset", "utf-8");
|
||||
|
||||
ini_set("memory_limit", "128M"); //Default
|
||||
define("PocketMine\START_TIME", microtime(true));
|
||||
define("PocketMine\\START_TIME", microtime(true));
|
||||
|
||||
$opts = getopt("", array("enable-ansi", "disable-ansi", "data-path:", "no-wizard"));
|
||||
define("PocketMine\DATA", isset($opts["data-path"]) ? realpath($opts["data-path"]) . DIRECTORY_SEPARATOR : PATH);
|
||||
define("PocketMine\\DATA", isset($opts["data-path"]) ? realpath($opts["data-path"]) . DIRECTORY_SEPARATOR : \PocketMine\PATH);
|
||||
|
||||
if((strpos(strtoupper(php_uname("s")), "WIN") or isset($opts["enable-ansi"])) and !isset($opts["disable-ansi"])){
|
||||
define("PocketMine\ANSI", true);
|
||||
}else{
|
||||
define("PocketMine\ANSI", false);
|
||||
define("PocketMine\\ANSI", true);
|
||||
} else{
|
||||
define("PocketMine\\ANSI", false);
|
||||
}
|
||||
|
||||
function dummy(){
|
||||
@ -121,33 +129,33 @@ namespace PocketMine{
|
||||
function safe_var_dump($var, $cnt = 0){
|
||||
switch(true){
|
||||
case is_array($var):
|
||||
echo str_repeat(" ", $cnt)."array(".count($var).") {".PHP_EOL;
|
||||
echo str_repeat(" ", $cnt) . "array(" . count($var) . ") {" . PHP_EOL;
|
||||
foreach($var as $key => $value){
|
||||
echo str_repeat(" ", $cnt + 1)."[".(is_integer($key) ? $key:'"'.$key.'"')."]=>".PHP_EOL;
|
||||
echo str_repeat(" ", $cnt + 1) . "[" . (is_integer($key) ? $key : '"' . $key . '"') . "]=>" . PHP_EOL;
|
||||
safe_var_dump($value, $cnt + 1);
|
||||
}
|
||||
echo str_repeat(" ", $cnt)."}".PHP_EOL;
|
||||
echo str_repeat(" ", $cnt) . "}" . PHP_EOL;
|
||||
break;
|
||||
case is_integer($var):
|
||||
echo str_repeat(" ", $cnt)."int(".$var.")".PHP_EOL;
|
||||
echo str_repeat(" ", $cnt) . "int(" . $var . ")" . PHP_EOL;
|
||||
break;
|
||||
case is_float($var):
|
||||
echo str_repeat(" ", $cnt)."float(".$var.")".PHP_EOL;
|
||||
echo str_repeat(" ", $cnt) . "float(" . $var . ")" . PHP_EOL;
|
||||
break;
|
||||
case is_bool($var):
|
||||
echo str_repeat(" ", $cnt)."bool(".($var === true ? "true":"false").")".PHP_EOL;
|
||||
echo str_repeat(" ", $cnt) . "bool(" . ($var === true ? "true" : "false") . ")" . PHP_EOL;
|
||||
break;
|
||||
case is_string($var):
|
||||
echo str_repeat(" ", $cnt)."string(".strlen($var).") \"$var\"".PHP_EOL;
|
||||
echo str_repeat(" ", $cnt) . "string(" . strlen($var) . ") \"$var\"" . PHP_EOL;
|
||||
break;
|
||||
case is_resource($var):
|
||||
echo str_repeat(" ", $cnt)."resource() of type (".get_resource_type($var).")".PHP_EOL;
|
||||
echo str_repeat(" ", $cnt) . "resource() of type (" . get_resource_type($var) . ")" . PHP_EOL;
|
||||
break;
|
||||
case is_object($var):
|
||||
echo str_repeat(" ", $cnt)."object(".get_class($var).")".PHP_EOL;
|
||||
echo str_repeat(" ", $cnt) . "object(" . get_class($var) . ")" . PHP_EOL;
|
||||
break;
|
||||
case is_null($var):
|
||||
echo str_repeat(" ", $cnt)."NULL".PHP_EOL;
|
||||
echo str_repeat(" ", $cnt) . "NULL" . PHP_EOL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -155,12 +163,12 @@ namespace PocketMine{
|
||||
function kill($pid){
|
||||
switch(Utils\Utils::getOS()){
|
||||
case "win":
|
||||
exec("taskkill.exe /F /PID ".((int) $pid)." > NUL");
|
||||
exec("taskkill.exe /F /PID " . ((int) $pid) . " > NUL");
|
||||
break;
|
||||
case "mac":
|
||||
case "linux":
|
||||
default:
|
||||
exec("kill -9 ".((int) $pid)." > /dev/null 2>&1");
|
||||
exec("kill -9 " . ((int) $pid) . " > /dev/null 2>&1");
|
||||
}
|
||||
}
|
||||
|
||||
@ -174,34 +182,43 @@ namespace PocketMine{
|
||||
}
|
||||
$var = null;
|
||||
unset($var);
|
||||
}elseif(is_array($var)){
|
||||
} elseif(is_array($var)){
|
||||
foreach($var as $i => $v){
|
||||
hard_unset($var[$i]);
|
||||
}
|
||||
$var = null;
|
||||
unset($var);
|
||||
}else{
|
||||
} else{
|
||||
$var = null;
|
||||
unset($var);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Output text to the console, can contain Minecraft-formatted text.
|
||||
*
|
||||
* @param $message
|
||||
* @param bool $EOL
|
||||
* @param bool $log
|
||||
* @param int $level
|
||||
*/
|
||||
function console($message, $EOL = true, $log = true, $level = 1){
|
||||
if(!defined("DEBUG") or DEBUG >= $level){
|
||||
$message .= $EOL === true ? PHP_EOL:"";
|
||||
$time = (ANSI === true ? Utils\TextFormat::AQUA . date("H:i:s") . Utils\TextFormat::RESET:date("H:i:s")) . " ";
|
||||
if(!defined("PocketMine\\DEBUG") or \PocketMine\DEBUG >= $level){
|
||||
$message .= $EOL === true ? PHP_EOL : "";
|
||||
$time = (\PocketMine\ANSI === true ? Utils\TextFormat::AQUA . date("H:i:s") . Utils\TextFormat::RESET : date("H:i:s")) . " ";
|
||||
$replaced = Utils\TextFormat::clean(preg_replace('/\x1b\[[0-9;]*m/', "", $time . $message));
|
||||
if($log === true and (!defined("LOG") or LOG === true)){
|
||||
log(date("Y-m-d")." ".$replaced, "console", false, $level);
|
||||
log(date("Y-m-d") . " " . $replaced, "console", false, $level);
|
||||
}
|
||||
if(ANSI === true){
|
||||
if(\PocketMine\ANSI === true){
|
||||
$add = "";
|
||||
if(preg_match("/\[([a-zA-Z0-9]*)\]/", $message, $matches) > 0){
|
||||
if(preg_match("/\\[([a-zA-Z0-9]*)\\]/", $message, $matches) > 0){
|
||||
switch($matches[1]){
|
||||
case "ERROR":
|
||||
case "SEVERE":
|
||||
$add .= Utils\TextFormat::RED;
|
||||
break;
|
||||
case "TRACE":
|
||||
case "INTERNAL":
|
||||
case "DEBUG":
|
||||
$add .= Utils\TextFormat::GRAY;
|
||||
@ -218,7 +235,7 @@ namespace PocketMine{
|
||||
}
|
||||
}
|
||||
$message = Utils\TextFormat::toANSI($time . $add . $message . Utils\TextFormat::RESET);
|
||||
}else{
|
||||
} else{
|
||||
$message = $replaced;
|
||||
}
|
||||
echo $message;
|
||||
@ -234,11 +251,12 @@ namespace PocketMine{
|
||||
$params = "";
|
||||
if(isset($trace[$i]["args"])){
|
||||
foreach($trace[$i]["args"] as $name => $value){
|
||||
$params .= (is_object($value) ? get_class($value)." ".(method_exists($value, "__toString") ? $value->__toString() : "object"):gettype($value)." ".@strval($value)).", ";
|
||||
$params .= (is_object($value) ? get_class($value) . " " . (method_exists($value, "__toString") ? $value->__toString() : "object") : gettype($value) . " " . @strval($value)) . ", ";
|
||||
}
|
||||
}
|
||||
$messages[] = "#$j ".(isset($trace[$i]["file"]) ? $trace[$i]["file"]:"")."(".(isset($trace[$i]["line"]) ? $trace[$i]["line"]:"")."): ".(isset($trace[$i]["class"]) ? $trace[$i]["class"].$trace[$i]["type"]:"").$trace[$i]["function"]."(".substr($params, 0, -2).")";
|
||||
$messages[] = "#$j " . (isset($trace[$i]["file"]) ? $trace[$i]["file"] : "") . "(" . (isset($trace[$i]["line"]) ? $trace[$i]["line"] : "") . "): " . (isset($trace[$i]["class"]) ? $trace[$i]["class"] . $trace[$i]["type"] : "") . $trace[$i]["function"] . "(" . substr($params, 0, -2) . ")";
|
||||
}
|
||||
|
||||
return $messages;
|
||||
}
|
||||
|
||||
@ -263,23 +281,25 @@ namespace PocketMine{
|
||||
E_DEPRECATED => "E_DEPRECATED",
|
||||
E_USER_DEPRECATED => "E_USER_DEPRECATED",
|
||||
);
|
||||
$errno = isset($errorConversion[$errno]) ? $errorConversion[$errno]:$errno;
|
||||
console("[ERROR] A ".$errno." error happened: \"$errstr\" in \"$errfile\" at line $errline", true, true, 0);
|
||||
$type = ($errno === E_ERROR or $errno === E_WARNING or $errno === E_USER_ERROR or $errno === E_USER_WARNING) ? "ERROR" : "NOTICE";
|
||||
$errno = isset($errorConversion[$errno]) ? $errorConversion[$errno] : $errno;
|
||||
console("[$type] A $errno error happened: \"$errstr\" in \"$errfile\" at line $errline", true, true, 0);
|
||||
foreach(getTrace() as $i => $line){
|
||||
console("[TRACE] $line");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function log($message, $name, $EOL = true, $level = 2, $close = false){
|
||||
global $fpointers;
|
||||
if((!defined("DEBUG") or DEBUG >= $level) and (!defined("LOG") or LOG === true)){
|
||||
$message .= $EOL === true ? PHP_EOL:"";
|
||||
if((!defined("PocketMine\\DEBUG") or \PocketMine\DEBUG >= $level) and (!defined("PocketMine\\LOG") or LOG === true)){
|
||||
$message .= $EOL === true ? PHP_EOL : "";
|
||||
if(!isset($fpointers)){
|
||||
$fpointers = array();
|
||||
}
|
||||
if(!isset($fpointers[$name]) or $fpointers[$name] === false){
|
||||
$fpointers[$name] = @fopen(\PocketMine\DATA."/".$name.".log", "ab");
|
||||
$fpointers[$name] = @fopen(\PocketMine\DATA . "/" . $name . ".log", "ab");
|
||||
}
|
||||
@fwrite($fpointers[$name], $message);
|
||||
if($close === true){
|
||||
@ -290,7 +310,7 @@ namespace PocketMine{
|
||||
}
|
||||
|
||||
|
||||
set_error_handler("\PocketMine\\error_handler", E_ALL);
|
||||
set_error_handler("\\PocketMine\\error_handler", E_ALL);
|
||||
|
||||
$errors = 0;
|
||||
|
||||
@ -304,15 +324,15 @@ namespace PocketMine{
|
||||
++$errors;
|
||||
}
|
||||
|
||||
if(!extension_loaded("sockets") and @dl((PHP_SHLIB_SUFFIX === "dll" ? "php_":"") . "sockets." . PHP_SHLIB_SUFFIX) === false){
|
||||
if(!extension_loaded("sockets")){
|
||||
console("[ERROR] Unable to find the Socket extension.", true, true, 0);
|
||||
++$errors;
|
||||
}
|
||||
|
||||
if(!extension_loaded("pthreads") and @dl((PHP_SHLIB_SUFFIX === "dll" ? "php_":"") . "pthreads." . PHP_SHLIB_SUFFIX) === false){
|
||||
if(!extension_loaded("pthreads")){
|
||||
console("[ERROR] Unable to find the pthreads extension.", true, true, 0);
|
||||
++$errors;
|
||||
}else{
|
||||
} else{
|
||||
$pthreads_version = phpversion("pthreads");
|
||||
if(substr_count($pthreads_version, ".") < 2){
|
||||
$pthreads_version = "0.$pthreads_version";
|
||||
@ -323,22 +343,22 @@ namespace PocketMine{
|
||||
}
|
||||
}
|
||||
|
||||
if(!extension_loaded("curl") and @dl((PHP_SHLIB_SUFFIX === "dll" ? "php_":"") . "curl." . PHP_SHLIB_SUFFIX) === false){
|
||||
if(!extension_loaded("curl")){
|
||||
console("[ERROR] Unable to find the cURL extension.", true, true, 0);
|
||||
++$errors;
|
||||
}
|
||||
|
||||
if(!extension_loaded("sqlite3") and @dl((PHP_SHLIB_SUFFIX === "dll" ? "php_":"") . "sqlite3." . PHP_SHLIB_SUFFIX) === false){
|
||||
if(!extension_loaded("sqlite3")){
|
||||
console("[ERROR] Unable to find the SQLite3 extension.", true, true, 0);
|
||||
++$errors;
|
||||
}
|
||||
|
||||
if(!extension_loaded("yaml") and @dl((PHP_SHLIB_SUFFIX === "dll" ? "php_":"") . "yaml." . PHP_SHLIB_SUFFIX) === false){
|
||||
if(!extension_loaded("yaml")){
|
||||
console("[ERROR] Unable to find the YAML extension.", true, true, 0);
|
||||
++$errors;
|
||||
}
|
||||
|
||||
if(!extension_loaded("zlib") and @dl((PHP_SHLIB_SUFFIX === "dll" ? "php_":"") . "zlib." . PHP_SHLIB_SUFFIX) === false){
|
||||
if(!extension_loaded("zlib")){
|
||||
console("[ERROR] Unable to find the Zlib extension.", true, true, 0);
|
||||
++$errors;
|
||||
}
|
||||
@ -350,8 +370,8 @@ namespace PocketMine{
|
||||
|
||||
$gitsha1 = false;
|
||||
if(file_exists(\PocketMine\PATH . ".git/refs/heads/master")){ //Found Git information!
|
||||
define("PocketMine\GIT_COMMIT", strtolower(trim(file_get_contents(\PocketMine\PATH .".git/refs/heads/master"))));
|
||||
}else{ //Unknown :(
|
||||
define("PocketMine\GIT_COMMIT", strtolower(trim(file_get_contents(\PocketMine\PATH . ".git/refs/heads/master"))));
|
||||
} else{ //Unknown :(
|
||||
define("PocketMine\GIT_COMMIT", str_repeat("00", 20));
|
||||
}
|
||||
|
||||
@ -363,10 +383,12 @@ namespace PocketMine{
|
||||
$installer = new Wizard\Installer();
|
||||
}
|
||||
|
||||
$server = new ServerAPI();
|
||||
$server->start();
|
||||
if(!defined("PARENT_API_EXISTENT")){
|
||||
$server = new ServerAPI();
|
||||
$server->start();
|
||||
|
||||
kill(getmypid()); //Fix for ConsoleAPI being blocked
|
||||
exit(0);
|
||||
kill(getmypid()); //Fix for ConsoleAPI being blocked
|
||||
exit(0);
|
||||
}
|
||||
|
||||
}
|
@ -25,14 +25,14 @@
|
||||
*/
|
||||
namespace PocketMine;
|
||||
|
||||
use PocketMine\Entity\Entity as Entity;
|
||||
use PocketMine\Network\Handler as Handler;
|
||||
use PocketMine\Network\Packet as Packet;
|
||||
use PocketMine\Network\Protocol\Info as Info;
|
||||
use PocketMine\Entity\Entity;
|
||||
use PocketMine\Network\Handler;
|
||||
use PocketMine\Network\Packet;
|
||||
use PocketMine\Network\Protocol\Info;
|
||||
use PocketMine\Network\RakNet\Info as RakNetInfo;
|
||||
use PocketMine\Network\RakNet\Packet as RakNetPacket;
|
||||
use PocketMine\Utils\Utils as Utils;
|
||||
use PocketMine\Utils\VersionString as VersionString;
|
||||
use PocketMine\Utils\Utils;
|
||||
use PocketMine\Utils\VersionString;
|
||||
|
||||
class Server{
|
||||
public $tCnt;
|
||||
@ -46,7 +46,7 @@ class Server{
|
||||
|
||||
private function load(){
|
||||
$this->version = new VersionString();
|
||||
if(defined("DEBUG") and DEBUG >= 0){
|
||||
if(defined("PocketMine\\DEBUG") and \PocketMine\DEBUG >= 0){
|
||||
@cli_set_process_title("PocketMine-MP " . \PocketMine\VERSION);
|
||||
}
|
||||
console("[INFO] Starting Minecraft PE server on " . ($this->serverip === "0.0.0.0" ? "*" : $this->serverip) . ":" . $this->port);
|
||||
@ -107,7 +107,7 @@ class Server{
|
||||
|
||||
public function titleTick(){
|
||||
$time = microtime(true);
|
||||
if(defined("DEBUG") and DEBUG >= 0 and ANSI === true){
|
||||
if(defined("PocketMine\\DEBUG") and \PocketMine\DEBUG >= 0 and ANSI === true){
|
||||
echo "\x1b]0;PocketMine-MP " . VERSION . " | Online " . count(Player::$list) . "/" . $this->maxClients . " | RAM " . round((memory_get_usage() / 1024) / 1024, 2) . "MB | U " . round(($this->interface->bandwidth[1] / max(1, $time - $this->interface->bandwidth[2])) / 1024, 2) . " D " . round(($this->interface->bandwidth[0] / max(1, $time - $this->interface->bandwidth[2])) / 1024, 2) . " kB/s | TPS " . $this->getTPS() . "\x07";
|
||||
}
|
||||
$this->interface->bandwidth = array(0, 0, $time);
|
||||
@ -482,7 +482,7 @@ class Server{
|
||||
ob_end_clean();
|
||||
$dump .= "\r\n```";
|
||||
$name = "Error_Dump_" . date("D_M_j-H.i.s-T_Y");
|
||||
logg($dump, $name, true, 0, true);
|
||||
log($dump, $name, true, 0, true);
|
||||
console("[SEVERE] Please submit the \"{$name}.log\" file to the Bug Reporting page. Give as much info as you can.", true, true, 0);
|
||||
}
|
||||
|
||||
|
@ -21,20 +21,21 @@
|
||||
|
||||
namespace PocketMine;
|
||||
|
||||
use PocketMine\Block\Block as Block;
|
||||
use PocketMine\Entity\Entity as Entity;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Network\Protocol\Info as Info;
|
||||
use PocketMine\Network\Query\QueryHandler as QueryHandler;
|
||||
use PocketMine\Network\RCON\RCON as RCON;
|
||||
use PocketMine\Network\UPnP\PortForward as PortForward;
|
||||
use PocketMine\Network\UPnP\RemovePortForward as RemovePortForward;
|
||||
use PocketMine\Recipes\Crafting as Crafting;
|
||||
use PocketMine\Tile\Tile as Tile;
|
||||
use PocketMine\Utils\Config as Config;
|
||||
use PocketMine\Utils\TextFormat as TextFormat;
|
||||
use PocketMine\Utils\Utils as Utils;
|
||||
use PocketMine\Utils\VersionString as VersionString;
|
||||
use PocketMine\Block\Block;
|
||||
use PocketMine\Entity\Entity;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Network\Protocol\Info;
|
||||
use PocketMine\Network\Query\QueryHandler;
|
||||
use PocketMine\Network\RCON\RCON;
|
||||
use PocketMine\Network\UPnP\PortForward;
|
||||
use PocketMine\Network\UPnP\RemovePortForward;
|
||||
use PocketMine\Recipes\Crafting;
|
||||
use PocketMine\Tile\Tile;
|
||||
use PocketMine\Utils\Config;
|
||||
use PocketMine\Utils\TextFormat;
|
||||
use PocketMine\Utils\Utils;
|
||||
use PocketMine\Utils\VersionString;
|
||||
|
||||
class ServerAPI{
|
||||
public $restart = false;
|
||||
@ -112,22 +113,14 @@ class ServerAPI{
|
||||
@mkdir(\PocketMine\DATA . "worlds/", 0755);
|
||||
@mkdir(\PocketMine\DATA . "plugins/", 0755);
|
||||
|
||||
//Init all the events
|
||||
foreach(get_declared_classes() as $class){
|
||||
if(is_subclass_of($class, "Event") and property_exists($class, "handlers") and property_exists($class, "handlerPriority")){
|
||||
$class::unregisterAll();
|
||||
}
|
||||
}
|
||||
|
||||
$version = new VersionString();
|
||||
console("[INFO] Starting Minecraft PE server version " . TextFormat::AQUA . MINECRAFT_VERSION);
|
||||
console("[INFO] Starting Minecraft: PE server version " . TextFormat::AQUA . MINECRAFT_VERSION);
|
||||
|
||||
console("[INFO] Loading properties...");
|
||||
$this->config = new Config(\PocketMine\DATA . "server.properties", Config::PROPERTIES, array(
|
||||
"server-name" => "Minecraft: PE Server",
|
||||
"description" => "Server made using PocketMine-MP",
|
||||
"motd" => "Welcome @player to this server!",
|
||||
"server-ip" => "",
|
||||
"server-port" => 19132,
|
||||
"server-type" => "normal",
|
||||
"memory-limit" => "128M",
|
||||
@ -157,7 +150,7 @@ class ServerAPI{
|
||||
$this->parseProperties();
|
||||
|
||||
//Load advanced properties
|
||||
define("DEBUG", $this->getProperty("debug", 1));
|
||||
define("PocketMine\\DEBUG", $this->getProperty("debug", 1));
|
||||
define("ADVANCED_CACHE", $this->getProperty("enable-advanced-cache", false));
|
||||
define("MAX_CHUNK_RATE", 20 / $this->getProperty("max-chunks-per-second", 7)); //Default rate ~448 kB/s
|
||||
if(ADVANCED_CACHE == true){
|
||||
@ -188,7 +181,7 @@ class ServerAPI{
|
||||
console("[NOTICE] " . TextFormat::YELLOW . "A new DEVELOPMENT version of PocketMine-MP has been released!");
|
||||
console("[NOTICE] " . TextFormat::YELLOW . "Commit \"" . $info[0]["commit"]["message"] . "\" [" . substr($info[0]["sha"], 0, 10) . "] by " . $info[0]["commit"]["committer"]["name"]);
|
||||
console("[NOTICE] " . TextFormat::YELLOW . "Get it at PocketMine.net or at https://github.com/PocketMine/PocketMine-MP/archive/" . $info[0]["sha"] . ".zip");
|
||||
console("[NOTICE] This message will dissapear after issuing the command \"/update-done\"");
|
||||
console("[NOTICE] This message will disappear after issuing the command \"/update-done\"");
|
||||
} else{
|
||||
$this->setProperty("last-update", time());
|
||||
console("[INFO] " . TextFormat::AQUA . "This is the latest DEVELOPMENT version");
|
||||
@ -207,7 +200,7 @@ class ServerAPI{
|
||||
console("[NOTICE] " . TextFormat::GREEN . "A new STABLE version of PocketMine-MP has been released!");
|
||||
console("[NOTICE] " . TextFormat::GREEN . "Version \"" . $info[0]["name"] . "\" #" . $updateN);
|
||||
console("[NOTICE] Get it at PocketMine.net or at " . $info[0]["zipball_url"]);
|
||||
console("[NOTICE] This message will dissapear as soon as you update");
|
||||
console("[NOTICE] This message will disappear as soon as you update");
|
||||
} else{
|
||||
$this->setProperty("last-update", time());
|
||||
console("[INFO] " . TextFormat::AQUA . "This is the latest STABLE version");
|
||||
@ -218,8 +211,10 @@ class ServerAPI{
|
||||
|
||||
$this->loadProperties();
|
||||
|
||||
|
||||
$this->apiList[] = $this->console = new ConsoleAPI();
|
||||
$this->apiList[] = $this->level = new LevelAPI();
|
||||
|
||||
$this->apiList[] = $this->block = new BlockAPI();
|
||||
$this->apiList[] = $this->chat = new ChatAPI();
|
||||
$this->apiList[] = $this->ban = new BanAPI();
|
||||
@ -239,7 +234,7 @@ class ServerAPI{
|
||||
public function checkTickUpdates(){
|
||||
//Update entities that need update
|
||||
if(count(Entity::$needUpdate) > 0){
|
||||
foreach(EntityEntity::$needUpdate as $id => $entity){
|
||||
foreach(Entity::$needUpdate as $id => $entity){
|
||||
if($entity->onUpdate() === false){
|
||||
unset(Entity::$needUpdate[$id]);
|
||||
}
|
||||
@ -276,7 +271,7 @@ class ServerAPI{
|
||||
|
||||
public function autoSave(){
|
||||
console("[DEBUG] Saving....", true, true, 2);
|
||||
$this->server->api->level->saveAll();
|
||||
Level::saveAll();
|
||||
}
|
||||
|
||||
public function sendUsage(){
|
||||
@ -377,6 +372,12 @@ class ServerAPI{
|
||||
self::$serverRequest = $this->server;
|
||||
}
|
||||
|
||||
Block::init();
|
||||
Item::init();
|
||||
Crafting::init();
|
||||
Level::init();
|
||||
|
||||
|
||||
if($this->getProperty("send-usage", true) !== false){
|
||||
$this->server->schedule(6000, array($this, "sendUsage"), array(), true); //Send the info after 5 minutes have passed
|
||||
$this->sendUsage();
|
||||
@ -392,10 +393,6 @@ class ServerAPI{
|
||||
$this->query = new QueryHandler();
|
||||
}
|
||||
|
||||
Block::init();
|
||||
Item::init();
|
||||
Crafting::init();
|
||||
|
||||
$this->schedule(2, array($this, "checkTickUpdates"), array(), true);
|
||||
$this->server->init();
|
||||
unregister_tick_function(array($this->server, "tick"));
|
||||
|
@ -91,7 +91,7 @@ class TimeAPI{
|
||||
|
||||
public function get($raw = false, $level = false){
|
||||
if(!($level instanceof Level)){
|
||||
$level = $this->server->api->level->getDefault();
|
||||
$level = Level::getDefault();
|
||||
}
|
||||
|
||||
return $raw === true ? $level->getTime() : abs($level->getTime()) % 19200;
|
||||
@ -99,7 +99,7 @@ class TimeAPI{
|
||||
|
||||
public function add($time, $level = false){
|
||||
if(!($level instanceof Level)){
|
||||
$level = $this->server->api->level->getDefault();
|
||||
$level = Level::getDefault();
|
||||
}
|
||||
$level->setTime($level->getTime() + (int) $time);
|
||||
}
|
||||
@ -127,7 +127,7 @@ class TimeAPI{
|
||||
|
||||
public function set($time, $level = false){
|
||||
if(!($level instanceof Level)){
|
||||
$level = $this->server->api->level->getDefault();
|
||||
$level = Level::getDefault();
|
||||
}
|
||||
if(is_string($time) and isset(TimeAPI::$phases[$time])){
|
||||
$level->setTime(TimeAPI::$phases[$time]);
|
||||
|
@ -21,10 +21,10 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Network\Protocol\ChatPacket as ChatPacket;
|
||||
use PocketMine\ServerAPI as ServerAPI;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Network\Protocol\ChatPacket;
|
||||
use PocketMine\ServerAPI;
|
||||
|
||||
class Bed extends Transparent{
|
||||
public function __construct($type = 0){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Bedrock extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Beetroot extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -57,24 +58,24 @@ class Beetroot extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->isTransparent === true){ //Replace with common break method
|
||||
//TODO
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get(BEETROOT_SEEDS, 0, 1));
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === 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 BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
} else{
|
||||
return BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class BirchWoodStairs extends Stair{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -23,11 +23,12 @@
|
||||
* All Block classes are in here
|
||||
*/
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Level\Position;
|
||||
use PocketMine\Player;
|
||||
use PocketMine;
|
||||
use PocketMine\Player as Player;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Level\Position as Position;
|
||||
use PocketMine\Level\Level as Level;
|
||||
|
||||
abstract class Block extends Position{
|
||||
const AIR = 0;
|
||||
@ -435,8 +436,8 @@ abstract class Block extends Position{
|
||||
/**
|
||||
* Returns an array of Item objects to be dropped
|
||||
*
|
||||
* @param Item $item
|
||||
* @param Player $player
|
||||
* @param Item $item
|
||||
* @param Player $player
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
@ -453,8 +454,8 @@ 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
|
||||
* @param Player $player
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
@ -490,8 +491,8 @@ 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
|
||||
* @param Player $player
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
@ -500,8 +501,8 @@ abstract class Block extends Position{
|
||||
/**
|
||||
* Do the actions needed so the block is broken with the Item
|
||||
*
|
||||
* @param Item $item
|
||||
* @param Player $player
|
||||
* @param Item $item
|
||||
* @param Player $player
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
@ -510,14 +511,14 @@ abstract class Block extends Position{
|
||||
/**
|
||||
* 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 Player $player
|
||||
* @param Block $block
|
||||
* @param Block $target
|
||||
* @param int $face
|
||||
* @param float $fx
|
||||
* @param float $fy
|
||||
* @param float $fz
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
@ -526,8 +527,8 @@ abstract class Block extends Position{
|
||||
/**
|
||||
* Do actions when activated by Item. Returns if it has done anything
|
||||
*
|
||||
* @param Item $item
|
||||
* @param Player $player
|
||||
* @param Item $item
|
||||
* @param Player $player
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Bricks extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class BrownMushroom extends Flowable{
|
||||
public function __construct(){
|
||||
@ -31,13 +32,13 @@ class BrownMushroom extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->isTransparent === true){ //Replace with common break method
|
||||
//TODO
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get($this->id));
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -21,14 +21,14 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\NBT\Tag\Compound as Compound;
|
||||
use PocketMine\NBT\Tag\Enum as Enum;
|
||||
use PocketMine\NBT\Tag\Int as Int;
|
||||
use PocketMine\NBT\Tag\String as String;
|
||||
use PocketMine\Tile\Furnace as Furnace;
|
||||
use PocketMine\Tile\Tile as Tile;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
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;
|
||||
|
||||
class BurningFurnace extends Solid{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -21,10 +21,11 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Math\Vector3 as Vector3;
|
||||
use PocketMine\ServerAPI as ServerAPI;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Math\Vector3 as Vector3;
|
||||
use PocketMine\ServerAPI;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Cactus extends Transparent{
|
||||
public function __construct($meta = 0){
|
||||
@ -34,15 +35,15 @@ class Cactus extends Transparent{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() !== self::SAND and $down->getID() !== self::CACTUS){ //Replace with common break method
|
||||
$this->level->setBlock($this, new Air(), false);
|
||||
ServerAPI::request()->api->entity->drop($this, Item::get($this->id));
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === 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){
|
||||
@ -59,7 +60,7 @@ class Cactus extends Transparent{
|
||||
$this->level->setBlock($this, $this, false);
|
||||
}
|
||||
|
||||
return BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Cake extends Transparent{
|
||||
public function __construct($meta = 0){
|
||||
@ -45,11 +46,11 @@ class Cake extends Transparent{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->getID() === self::AIR){ //Replace with common break method
|
||||
$this->level->setBlock($this, new Air(), true, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Carpet extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -63,13 +64,13 @@ class Carpet extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->getID() === self::AIR){ //Replace with common break method
|
||||
//TODO
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get($this->id, $this->meta, 1));
|
||||
$this->level->setBlock($this, new Air(), true, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Carrot extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -57,24 +58,24 @@ class Carrot extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->isTransparent === true){ //Replace with common break method
|
||||
//TODO
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get(CARROT, 0, 1));
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === 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 BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
} else{
|
||||
return BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -21,14 +21,14 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\NBT\Tag\Compound as Compound;
|
||||
use PocketMine\NBT\Tag\Enum as Enum;
|
||||
use PocketMine\NBT\Tag\Int as Int;
|
||||
use PocketMine\NBT\Tag\String as String;
|
||||
use PocketMine\Tile\Chest as TileChest;
|
||||
use PocketMine\Tile\Tile as Tile;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
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;
|
||||
|
||||
class Chest extends Transparent{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Clay extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Coal extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class CoalOre extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Cobblestone extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Cobweb extends Flowable{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class CyanFlower extends Flowable{
|
||||
public function __construct(){
|
||||
@ -42,13 +43,13 @@ class CyanFlower extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->isTransparent === true){ //Replace with common break method
|
||||
//TODO
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get($this->id));
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Dandelion extends Flowable{
|
||||
public function __construct(){
|
||||
@ -42,13 +43,13 @@ class Dandelion extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->isTransparent === true){ //Replace with common break method
|
||||
//TODO
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get($this->id));
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class DeadBush extends Flowable{
|
||||
public function __construct(){
|
||||
@ -31,11 +32,11 @@ class DeadBush extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->isTransparent === true){ //Replace with common break method
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Diamond extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class DiamondOre extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Dirt extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -21,10 +21,11 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Network\Protocol\LevelEventPacket as LevelEventPacket;
|
||||
use PocketMine\Player as Player;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Network\Protocol\LevelEventPacket;
|
||||
use PocketMine\Player;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
|
||||
abstract class Door extends Transparent{
|
||||
@ -34,14 +35,14 @@ abstract class Door extends Transparent{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->getID() === self::AIR){ //Replace with common break method
|
||||
$this->level->setBlock($this, new Air(), false);
|
||||
if($this->getSide(1) instanceof Door){
|
||||
$this->level->setBlock($this->getSide(1), new Air(), false);
|
||||
}
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class DoubleSlab extends Solid{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class DoubleWoodSlab extends Solid{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -21,9 +21,10 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\ServerAPI as ServerAPI;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\ServerAPI;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Fallable extends Solid{
|
||||
|
||||
@ -34,7 +35,7 @@ class Fallable extends Solid{
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
$ret = $this->level->setBlock($this, $this, true, false, true);
|
||||
ServerAPI::request()->api->block->blockUpdate(clone $this, BLOCK_UPDATE_NORMAL);
|
||||
ServerAPI::request()->api->block->blockUpdate(clone $this, Level::BLOCK_UPDATE_NORMAL);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Farmland extends Solid{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class FenceGate extends Transparent{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Fire extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -38,7 +39,7 @@ class Fire extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
for($s = 0; $s <= 5; ++$s){
|
||||
$side = $this->getSide($s);
|
||||
if($side->getID() !== self::AIR and !($side instanceof Liquid)){
|
||||
@ -47,12 +48,12 @@ class Fire extends Flowable{
|
||||
}
|
||||
$this->level->setBlock($this, new Air(), true, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
} elseif($type === BLOCK_UPDATE_RANDOM){
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
} elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
if($this->getSide(0)->getID() !== self::NETHERRACK){
|
||||
$this->level->setBlock($this, new Air(), true, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -21,10 +21,10 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Player as Player;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\ServerAPI as ServerAPI;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\ServerAPI;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Generic extends Block{
|
||||
|
||||
@ -50,7 +50,7 @@ class Generic extends Block{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($this->hasPhysics === true and $type === BLOCK_UPDATE_NORMAL){
|
||||
if($this->hasPhysics === true and $type === Level::BLOCK_UPDATE_NORMAL){
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() === self::AIR or ($down instanceof Liquid)){
|
||||
$data = array(
|
||||
@ -64,7 +64,7 @@ class Generic extends Block{
|
||||
//TODO
|
||||
//$e = $server->api->entity->add($this->level, ENTITY_FALLING, FALLING_SAND, $data);
|
||||
//$e->spawnToAll();
|
||||
$server->api->block->blockUpdateAround(clone $this, BLOCK_UPDATE_NORMAL, 1);
|
||||
$server->api->block->blockUpdateAround(clone $this, Level::BLOCK_UPDATE_NORMAL, 1);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Glass extends Transparent{
|
||||
public function __construct(){
|
||||
|
@ -21,10 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Level\Position as Position;
|
||||
use PocketMine\Utils\Utils as Utils;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class GlowingRedstoneOre extends Solid{
|
||||
public function __construct(){
|
||||
@ -33,10 +32,10 @@ class GlowingRedstoneOre extends Solid{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_SCHEDULED or $type === BLOCK_UPDATE_RANDOM){
|
||||
if($type === Level::BLOCK_UPDATE_SCHEDULED or $type === Level::BLOCK_UPDATE_RANDOM){
|
||||
$this->level->setBlock($this, Block::get(REDSTONE_ORE, $this->meta), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_WEAK;
|
||||
return Level::BLOCK_UPDATE_WEAK;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Glowstone extends Transparent{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Gold extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class GoldOre extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -21,10 +21,10 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Level\Generator\Object\TallGrass as TallGrass;
|
||||
use PocketMine\Utils\Random as Random;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Generator\Object\TallGrass;
|
||||
use PocketMine\Utils\Random;
|
||||
|
||||
class Grass extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Gravel extends Fallable{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class HayBale extends Solid{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Ice extends Transparent{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Iron extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class IronDoor extends Door{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class IronOre extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class JungleWoodStairs extends Stair{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Ladder extends Transparent{
|
||||
public function __construct($meta = 0){
|
||||
@ -52,11 +53,11 @@ class Ladder extends Transparent{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
/*if($this->getSide(0)->getID() === self::AIR){ //Replace with common break method
|
||||
ServerAPI::request()->api->entity->drop($this, Item::get(LADDER, 0, 1));
|
||||
$this->level->setBlock($this, new Air(), true, true, true);
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}*/
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Lapis extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class LapisOre extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -21,10 +21,11 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Level\Position as Position;
|
||||
use PocketMine\ServerAPI as ServerAPI;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Position;
|
||||
use PocketMine\ServerAPI;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Lava extends Liquid{
|
||||
public function __construct($meta = 0){
|
||||
@ -34,7 +35,7 @@ class Lava extends Liquid{
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
$ret = $this->level->setBlock($this, $this, true, false, true);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(clone $this, 40, BLOCK_UPDATE_NORMAL);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(clone $this, 40, Level::BLOCK_UPDATE_NORMAL);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
@ -87,7 +88,7 @@ class Lava extends Liquid{
|
||||
//return false;
|
||||
$newId = $this->id;
|
||||
$level = $this->meta & 0x07;
|
||||
if($type !== BLOCK_UPDATE_NORMAL){
|
||||
if($type !== Level::BLOCK_UPDATE_NORMAL){
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -103,7 +104,7 @@ class Lava extends Liquid{
|
||||
if($level !== 0x07){
|
||||
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, BLOCK_UPDATE_NORMAL);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($down, 0, 0, $this->level), 40, Level::BLOCK_UPDATE_NORMAL);
|
||||
} else{
|
||||
for($side = 2; $side <= 5; ++$side){
|
||||
$b = $this->getSide($side);
|
||||
@ -111,7 +112,7 @@ class Lava extends Liquid{
|
||||
|
||||
} elseif($b->isFlowable === true){
|
||||
$this->level->setBlock($b, new Lava(min($level + 2, 7)), false, false, true);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($b, 0, 0, $this->level), 40, BLOCK_UPDATE_NORMAL);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($b, 0, 0, $this->level), 40, Level::BLOCK_UPDATE_NORMAL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -125,7 +126,7 @@ class Lava extends Liquid{
|
||||
if($tlevel != 0x00){
|
||||
for($s = 0; $s <= 5; $s++){
|
||||
$ssb = $sb->getSide($s);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($ssb, 0, 0, $this->level), 40, BLOCK_UPDATE_NORMAL);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($ssb, 0, 0, $this->level), 40, Level::BLOCK_UPDATE_NORMAL);
|
||||
}
|
||||
$this->level->setBlock($sb, new Air(), false, false, true);
|
||||
}
|
||||
@ -136,12 +137,12 @@ class Lava extends Liquid{
|
||||
if($tlevel != 0x00){
|
||||
for($s = 0; $s <= 5; $s++){
|
||||
$ssb = $sb->getSide($s);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($ssb, 0, 0, $this->level), 40, BLOCK_UPDATE_NORMAL);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($ssb, 0, 0, $this->level), 40, Level::BLOCK_UPDATE_NORMAL);
|
||||
}
|
||||
$this->level->setBlock($b, new Air(), false, false, true);
|
||||
}
|
||||
}
|
||||
//ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($b, 0, 0, $this->level), 10, BLOCK_UPDATE_NORMAL);
|
||||
//ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($b, 0, 0, $this->level), 10, Level::BLOCK_UPDATE_NORMAL);
|
||||
}
|
||||
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
|
@ -21,9 +21,10 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\ServerAPI as ServerAPI;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\ServerAPI;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Leaves extends Transparent{
|
||||
const OAK = 0;
|
||||
@ -109,12 +110,12 @@ class Leaves extends Transparent{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if(($this->meta & 0b00001100) === 0){
|
||||
$this->meta |= 0x08;
|
||||
$this->level->setBlock($this, $this, false, false, true);
|
||||
}
|
||||
} elseif($type === BLOCK_UPDATE_RANDOM){
|
||||
} elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
if(($this->meta & 0b00001100) === 0x08){
|
||||
$this->meta &= 0x03;
|
||||
$visited = array();
|
||||
@ -132,7 +133,7 @@ class Leaves extends Transparent{
|
||||
ServerAPI::request()->api->entity->drop($this, Item::get(APPLE, 0, 1));
|
||||
}
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class LitPumpkin extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Melon extends Transparent{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class MelonStem extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -43,26 +44,26 @@ class MelonStem extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->isTransparent === true){ //Replace with common break method
|
||||
//TODO
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get(MELON_SEEDS, 0, mt_rand(0, 2)));
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === 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 BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
} else{
|
||||
for($side = 2; $side <= 5; ++$side){
|
||||
$b = $this->getSide($side);
|
||||
if($b->getID() === self::MELON_BLOCK){
|
||||
return BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
}
|
||||
$side = $this->getSide(mt_rand(2, 5));
|
||||
@ -73,7 +74,7 @@ class MelonStem extends Flowable{
|
||||
}
|
||||
}
|
||||
|
||||
return BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class MossStone extends Solid{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class NetherBrick extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Netherrack extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Obsidian extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Potato extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -57,24 +58,24 @@ class Potato extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->isTransparent === true){ //Replace with common break method
|
||||
//TODO
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get(POTATO, 0, 1));
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === 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 BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
} else{
|
||||
return BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class PumpkinStem extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -43,26 +44,26 @@ class PumpkinStem extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->isTransparent === true){ //Replace with common break method
|
||||
//TODO
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get(PUMPKIN_SEEDS, 0, mt_rand(0, 2)));
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === 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 BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
} else{
|
||||
for($side = 2; $side <= 5; ++$side){
|
||||
$b = $this->getSide($side);
|
||||
if($b->getID() === self::PUMPKIN){
|
||||
return BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
}
|
||||
$side = $this->getSide(mt_rand(2, 5));
|
||||
@ -73,7 +74,7 @@ class PumpkinStem extends Flowable{
|
||||
}
|
||||
}
|
||||
|
||||
return BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Quartz extends Solid{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class RedMushroom extends Flowable{
|
||||
public function __construct(){
|
||||
@ -31,13 +32,13 @@ class RedMushroom extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->isTransparent === true){ //Replace with common break method
|
||||
//TODO
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get($this->id));
|
||||
$this->level->setBlock($this, new Air(), false);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class RedstoneOre extends Solid{
|
||||
public function __construct(){
|
||||
@ -31,10 +32,10 @@ class RedstoneOre extends Solid{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL or $type === BLOCK_UPDATE_TOUCH){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL or $type === Level::BLOCK_UPDATE_TOUCH){
|
||||
$this->level->setBlock($this, Block::get(GLOWING_REDSTONE_ORE, $this->meta), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_WEAK;
|
||||
return Level::BLOCK_UPDATE_WEAK;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Sandstone extends Solid{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -21,10 +21,11 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Level\Generator\Object\Tree as Tree;
|
||||
use PocketMine\Utils\Random as Random;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Generator\Object\Tree;
|
||||
use PocketMine\Utils\Random;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Sapling extends Flowable{
|
||||
const OAK = 0;
|
||||
@ -71,15 +72,15 @@ class Sapling extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->isTransparent === true){ //Replace with common break method
|
||||
//TODO
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get($this->id));
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === 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);
|
||||
@ -87,10 +88,10 @@ class Sapling extends Flowable{
|
||||
$this->meta |= 0x08;
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
|
||||
return BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
} else{
|
||||
return BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class SignPost extends Transparent{
|
||||
public function __construct($meta = 0){
|
||||
@ -57,13 +58,13 @@ class SignPost extends Transparent{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->getID() === self::AIR){ //Replace with common break method
|
||||
//TODO
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get(SIGN, 0, 1));
|
||||
$this->level->setBlock($this, new Air(), true, true, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Slab extends Transparent{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class SnowLayer extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -45,11 +46,11 @@ class SnowLayer extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->getID() === self::AIR){ //Replace with common break method
|
||||
$this->level->setBlock($this, new Air(), true, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class SpruceWoodStairs extends Stair{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Stair extends Transparent{
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Stone extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class StoneBricks extends Solid{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Stonecutter extends Solid{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -21,9 +21,10 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Math\Vector3 as Vector3;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Math\Vector3 as Vector3;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Sugarcane extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -61,16 +62,16 @@ class Sugarcane extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
$down = $this->getSide(0);
|
||||
if($down->isTransparent === true and $down->getID() !== self::SUGARCANE_BLOCK){ //Replace with common break method
|
||||
//TODO
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get(SUGARCANE));
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === 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){
|
||||
@ -87,7 +88,7 @@ class Sugarcane extends Flowable{
|
||||
$this->level->setBlock($this, $this, true, false, true);
|
||||
}
|
||||
|
||||
return BLOCK_UPDATE_RANDOM;
|
||||
return Level::BLOCK_UPDATE_RANDOM;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class TNT extends Solid{
|
||||
public function __construct(){
|
||||
|
@ -21,8 +21,9 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class TallGrass extends Flowable{
|
||||
public function __construct($meta = 1){
|
||||
@ -38,11 +39,11 @@ class TallGrass extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->isTransparent === true){ //Replace with common break method
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Torch extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -31,7 +32,7 @@ class Torch extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
$side = $this->getMetadata();
|
||||
$faces = array(
|
||||
1 => 4,
|
||||
@ -48,7 +49,7 @@ class Torch extends Flowable{
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get($this->id, 0, 1));
|
||||
$this->level->setBlock($this, new Air(), true, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Trapdoor extends Transparent{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -21,9 +21,10 @@
|
||||
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\ServerAPI as ServerAPI;
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\ServerAPI;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Water extends Liquid{
|
||||
public function __construct($meta = 0){
|
||||
@ -33,7 +34,7 @@ class Water extends Liquid{
|
||||
|
||||
public function place(Item $item, PocketMine\Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
$ret = $this->level->setBlock($this, $this, true, false, true);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(clone $this, 10, BLOCK_UPDATE_NORMAL);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(clone $this, 10, Level::BLOCK_UPDATE_NORMAL);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
@ -93,7 +94,7 @@ class Water extends Liquid{
|
||||
//return false;
|
||||
$newId = $this->id;
|
||||
$level = $this->meta & 0x07;
|
||||
if($type !== BLOCK_UPDATE_NORMAL){
|
||||
if($type !== Level::BLOCK_UPDATE_NORMAL){
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -108,7 +109,7 @@ class Water extends Liquid{
|
||||
if($level !== 0x07){
|
||||
if($down instanceof Air || $down instanceof Water){
|
||||
$this->level->setBlock($down, new Water(0x01), false, false, true);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($down, 0, 0, $this->level), 10, BLOCK_UPDATE_NORMAL);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($down, 0, 0, $this->level), 10, Level::BLOCK_UPDATE_NORMAL);
|
||||
} else{
|
||||
for($side = 2; $side <= 5; ++$side){
|
||||
$b = $this->getSide($side);
|
||||
@ -118,7 +119,7 @@ class Water extends Liquid{
|
||||
}
|
||||
} elseif($b->isFlowable === true){
|
||||
$this->level->setBlock($b, new Water($level + 1), false, false, true);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($b, 0, 0, $this->level), 10, BLOCK_UPDATE_NORMAL);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($b, 0, 0, $this->level), 10, Level::BLOCK_UPDATE_NORMAL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -132,7 +133,7 @@ class Water extends Liquid{
|
||||
if($tlevel != 0x00){
|
||||
for($s = 0; $s <= 5; $s++){
|
||||
$ssb = $sb->getSide($s);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($ssb, 0, 0, $this->level), 10, BLOCK_UPDATE_NORMAL);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($ssb, 0, 0, $this->level), 10, Level::BLOCK_UPDATE_NORMAL);
|
||||
}
|
||||
$this->level->setBlock($sb, new Air(), false, false, true);
|
||||
}
|
||||
@ -143,12 +144,12 @@ class Water extends Liquid{
|
||||
if($tlevel != 0x00){
|
||||
for($s = 0; $s <= 5; $s++){
|
||||
$ssb = $sb->getSide($s);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($ssb, 0, 0, $this->level), 10, BLOCK_UPDATE_NORMAL);
|
||||
ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($ssb, 0, 0, $this->level), 10, Level::BLOCK_UPDATE_NORMAL);
|
||||
}
|
||||
$this->level->setBlock($b, new Air(), false, false, true);
|
||||
}
|
||||
}
|
||||
//ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($b, 0, 0, $this->level), 10, BLOCK_UPDATE_NORMAL);
|
||||
//ServerAPI::request()->api->block->scheduleBlockUpdate(new Position($b, 0, 0, $this->level), 10, Level::BLOCK_UPDATE_NORMAL);
|
||||
}
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
}
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\Level\Level;
|
||||
|
||||
class Wheat extends Flowable{
|
||||
public function __construct($meta = 0){
|
||||
@ -57,15 +58,15 @@ class Wheat extends Flowable{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === BLOCK_UPDATE_NORMAL){
|
||||
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||
if($this->getSide(0)->isTransparent === true){ //Replace with common break method
|
||||
//TODO
|
||||
//ServerAPI::request()->api->entity->drop($this, Item::get(WHEAT_SEEDS, 0, 1));
|
||||
$this->level->setBlock($this, new Air(), false, false, true);
|
||||
|
||||
return BLOCK_UPDATE_NORMAL;
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
} elseif($type === BLOCK_UPDATE_RANDOM){
|
||||
} elseif($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
if(mt_rand(0, 2) == 1){
|
||||
if($this->meta < 0x07){
|
||||
++$this->meta;
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Wood extends Solid{
|
||||
const OAK = 0;
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class WoodDoor extends Door{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class WoodSlab extends Transparent{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class WoodStairs extends Stair{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Block;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
class Workbench extends Solid{
|
||||
public function __construct($meta = 0){
|
||||
|
@ -29,21 +29,6 @@ const VIEW = 3;
|
||||
const VIEWER = 3;
|
||||
|
||||
|
||||
//Players
|
||||
const PLAYER_MAX_QUEUE = 1024;
|
||||
|
||||
const PLAYER_SURVIVAL_SLOTS = 36;
|
||||
const PLAYER_CREATIVE_SLOTS = 112;
|
||||
|
||||
|
||||
//Block Updates
|
||||
const BLOCK_UPDATE_NORMAL = 1;
|
||||
const BLOCK_UPDATE_RANDOM = 2;
|
||||
const BLOCK_UPDATE_SCHEDULED = 3;
|
||||
const BLOCK_UPDATE_WEAK = 4;
|
||||
const BLOCK_UPDATE_TOUCH = 5;
|
||||
|
||||
|
||||
//Entities
|
||||
const ENTITY_PLAYER = 1;
|
||||
|
||||
|
@ -24,23 +24,23 @@
|
||||
*/
|
||||
namespace PocketMine\Entity;
|
||||
|
||||
use PocketMine\Event\Entity\EntityLevelChangeEvent as EntityLevelChangeEvent;
|
||||
use PocketMine\Event\Entity\EntityMotionEvent as EntityMotionEvent;
|
||||
use PocketMine\Event\Entity\EntityMoveEvent as EntityMoveEvent;
|
||||
use PocketMine\Event\Event as Event;
|
||||
use PocketMine\Event\EventHandler as EventHandler;
|
||||
use PocketMine\Level\Level as Level;
|
||||
use PocketMine\Level\Position as Position;
|
||||
use PocketMine\Math\AxisAlignedBB as AxisAlignedBB;
|
||||
use PocketMine\Math\Vector3 as Vector3;
|
||||
use PocketMine\NBT\Tag\Compound as Compound;
|
||||
use PocketMine\Network\Protocol\MoveEntityPacket_PosRot as MoveEntityPacket_PosRot;
|
||||
use PocketMine\Network\Protocol\MovePlayerPacket as MovePlayerPacket;
|
||||
use PocketMine\Network\Protocol\RemoveEntityPacket as RemoveEntityPacket;
|
||||
use PocketMine\Network\Protocol\SetEntityMotionPacket as SetEntityMotionPacket;
|
||||
use PocketMine\Player as Player;
|
||||
use PocketMine\PMF\LevelFormat as LevelFormat;
|
||||
use PocketMine;
|
||||
use PocketMine\Event\Entity\EntityLevelChangeEvent;
|
||||
use PocketMine\Event\Entity\EntityMotionEvent;
|
||||
use PocketMine\Event\Entity\EntityMoveEvent;
|
||||
use PocketMine\Event\Event;
|
||||
use PocketMine\Event\EventHandler;
|
||||
use PocketMine\Level\Level;
|
||||
use PocketMine\Level\Position;
|
||||
use PocketMine\Math\AxisAlignedBB;
|
||||
use PocketMine\Math\Vector3 as Vector3;
|
||||
use PocketMine\NBT\Tag\Compound;
|
||||
use PocketMine\Network\Protocol\MoveEntityPacket_PosRot;
|
||||
use PocketMine\Network\Protocol\MovePlayerPacket;
|
||||
use PocketMine\Network\Protocol\RemoveEntityPacket;
|
||||
use PocketMine\Network\Protocol\SetEntityMotionPacket;
|
||||
use PocketMine\Player;
|
||||
use PocketMine\PMF\LevelFormat;
|
||||
|
||||
abstract class Entity extends Position{
|
||||
public static $entityCount = 1;
|
||||
|
@ -21,21 +21,22 @@
|
||||
|
||||
namespace PocketMine\Entity;
|
||||
|
||||
use PocketMine\Event\Entity\EntityArmorChangeEvent as EntityArmorChangeEvent;
|
||||
use PocketMine\Event\Entity\EntityInventoryChangeEvent as EntityInventoryChangeEvent;
|
||||
use PocketMine\Event\Event as Event;
|
||||
use PocketMine\Event\EventHandler as EventHandler;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\NBT\Tag\Byte as Byte;
|
||||
use PocketMine\NBT\Tag\Compound as Compound;
|
||||
use PocketMine\NBT\Tag\Short as Short;
|
||||
use PocketMine\Network\Protocol\AddPlayerPacket as AddPlayerPacket;
|
||||
use PocketMine\Network\Protocol\ContainerSetContentPacket as ContainerSetContentPacket;
|
||||
use PocketMine\Network\Protocol\PlayerEquipmentPacket as PlayerEquipmentPacket;
|
||||
use PocketMine\Network\Protocol\RemovePlayerPacket as RemovePlayerPacket;
|
||||
use PocketMine\Network\Protocol\SetEntityMotionPacket as SetEntityMotionPacket;
|
||||
use PocketMine\Player;
|
||||
use PocketMine;
|
||||
use PocketMine\Event\Entity\EntityArmorChangeEvent;
|
||||
use PocketMine\Event\Entity\EntityInventoryChangeEvent;
|
||||
use PocketMine\Event\Event;
|
||||
use PocketMine\Event\EventHandler;
|
||||
use PocketMine\Item\Item;
|
||||
use PocketMine\NBT\Tag\Byte;
|
||||
use PocketMine\NBT\Tag\Compound;
|
||||
use PocketMine\NBT\Tag\Short;
|
||||
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\Player;
|
||||
use PocketMine\Network;
|
||||
|
||||
class Human extends Creature implements ProjectileSource, InventorySource{
|
||||
|
||||
@ -51,13 +52,13 @@ class Human extends Creature implements ProjectileSource, InventorySource{
|
||||
}
|
||||
$this->hotbar = array(-1, -1, -1, -1, -1, -1, -1, -1, -1);
|
||||
$this->armor = array(
|
||||
0 => Item::get(AIR, 0, 0),
|
||||
1 => Item::get(AIR, 0, 0),
|
||||
2 => Item::get(AIR, 0, 0),
|
||||
3 => Item::get(AIR, 0, 0)
|
||||
0 => Item::get(Item::AIR, 0, 0),
|
||||
1 => Item::get(Item::AIR, 0, 0),
|
||||
2 => Item::get(Item::AIR, 0, 0),
|
||||
3 => Item::get(Item::AIR, 0, 0)
|
||||
);
|
||||
|
||||
foreach($nbt->Inventory as $item){
|
||||
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
|
||||
@ -98,7 +99,7 @@ class Human extends Creature implements ProjectileSource, InventorySource{
|
||||
}
|
||||
|
||||
//Normal inventory
|
||||
$slotCount = (($this->gamemode & 0x01) === 0 ? PLAYER_SURVIVAL_SLOTS : PLAYER_CREATIVE_SLOTS) + 9;
|
||||
$slotCount = (($this->gamemode & 0x01) === 0 ? Player::SURVIVAL_SLOTS : Player::CREATIVE_SLOTS) + 9;
|
||||
for($slot = 9; $slot < $slotCount; ++$slot){
|
||||
$item = $this->getSlot($slot);
|
||||
$this->namedtag->Inventory[$slot] = new Compound(false, array(
|
||||
@ -218,15 +219,15 @@ class Human extends Creature implements ProjectileSource, InventorySource{
|
||||
public function sendArmor(Player $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() > AIR){
|
||||
$slots[$i] = $this->armor[$i]->getID() !== AIR ? $this->armor[$i]->getID() - 256 : 0;
|
||||
if(isset($this->armor[$i]) and ($this->armor[$i] instanceof Item) and $this->armor[$i]->getID() > Item::AIR){
|
||||
$slots[$i] = $this->armor[$i]->getID() !== Item::AIR ? $this->armor[$i]->getID() - 256 : 0;
|
||||
} else{
|
||||
$this->armor[$i] = Item::get(AIR, 0, 0);
|
||||
$this->armor[$i] = Item::get(Item::AIR, 0, 0);
|
||||
$slots[$i] = 255;
|
||||
}
|
||||
}
|
||||
if($player instanceof Player){
|
||||
$pk = new Netowrk\Protocol\PlayerArmorEquipmentPacket;
|
||||
$pk = new Network\Protocol\PlayerArmorEquipmentPacket;
|
||||
$pk->eid = $this->id;
|
||||
$pk->slots = $slots;
|
||||
$player->dataPacket($pk);
|
||||
@ -385,7 +386,7 @@ class Human extends Creature implements ProjectileSource, InventorySource{
|
||||
public function getSlot($slot){
|
||||
$slot = (int) $slot;
|
||||
if(!isset($this->inventory[$slot])){
|
||||
$this->inventory[$slot] = Item::get(AIR, 0, 0);
|
||||
$this->inventory[$slot] = Item::get(Item::AIR, 0, 0);
|
||||
}
|
||||
|
||||
return $this->inventory[$slot];
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace PocketMine\Entity;
|
||||
|
||||
use PocketMine;
|
||||
use PocketMine\Item\Item as Item;
|
||||
use PocketMine\Item\Item;
|
||||
|
||||
interface InventorySource{
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user