Block creating and property handling rewrite, part1

This commit is contained in:
Shoghi Cervantes 2014-12-07 01:53:27 +01:00
parent 79236c971c
commit a0d4bff385
138 changed files with 1912 additions and 835 deletions

View File

@ -24,8 +24,15 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class AcaciaWoodStairs extends Stair{
protected $id = self::ACACIA_WOOD_STAIRS;
public function __construct($meta = 0){
parent::__construct(self::ACACIA_WOOD_STAIRS, $meta, "Acacia Wood Stairs");
$this->meta = $meta;
}
public function getName(){
return "Acacia Wood Stairs";
}
public function getDrops(Item $item){

View File

@ -20,30 +20,45 @@
*/
namespace pocketmine\block;
use pocketmine\item\Item;
/**
* Air block
*/
class Air extends Transparent{
public $isActivable = false;
public $breakable = false;
public $isFlowable = true;
public $isTransparent = true;
public $isReplaceable = true;
public $isPlaceable = false;
public $hasPhysics = false;
public $isSolid = false;
public $isFullBlock = true;
protected $id = self::AIR;
protected $meta = 0;
protected $name = "Air";
protected $hardness = 0;
public function __construct(){
}
public function getName(){
return "Air";
}
public function isBreakable(Item $item){
return false;
}
public function canBeFlowedInto(){
return true;
}
public function canBeReplaced(){
return true;
}
public function canBePlaced(){
return false;
}
public function isSolid(){
return false;
}
public function getBoundingBox(){
return null;
}

View File

@ -28,13 +28,25 @@ use pocketmine\network\protocol\ChatPacket;
use pocketmine\Player;
class Bed extends Transparent{
public function __construct($type = 0){
parent::__construct(self::BED_BLOCK, $type, "Bed Block");
$this->isActivable = true;
$this->isFullBlock = false;
$this->hardness = 1;
protected $id = self::BED_BLOCK;
public function __construct($meta = 0){
$this->meta = $meta;
}
public function canBeActivated(){
return true;
}
public function getHardness(){
return 1;
}
public function getName(){
return "Bed Block";
}
protected function recalculateBoundingBox(){
return new AxisAlignedBB(
$this->x,

View File

@ -24,12 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Bedrock extends Solid{
protected $id = self::BEDROCK;
public function __construct(){
parent::__construct(self::BEDROCK, 0, "Bedrock");
$this->breakable = false;
$this->hardness = 18000000;
}
public function getName(){
return "Bedrock";
}
public function getHardness(){
return 18000000;
}
public function isBreakable(Item $item){
return false;
}

View File

@ -24,10 +24,17 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Beetroot extends Crops{
protected $id = self::BEETROOT_BLOCK;
public function __construct($meta = 0){
parent::__construct(self::BEETROOT_BLOCK, $meta, "Beetroot Block");
$this->meta = $meta;
}
public function getName(){
return "Beetroot Block";
}
public function getDrops(Item $item){
$drops = [];
if($this->meta >= 0x07){

View File

@ -24,10 +24,17 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class BirchWoodStairs extends Stair{
protected $id = self::BIRCH_WOOD_STAIRS;
public function __construct($meta = 0){
parent::__construct(self::BIRCH_WOOD_STAIRS, $meta, "Birch Wood Stairs");
$this->meta = $meta;
}
public function getName(){
return "Birch Wood Stairs";
}
public function getDrops(Item $item){
return [
[$this->id, 0, 1],

View File

@ -180,7 +180,7 @@ class Block extends Position implements Metadatable{
const NETHER_BRICKS_STAIRS = 114;
const END_PORTAL = 120;
const END_PORTAL_FRAME = 120;
const END_STONE = 121;
const SANDSTONE_STAIRS = 128;
@ -536,30 +536,40 @@ class Block extends Position implements Metadatable{
public static $solid = null;
/** @var \SplFixedArray */
public static $transparent = null;
protected $id;
protected $meta;
protected $name = "Unknown";
protected $breakTime = 0.20;
protected $hardness = 10;
public $hasEntityCollision = false;
public $isActivable = false;
public $breakable = true;
public $isFlowable = false;
public $isSolid = true;
public $isTransparent = false;
public $isReplaceable = false;
public $isPlaceable = true;
public $hasPhysics = false;
public $isFullBlock = true;
public $lightLevel = 0;
public $x = 0;
public $y = 0;
public $z = 0;
public $frictionFactor = 0.6;
protected $meta = 0;
/** @var AxisAlignedBB */
protected $boundingBox = null;
/**
* Backwards-compatibility with old way to define block properties
*
* @deprecated
*
* @param string $key
*
* @return mixed
*/
public function __get($key){
static $map = [
"breakTime" => "getBreakTime",
"hardness" => "getHardness",
"lightLevel" => "getLightLevel",
"frictionFactor" => "getFrictionFactor",
"name" => "getName",
"isPlaceable" => "canBePlaced",
"isReplaceable" => "canBeReplaced",
"isTransparent" => "isTransparent",
"isSolid" => "isSolid",
"isFlowable" => "canBeFlowedInto",
"isActivable" => "canBeActivated",
"hasEntityCollision" => "hasEntityCollision"
];
return isset($map[$key]) ? $this->{$map[$key]}() : null;
}
public static function init(){
if(self::$list === null){
self::$list = new \SplFixedArray(256);
@ -567,136 +577,136 @@ class Block extends Position implements Metadatable{
self::$lightFilter = new \SplFixedArray(256);
self::$solid = new \SplFixedArray(256);
self::$transparent = new \SplFixedArray(256);
self::$list[self::AIR] = Air::class;;
self::$list[self::STONE] = Stone::class;;
self::$list[self::GRASS] = Grass::class;;
self::$list[self::DIRT] = Dirt::class;;
self::$list[self::COBBLESTONE] = Cobblestone::class;;
self::$list[self::PLANKS] = Planks::class;;
self::$list[self::SAPLING] = Sapling::class;;
self::$list[self::BEDROCK] = Bedrock::class;;
self::$list[self::WATER] = Water::class;;
self::$list[self::STILL_WATER] = StillWater::class;;
self::$list[self::LAVA] = Lava::class;;
self::$list[self::STILL_LAVA] = StillLava::class;;
self::$list[self::SAND] = Sand::class;;
self::$list[self::GRAVEL] = Gravel::class;;
self::$list[self::GOLD_ORE] = GoldOre::class;;
self::$list[self::IRON_ORE] = IronOre::class;;
self::$list[self::COAL_ORE] = CoalOre::class;;
self::$list[self::WOOD] = Wood::class;;
self::$list[self::LEAVES] = Leaves::class;;
self::$list[self::SPONGE] = Sponge::class;;
self::$list[self::GLASS] = Glass::class;;
self::$list[self::LAPIS_ORE] = LapisOre::class;;
self::$list[self::LAPIS_BLOCK] = Lapis::class;;
self::$list[self::SANDSTONE] = Sandstone::class;;
self::$list[self::BED_BLOCK] = Bed::class;;
self::$list[self::COBWEB] = Cobweb::class;;
self::$list[self::TALL_GRASS] = TallGrass::class;;
self::$list[self::DEAD_BUSH] = DeadBush::class;;
self::$list[self::WOOL] = Wool::class;;
self::$list[self::DANDELION] = Dandelion::class;;
self::$list[self::POPPY] = CyanFlower::class;;
self::$list[self::BROWN_MUSHROOM] = BrownMushroom::class;;
self::$list[self::RED_MUSHROOM] = RedMushroom::class;;
self::$list[self::GOLD_BLOCK] = Gold::class;;
self::$list[self::IRON_BLOCK] = Iron::class;;
self::$list[self::DOUBLE_SLAB] = DoubleSlab::class;;
self::$list[self::SLAB] = Slab::class;;
self::$list[self::BRICKS_BLOCK] = Bricks::class;;
self::$list[self::TNT] = TNT::class;;
self::$list[self::BOOKSHELF] = Bookshelf::class;;
self::$list[self::MOSS_STONE] = MossStone::class;;
self::$list[self::OBSIDIAN] = Obsidian::class;;
self::$list[self::TORCH] = Torch::class;;
self::$list[self::FIRE] = Fire::class;;
self::$list[self::MONSTER_SPAWNER] = MonsterSpawner::class;;
self::$list[self::WOOD_STAIRS] = WoodStairs::class;;
self::$list[self::CHEST] = Chest::class;;
self::$list[self::AIR] = Air::class;
self::$list[self::STONE] = Stone::class;
self::$list[self::GRASS] = Grass::class;
self::$list[self::DIRT] = Dirt::class;
self::$list[self::COBBLESTONE] = Cobblestone::class;
self::$list[self::PLANKS] = Planks::class;
self::$list[self::SAPLING] = Sapling::class;
self::$list[self::BEDROCK] = Bedrock::class;
self::$list[self::WATER] = Water::class;
self::$list[self::STILL_WATER] = StillWater::class;
self::$list[self::LAVA] = Lava::class;
self::$list[self::STILL_LAVA] = StillLava::class;
self::$list[self::SAND] = Sand::class;
self::$list[self::GRAVEL] = Gravel::class;
self::$list[self::GOLD_ORE] = GoldOre::class;
self::$list[self::IRON_ORE] = IronOre::class;
self::$list[self::COAL_ORE] = CoalOre::class;
self::$list[self::WOOD] = Wood::class;
self::$list[self::LEAVES] = Leaves::class;
self::$list[self::SPONGE] = Sponge::class;
self::$list[self::GLASS] = Glass::class;
self::$list[self::LAPIS_ORE] = LapisOre::class;
self::$list[self::LAPIS_BLOCK] = Lapis::class;
self::$list[self::SANDSTONE] = Sandstone::class;
self::$list[self::BED_BLOCK] = Bed::class;
self::$list[self::COBWEB] = Cobweb::class;
self::$list[self::TALL_GRASS] = TallGrass::class;
self::$list[self::DEAD_BUSH] = DeadBush::class;
self::$list[self::WOOL] = Wool::class;
self::$list[self::DANDELION] = Dandelion::class;
self::$list[self::POPPY] = Poppy::class;
self::$list[self::BROWN_MUSHROOM] = BrownMushroom::class;
self::$list[self::RED_MUSHROOM] = RedMushroom::class;
self::$list[self::GOLD_BLOCK] = Gold::class;
self::$list[self::IRON_BLOCK] = Iron::class;
self::$list[self::DOUBLE_SLAB] = DoubleSlab::class;
self::$list[self::SLAB] = Slab::class;
self::$list[self::BRICKS_BLOCK] = Bricks::class;
self::$list[self::TNT] = TNT::class;
self::$list[self::BOOKSHELF] = Bookshelf::class;
self::$list[self::MOSS_STONE] = MossStone::class;
self::$list[self::OBSIDIAN] = Obsidian::class;
self::$list[self::TORCH] = Torch::class;
self::$list[self::FIRE] = Fire::class;
self::$list[self::MONSTER_SPAWNER] = MonsterSpawner::class;
self::$list[self::WOOD_STAIRS] = WoodStairs::class;
self::$list[self::CHEST] = Chest::class;
self::$list[self::DIAMOND_ORE] = DiamondOre::class;;
self::$list[self::DIAMOND_BLOCK] = Diamond::class;;
self::$list[self::WORKBENCH] = Workbench::class;;
self::$list[self::WHEAT_BLOCK] = Wheat::class;;
self::$list[self::FARMLAND] = Farmland::class;;
self::$list[self::FURNACE] = Furnace::class;;
self::$list[self::BURNING_FURNACE] = BurningFurnace::class;;
self::$list[self::SIGN_POST] = SignPost::class;;
self::$list[self::WOOD_DOOR_BLOCK] = WoodDoor::class;;
self::$list[self::LADDER] = Ladder::class;;
self::$list[self::DIAMOND_ORE] = DiamondOre::class;
self::$list[self::DIAMOND_BLOCK] = Diamond::class;
self::$list[self::WORKBENCH] = Workbench::class;
self::$list[self::WHEAT_BLOCK] = Wheat::class;
self::$list[self::FARMLAND] = Farmland::class;
self::$list[self::FURNACE] = Furnace::class;
self::$list[self::BURNING_FURNACE] = BurningFurnace::class;
self::$list[self::SIGN_POST] = SignPost::class;
self::$list[self::WOOD_DOOR_BLOCK] = WoodDoor::class;
self::$list[self::LADDER] = Ladder::class;
self::$list[self::COBBLESTONE_STAIRS] = CobblestoneStairs::class;;
self::$list[self::WALL_SIGN] = WallSign::class;;
self::$list[self::COBBLESTONE_STAIRS] = CobblestoneStairs::class;
self::$list[self::WALL_SIGN] = WallSign::class;
self::$list[self::IRON_DOOR_BLOCK] = IronDoor::class;;
self::$list[self::REDSTONE_ORE] = RedstoneOre::class;;
self::$list[self::GLOWING_REDSTONE_ORE] = GlowingRedstoneOre::class;;
self::$list[self::IRON_DOOR_BLOCK] = IronDoor::class;
self::$list[self::REDSTONE_ORE] = RedstoneOre::class;
self::$list[self::GLOWING_REDSTONE_ORE] = GlowingRedstoneOre::class;
self::$list[self::SNOW_LAYER] = SnowLayer::class;;
self::$list[self::ICE] = Ice::class;;
self::$list[self::SNOW_BLOCK] = Snow::class;;
self::$list[self::CACTUS] = Cactus::class;;
self::$list[self::CLAY_BLOCK] = Clay::class;;
self::$list[self::SUGARCANE_BLOCK] = Sugarcane::class;;
self::$list[self::SNOW_LAYER] = SnowLayer::class;
self::$list[self::ICE] = Ice::class;
self::$list[self::SNOW_BLOCK] = Snow::class;
self::$list[self::CACTUS] = Cactus::class;
self::$list[self::CLAY_BLOCK] = Clay::class;
self::$list[self::SUGARCANE_BLOCK] = Sugarcane::class;
self::$list[self::FENCE] = Fence::class;;
self::$list[self::PUMPKIN] = Pumpkin::class;;
self::$list[self::NETHERRACK] = Netherrack::class;;
self::$list[self::SOUL_SAND] = SoulSand::class;;
self::$list[self::GLOWSTONE_BLOCK] = Glowstone::class;;
self::$list[self::FENCE] = Fence::class;
self::$list[self::PUMPKIN] = Pumpkin::class;
self::$list[self::NETHERRACK] = Netherrack::class;
self::$list[self::SOUL_SAND] = SoulSand::class;
self::$list[self::GLOWSTONE_BLOCK] = Glowstone::class;
self::$list[self::LIT_PUMPKIN] = LitPumpkin::class;;
self::$list[self::CAKE_BLOCK] = Cake::class;;
self::$list[self::LIT_PUMPKIN] = LitPumpkin::class;
self::$list[self::CAKE_BLOCK] = Cake::class;
self::$list[self::TRAPDOOR] = Trapdoor::class;;
self::$list[self::TRAPDOOR] = Trapdoor::class;
self::$list[self::STONE_BRICKS] = StoneBricks::class;;
self::$list[self::STONE_BRICKS] = StoneBricks::class;
self::$list[self::IRON_BARS] = IronBars::class;;
self::$list[self::GLASS_PANE] = GlassPane::class;;
self::$list[self::MELON_BLOCK] = Melon::class;;
self::$list[self::PUMPKIN_STEM] = PumpkinStem::class;;
self::$list[self::MELON_STEM] = MelonStem::class;;
self::$list[self::VINE] = Vine::class;;
self::$list[self::FENCE_GATE] = FenceGate::class;;
self::$list[self::BRICK_STAIRS] = BrickStairs::class;;
self::$list[self::STONE_BRICK_STAIRS] = StoneBrickStairs::class;;
self::$list[self::IRON_BARS] = IronBars::class;
self::$list[self::GLASS_PANE] = GlassPane::class;
self::$list[self::MELON_BLOCK] = Melon::class;
self::$list[self::PUMPKIN_STEM] = PumpkinStem::class;
self::$list[self::MELON_STEM] = MelonStem::class;
self::$list[self::VINE] = Vine::class;
self::$list[self::FENCE_GATE] = FenceGate::class;
self::$list[self::BRICK_STAIRS] = BrickStairs::class;
self::$list[self::STONE_BRICK_STAIRS] = StoneBrickStairs::class;
self::$list[self::MYCELIUM] = Mycelium::class;;
self::$list[self::NETHER_BRICKS] = NetherBrick::class;;
self::$list[self::MYCELIUM] = Mycelium::class;
self::$list[self::NETHER_BRICKS] = NetherBrick::class;
self::$list[self::NETHER_BRICKS_STAIRS] = NetherBrickStairs::class;;
self::$list[self::NETHER_BRICKS_STAIRS] = NetherBrickStairs::class;
self::$list[self::END_PORTAL] = EndPortal::class;;
self::$list[self::END_STONE] = EndStone::class;;
self::$list[self::SANDSTONE_STAIRS] = SandstoneStairs::class;;
self::$list[self::EMERALD_ORE] = EmeraldOre::class;;
self::$list[self::END_PORTAL_FRAME] = EndPortalFrame::class;
self::$list[self::END_STONE] = EndStone::class;
self::$list[self::SANDSTONE_STAIRS] = SandstoneStairs::class;
self::$list[self::EMERALD_ORE] = EmeraldOre::class;
self::$list[self::EMERALD_BLOCK] = Emerald::class;;
self::$list[self::SPRUCE_WOOD_STAIRS] = SpruceWoodStairs::class;;
self::$list[self::BIRCH_WOOD_STAIRS] = BirchWoodStairs::class;;
self::$list[self::JUNGLE_WOOD_STAIRS] = JungleWoodStairs::class;;
self::$list[self::STONE_WALL] = StoneWall::class;;
self::$list[self::EMERALD_BLOCK] = Emerald::class;
self::$list[self::SPRUCE_WOOD_STAIRS] = SpruceWoodStairs::class;
self::$list[self::BIRCH_WOOD_STAIRS] = BirchWoodStairs::class;
self::$list[self::JUNGLE_WOOD_STAIRS] = JungleWoodStairs::class;
self::$list[self::STONE_WALL] = StoneWall::class;
self::$list[self::CARROT_BLOCK] = Carrot::class;;
self::$list[self::POTATO_BLOCK] = Potato::class;;
self::$list[self::CARROT_BLOCK] = Carrot::class;
self::$list[self::POTATO_BLOCK] = Potato::class;
self::$list[self::QUARTZ_BLOCK] = Quartz::class;;
self::$list[self::QUARTZ_STAIRS] = QuartzStairs::class;;
self::$list[self::DOUBLE_WOOD_SLAB] = DoubleWoodSlab::class;;
self::$list[self::WOOD_SLAB] = WoodSlab::class;;
self::$list[self::STAINED_CLAY] = StainedClay::class;;
self::$list[self::QUARTZ_BLOCK] = Quartz::class;
self::$list[self::QUARTZ_STAIRS] = QuartzStairs::class;
self::$list[self::DOUBLE_WOOD_SLAB] = DoubleWoodSlab::class;
self::$list[self::WOOD_SLAB] = WoodSlab::class;
self::$list[self::STAINED_CLAY] = StainedClay::class;
self::$list[self::LEAVES2] = Leaves2::class;;
self::$list[self::WOOD2] = Wood2::class;;
self::$list[self::ACACIA_WOOD_STAIRS] = AcaciaWoodStairs::class;;
self::$list[self::DARK_OAK_WOOD_STAIRS] = DarkOakWoodStairs::class;;
self::$list[self::LEAVES2] = Leaves2::class;
self::$list[self::WOOD2] = Wood2::class;
self::$list[self::ACACIA_WOOD_STAIRS] = AcaciaWoodStairs::class;
self::$list[self::DARK_OAK_WOOD_STAIRS] = DarkOakWoodStairs::class;
self::$list[self::HAY_BALE] = HayBale::class;;
self::$list[self::CARPET] = Carpet::class;;
self::$list[self::HARDENED_CLAY] = HardenedClay::class;;
self::$list[self::COAL_BLOCK] = Coal::class;;
self::$list[self::HAY_BALE] = HayBale::class;
self::$list[self::CARPET] = Carpet::class;
self::$list[self::HARDENED_CLAY] = HardenedClay::class;
self::$list[self::COAL_BLOCK] = Coal::class;
self::$list[self::FENCE_GATE_SPRUCE] = FenceGateSpruce::class;
self::$list[self::FENCE_GATE_BIRCH] = FenceGateBirch::class;
@ -719,12 +729,12 @@ class Block extends Position implements Metadatable{
if($class !== null){
/** @var Block $block */
$block = new $class();
self::$solid[$id] = (bool) $block->isSolid;
self::$transparent[$id] = (bool) $block->isTransparent;
self::$light[$id] = (int) $block->lightLevel;
self::$solid[$id] = $block->isSolid();
self::$transparent[$id] = $block->isTransparent();
self::$light[$id] = $block->getLightLevel();
if($block->isSolid){
if($block->isTransparent){
if($block->isSolid()){
if($block->isTransparent()){
if($block instanceof Liquid or $block instanceof Ice){
self::$lightFilter[$id] = 2;
}else{
@ -775,12 +785,10 @@ class Block extends Position implements Metadatable{
/**
* @param int $id
* @param int $meta
* @param string $name
*/
public function __construct($id, $meta = 0, $name = "Unknown"){
public function __construct($id, $meta = 0){
$this->id = (int) $id;
$this->meta = (int) $meta;
$this->name = $name;
}
/**
@ -809,7 +817,7 @@ class Block extends Position implements Metadatable{
* @return bool
*/
public function isBreakable(Item $item){
return $this->breakable;
return true;
}
/**
@ -843,21 +851,86 @@ class Block extends Position implements Metadatable{
* @return bool
*/
public function onActivate(Item $item, Player $player = null){
return $this->isActivable;
return false;
}
/**
* @return int
*/
final public function getHardness(){
return $this->hardness;
public function getHardness(){
return 10;
}
/**
* @return float
*/
public function getFrictionFactor(){
return 0.6;
}
/**
* @return int 0-15
*/
public function getLightLevel(){
return 0;
}
/**
* AKA: Block->isPlaceable
*
* @return bool
*/
public function canBePlaced(){
return true;
}
/**
* AKA: Block->isReplaceable
*
* @return bool
*/
public function canBeReplaced(){
return false;
}
/**
* @return bool
*/
public function isTransparent(){
return false;
}
public function isSolid(){
return true;
}
/**
* AKA: Block->isFlowable
*
* @return bool
*/
public function canBeFlowedInto(){
return false;
}
/**
* AKA: Block->isActivable
*
* @return bool
*/
public function canBeActivated(){
return false;
}
public function hasEntityCollision(){
return false;
}
/**
* @return string
*/
final public function getName(){
return $this->name;
public function getName(){
return "Unknown";
}
/**
@ -922,7 +995,7 @@ class Block extends Position implements Metadatable{
* @return float
*/
public function getBreakTime(Item $item){
return $this->breakTime;
return 0.20;
}
/**
@ -945,8 +1018,8 @@ class Block extends Position implements Metadatable{
/**
* @return string
*/
final public function __toString(){
return "Block " . $this->name . " (" . $this->id . ":" . $this->meta . ")";
public function __toString(){
return "Block[" . $this->getName() . "] (" . $this->id . ":" . $this->meta . ")";
}
/**

View File

@ -23,9 +23,19 @@ namespace pocketmine\block;
class Bookshelf extends Solid{
protected $id = self::BOOKSHELF;
public function __construct(){
parent::__construct(self::BOOKSHELF, 0, "Bookshelf");
$this->hardness = 7.5;
}
public function getName(){
return "Bookshelf";
}
public function getHardness(){
return 7.5;
}
}

View File

@ -23,8 +23,15 @@ namespace pocketmine\block;
class BrickStairs extends Stair{
protected $id = self::BRICK_STAIRS;
public function __construct($meta = 0){
parent::__construct(self::BRICK_STAIRS, $meta, "Brick Stairs");
$this->meta = $meta;
}
public function getName(){
return "Brick Stairs";
}
}

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Bricks extends Solid{
protected $id = self::BRICKS_BLOCK;
public function __construct(){
parent::__construct(self::BRICKS_BLOCK, 0, "Bricks");
$this->hardness = 30;
}
public function getHardness(){
return 30;
}
public function getName(){
return "Bricks";
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -27,13 +27,20 @@ use pocketmine\Player;
class BrownMushroom extends Flowable{
public $lightLevel = 1;
protected $id = self::BROWN_MUSHROOM;
public function __construct(){
parent::__construct(self::BROWN_MUSHROOM, 0, "Brown Mushroom");
$this->hardness = 0;
public function __construct($meta = 0){
$this->meta = $meta;
}
public function getName(){
return "Brown Mushroom";
}
public function getLightLevel(){
return 1;
}
public function onUpdate($type){
if($type === Level::BLOCK_UPDATE_NORMAL){
if($this->getSide(0)->isTransparent === true){

View File

@ -33,14 +33,28 @@ use pocketmine\tile\Tile;
class BurningFurnace extends Solid{
public $lightLevel = 13;
protected $id = self::BURNING_FURNACE;
public function __construct($meta = 0){
parent::__construct(self::BURNING_FURNACE, $meta, "Burning Furnace");
$this->isActivable = true;
$this->hardness = 17.5;
$this->meta = $meta;
}
public function getName(){
return "Burning Furnace";
}
public function canBeActivated(){
return true;
}
public function getHardness(){
return 17.5;
}
public function getLightLevel(){
return 13;
}
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){
$faces = [
0 => 4,

View File

@ -34,14 +34,24 @@ use pocketmine\Server;
class Cactus extends Transparent{
public $hasEntityCollision = true;
protected $id = self::CACTUS;
public function __construct($meta = 0){
parent::__construct(self::CACTUS, $meta, "Cactus");
$this->isFullBlock = false;
$this->hardness = 2;
$this->meta = $meta;
}
public function getHardness(){
return 2;
}
public function hasEntityCollision(){
return true;
}
public function getName(){
return "Cactus";
}
protected function recalculateBoundingBox(){
return new AxisAlignedBB(

View File

@ -29,14 +29,25 @@ use pocketmine\Player;
use pocketmine\Server;
class Cake extends Transparent{
protected $id = self::CAKE_BLOCK;
public function __construct($meta = 0){
parent::__construct(self::CAKE_BLOCK, 0, "Cake Block");
$this->isFullBlock = false;
$this->isActivable = true;
$this->meta = $meta & 0x07;
$this->hardness = 2.5;
$this->meta = $meta & 0x07;
}
public function canBeActivated(){
return true;
}
public function getHardness(){
return 2.5;
}
public function getName(){
return "Cake Block";
}
protected function recalculateBoundingBox(){
$f = (1 + $this->getDamage() * 2) / 16;

View File

@ -27,32 +27,39 @@ use pocketmine\math\AxisAlignedBB;
use pocketmine\Player;
class Carpet extends Flowable{
protected $id = self::CARPET;
public function __construct($meta = 0){
parent::__construct(self::CARPET, $meta, "Carpet");
$names = [
0 => "White Carpet",
1 => "Orange Carpet",
2 => "Magenta Carpet",
3 => "Light Blue Carpet",
4 => "Yellow Carpet",
5 => "Lime Carpet",
6 => "Pink Carpet",
7 => "Gray Carpet",
8 => "Light Gray Carpet",
9 => "Cyan Carpet",
10 => "Purple Carpet",
11 => "Blue Carpet",
12 => "Brown Carpet",
13 => "Green Carpet",
14 => "Red Carpet",
15 => "Black Carpet",
];
$this->name = $names[$this->meta];
$this->hardness = 0;
$this->isFullBlock = false;
$this->isSolid = true;
$this->meta = $meta;
}
public function isSolid(){
return true;
}
public function getName(){
static $names = [
0 => "White Carpet",
1 => "Orange Carpet",
2 => "Magenta Carpet",
3 => "Light Blue Carpet",
4 => "Yellow Carpet",
5 => "Lime Carpet",
6 => "Pink Carpet",
7 => "Gray Carpet",
8 => "Light Gray Carpet",
9 => "Cyan Carpet",
10 => "Purple Carpet",
11 => "Blue Carpet",
12 => "Brown Carpet",
13 => "Green Carpet",
14 => "Red Carpet",
15 => "Black Carpet",
];
return $names[$this->meta];
}
protected function recalculateBoundingBox(){
return new AxisAlignedBB(

View File

@ -24,10 +24,17 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Carrot extends Crops{
protected $id = self::CARROT_BLOCK;
public function __construct($meta = 0){
parent::__construct(self::CARROT_BLOCK, $meta, "Carrot Block");
$this->meta = $meta;
}
public function getName(){
return "Carrot Block";
}
public function getDrops(Item $item){
$drops = [];
if($this->meta >= 0x07){

View File

@ -34,16 +34,25 @@ use pocketmine\tile\Tile;
class Chest extends Transparent{
const SLOTS = 27;
protected $id = self::CHEST;
public function __construct($meta = 0){
parent::__construct(self::CHEST, $meta, "Chest");
$this->isActivable = true;
$this->hardness = 15;
$this->meta = $meta;
}
protected function recalculateBoundingBox(){
public function canBeActivated(){
return true;
}
public function getHardness(){
return 15;
}
public function getName(){
return "Chest";
}
protected function recalculateBoundingBox(){
return new AxisAlignedBB(
$this->x + 0.0625,
$this->y,

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Clay extends Solid{
protected $id = self::CLAY_BLOCK;
public function __construct(){
parent::__construct(self::CLAY_BLOCK, 0, "Clay Block");
$this->hardness = 3;
}
public function getHardness(){
return 3;
}
public function getName(){
return "Clay Block";
}
public function getDrops(Item $item){
return [
[Item::CLAY, 0, 4],

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Coal extends Solid{
protected $id = self::COAL_BLOCK;
public function __construct(){
parent::__construct(self::COAL_BLOCK, 0, "Coal Block");
$this->hardness = 30;
}
public function getHardness(){
return 30;
}
public function getName(){
return "Coal Block";
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class CoalOre extends Solid{
protected $id = self::COAL_ORE;
public function __construct(){
parent::__construct(self::COAL_ORE, 0, "Coal Ore");
$this->hardness = 15;
}
public function getHardness(){
return 15;
}
public function getName(){
return "Coal Ore";
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Cobblestone extends Solid{
protected $id = self::COBBLESTONE;
public function __construct(){
parent::__construct(self::COBBLESTONE, 0, "Cobblestone");
$this->hardness = 30;
}
public function getName(){
return "Cobblestone";
}
public function getHardness(){
return 30;
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -23,8 +23,15 @@ namespace pocketmine\block;
class CobblestoneStairs extends Stair{
protected $id = self::COBBLESTONE_STAIRS;
public function __construct($meta = 0){
parent::__construct(self::COBBLESTONE_STAIRS, $meta, "Cobblestone Stairs");
$this->meta = $meta;
}
public function getName(){
return "Cobblestone Stairs";
}
}

View File

@ -26,20 +26,30 @@ use pocketmine\item\Item;
class Cobweb extends Flowable{
public $hasEntityCollision = true;
protected $id = self::COBWEB;
public function __construct(){
parent::__construct(self::COBWEB, 0, "Cobweb");
$this->isSolid = true;
$this->isFullBlock = false;
$this->hardness = 25;
}
public function hasEntityCollision(){
return true;
}
public function getName(){
return "Cobweb";
}
public function getHardness(){
return 25;
}
public function onEntityCollide(Entity $entity){
$entity->fallDistance = 0;
}
public function getDrops(Item $item){
//TODO: correct drops
return [];
}
}

View File

@ -29,13 +29,9 @@ use pocketmine\Server;
abstract class Crops extends Flowable{
public $isActivable = true;
public $hardness = 0;
public function getBoundingBox(){
return null;
}
public function canBeActivated(){
return true;
}
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){
$down = $this->getSide(0);

View File

@ -26,14 +26,16 @@ use pocketmine\level\Level;
use pocketmine\Player;
class Dandelion extends Flowable{
protected $id = self::DANDELION;
public function __construct(){
parent::__construct(self::DANDELION, 0, "Dandelion");
$this->hardness = 0;
}
public function getBoundingBox(){
return null;
}
public function getName(){
return "Dandelion";
}
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){
@ -49,7 +51,7 @@ class Dandelion extends Flowable{
public function onUpdate($type){
if($type === Level::BLOCK_UPDATE_NORMAL){
if($this->getSide(0)->isTransparent === true){
if($this->getSide(0)->isTransparent() === true){
$this->getLevel()->useBreakOn($this);
return Level::BLOCK_UPDATE_NORMAL;

View File

@ -24,10 +24,17 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class DarkOakWoodStairs extends Stair{
protected $id = self::DARK_OAK_WOOD_STAIRS;
public function __construct($meta = 0){
parent::__construct(self::DARK_OAK_WOOD_STAIRS, $meta, "Dark Oak Wood Stairs");
$this->meta = $meta;
}
public function getName(){
return "Dark Oak Wood Stairs";
}
public function getDrops(Item $item){
return [
[$this->id, 0, 1],

View File

@ -24,21 +24,22 @@ namespace pocketmine\block;
use pocketmine\level\Level;
class DeadBush extends Flowable{
public function __construct(){
parent::__construct(self::DEAD_BUSH, 0, "Dead Bush");
//$this->isReplaceable = true;
$this->hardness = 0;
protected $id = self::DEAD_BUSH;
public function __construct($meta = 0){
$this->meta = $meta;
}
public function getBoundingBox(){
return null;
}
public function getName(){
return "Dead Bush";
}
public function onUpdate($type){
if($type === Level::BLOCK_UPDATE_NORMAL){
if($this->getSide(0)->isTransparent === true){ //Replace with common break method
$this->getLevel()->setBlock($this, new Air(), false, false, true);
if($this->getSide(0)->isTransparent() === true){
$this->getLevel()->useBreakOn($this);
return Level::BLOCK_UPDATE_NORMAL;
}

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Diamond extends Solid{
protected $id = self::DIAMOND_BLOCK;
public function __construct(){
parent::__construct(self::DIAMOND_BLOCK, 0, "Diamond Block");
$this->hardness = 30;
}
public function getHardness(){
return 30;
}
public function getName(){
return "Diamond Block";
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class DiamondOre extends Solid{
protected $id = self::DIAMOND_ORE;
public function __construct(){
parent::__construct(self::DIAMOND_ORE, 0, "Diamond Ore");
$this->hardness = 15;
}
public function getHardness(){
return 15;
}
public function getName(){
return "Diamond Ore";
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -26,16 +26,24 @@ use pocketmine\Player;
class Dirt extends Solid{
public $isActivable = true;
protected $hardness = 2.5;
protected $id = self::DIRT;
protected $meta = 0;
protected $name = "Dirt";
public function __construct(){
}
public function canBeActivated(){
return true;
}
public function getHardness(){
return 2.5;
}
public function getName(){
return "Dirt";
}
public function onActivate(Item $item, Player $player = null){
if($item->isHoe()){
$item->useOn($this);

View File

@ -30,10 +30,14 @@ use pocketmine\Server;
abstract class Door extends Transparent{
public function __construct($id, $meta = 0, $name = "Unknown"){
parent::__construct($id, $meta, $name);
$this->isSolid = false;
}
public function canBeActivated(){
return true;
}
public function isSolid(){
return false;
}
private function getFullDamage(){
$damage = $this->getDamage();

View File

@ -24,22 +24,31 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class DoubleSlab extends Solid{
protected $id = self::DOUBLE_SLAB;
public function __construct($meta = 0){
parent::__construct(self::DOUBLE_SLAB, $meta, "Double Slab");
$names = [
0 => "Stone",
1 => "Sandstone",
2 => "Wooden",
3 => "Cobblestone",
4 => "Brick",
5 => "Stone Brick",
6 => "Quartz",
7 => "",
];
$this->name = "Double " . $names[$this->meta & 0x07] . " Slab";
$this->hardness = 30;
$this->meta = $meta;
}
public function getHardness(){
return 30;
}
public function getName(){
static $names = [
0 => "Stone",
1 => "Sandstone",
2 => "Wooden",
3 => "Cobblestone",
4 => "Brick",
5 => "Stone Brick",
6 => "Quartz",
7 => "",
];
return "Double " . $names[$this->meta & 0x07] . " Slab";
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -24,20 +24,31 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class DoubleWoodSlab extends Solid{
protected $id = self::DOUBLE_WOOD_SLAB;
public function __construct($meta = 0){
parent::__construct(self::DOUBLE_WOOD_SLAB, $meta, "Double Wooden Slab");
$names = [
0 => "Oak",
1 => "Spruce",
2 => "Birch",
3 => "Jungle",
4 => "Acacia",
5 => "Dark Oak",
];
$this->name = "Double " . $names[$this->meta & 0x07] . " Wooden Slab";
$this->hardness = 15;
$this->meta = $meta;
}
public function getHardness(){
return 15;
}
public function getName(){
static $names = [
0 => "Oak",
1 => "Spruce",
2 => "Birch",
3 => "Jungle",
4 => "Acacia",
5 => "Dark Oak",
6 => "",
7 => ""
];
return "Double " . $names[$this->meta & 0x07] . " Wooden Slab";
}
public function getBreakTime(Item $item){
switch($item->isAxe()){
case 5:

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Emerald extends Solid{
protected $id = self::EMERALD_BLOCK;
public function __construct(){
parent::__construct(self::EMERALD_BLOCK, 0, "Emerald Block");
$this->hardness = 30;
}
public function getHardness(){
return 30;
}
public function getName(){
return "Emerald Block";
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class EmeraldOre extends Solid{
protected $id = self::EMERALD_ORE;
public function __construct(){
parent::__construct(self::EMERALD_ORE, 0, "Emerald Ore");
$this->hardness = 15;
}
public function getName(){
return "Emerald Ore";
}
public function getHardness(){
return 15;
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -21,17 +21,33 @@
namespace pocketmine\block;
use pocketmine\item\Item;
use pocketmine\math\AxisAlignedBB;
class EndPortal extends Solid{
class EndPortalFrame extends Solid{
public $lightLevel = 1;
protected $id = self::END_PORTAL_FRAME;
public function __construct($meta = 0){
parent::__construct(self::END_PORTAL, $meta, "End Portal");
$this->hardness = 18000000;
$this->meta = $meta;
}
public function getLightLevel(){
return 1;
}
public function getName(){
return "End Portal Frame";
}
public function getHardness(){
return 18000000;
}
public function isBreakable(Item $item){
return false;
}
protected function recalculateBoundingBox(){
return new AxisAlignedBB(

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class EndStone extends Solid{
protected $id = self::END_STONE;
public function __construct(){
parent::__construct(self::END_STONE, 0, "End Stone");
$this->hardness = 45;
}
public function getName(){
return "End Stone";
}
public function getHardness(){
return 45;
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -34,8 +34,6 @@ use pocketmine\Player;
abstract class Fallable extends Solid{
public $hasPhysics = true;
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){
$ret = $this->getLevel()->setBlock($this, $this, true, true);
@ -43,7 +41,7 @@ abstract class Fallable extends Solid{
}
public function onUpdate($type){
if($this->hasPhysics === true and $type === Level::BLOCK_UPDATE_NORMAL){
if($type === Level::BLOCK_UPDATE_NORMAL){
$down = $this->getSide(0);
if($down->getID() === self::AIR or ($down instanceof Liquid)){
$fall = Entity::createEntity("FallingSand", $this->getLevel()->getChunk($this->x >> 4, $this->z >> 4), new Compound("", [

View File

@ -25,13 +25,22 @@ use pocketmine\item\Item;
use pocketmine\math\AxisAlignedBB;
class Farmland extends Solid{
protected $id = self::FARMLAND;
public function __construct($meta = 0){
parent::__construct(self::FARMLAND, $meta, "Farmland");
$this->hardness = 3;
$this->meta = $meta;
}
protected function recalculateBoundingBox(){
public function getName(){
return "Farmland";
}
public function getHardness(){
return 3;
}
protected function recalculateBoundingBox(){
return new AxisAlignedBB(
$this->x,
$this->y,

View File

@ -24,12 +24,21 @@ namespace pocketmine\block;
use pocketmine\math\AxisAlignedBB;
class Fence extends Transparent{
protected $id = self::FENCE;
public function __construct(){
parent::__construct(self::FENCE, 0, "Oak Fence");
$this->isFullBlock = false;
$this->hardness = 15;
}
public function getHardness(){
return 15;
}
public function getName(){
return "Oak Fence";
}
protected function recalculateBoundingBox(){
$flag = $this->canConnect($this->getSide(2));

View File

@ -22,9 +22,10 @@
namespace pocketmine\block;
class FenceAcacia extends Fence{
public function __construct(){
Transparent::__construct(self::FENCE_ACACIA, 0, "Acacia Fence");
$this->isFullBlock = false;
$this->hardness = 15;
}
protected $id = self::FENCE_ACACIA;
public function getName(){
return "Acacia Fence";
}
}

View File

@ -22,9 +22,10 @@
namespace pocketmine\block;
class FenceBirch extends Fence{
public function __construct(){
Transparent::__construct(self::FENCE_BIRCH, 0, "Birch Fence");
$this->isFullBlock = false;
$this->hardness = 15;
}
protected $id = self::FENCE_BIRCH;
public function getName(){
return "Birch Fence";
}
}

View File

@ -22,9 +22,10 @@
namespace pocketmine\block;
class FenceDarkOak extends Fence{
public function __construct(){
Transparent::__construct(self::FENCE_DARK_OAK, 0, "Dark Oak Fence");
$this->isFullBlock = false;
$this->hardness = 15;
}
protected $id = self::FENCE_DARK_OAK;
public function getName(){
return "Dark Oak Fence";
}
}

View File

@ -26,17 +26,25 @@ use pocketmine\math\AxisAlignedBB;
use pocketmine\Player;
class FenceGate extends Transparent{
protected $id = self::FENCE_GATE;
public function __construct($meta = 0){
parent::__construct(self::FENCE_GATE, $meta, "Oak Fence Gate");
$this->isActivable = true;
if(($this->meta & 0x04) === 0x04){
$this->isFullBlock = true;
}else{
$this->isFullBlock = false;
}
$this->hardness = 15;
$this->meta = $meta;
}
public function getName(){
return "Oak Fence Gate";
}
public function getHardness(){
return 15;
}
public function canBeActivated(){
return true;
}
protected function recalculateBoundingBox(){
@ -93,11 +101,6 @@ class FenceGate extends Transparent{
3 => 2,
];
$this->meta = ($faces[$player instanceof Player ? $player->getDirection() : 0] & 0x03) | ((~$this->meta) & 0x04);
if(($this->meta & 0x04) === 0x04){
$this->isFullBlock = true;
}else{
$this->isFullBlock = false;
}
$this->getLevel()->setBlock($this, $this, true);
return true;

View File

@ -23,14 +23,10 @@ namespace pocketmine\block;
class FenceGateAcacia extends FenceGate{
public function __construct($meta = 0){
Transparent::__construct(self::FENCE_GATE_ACACIA, $meta, "Acacia Fence Gate");
$this->isActivable = true;
if(($this->meta & 0x04) === 0x04){
$this->isFullBlock = true;
}else{
$this->isFullBlock = false;
}
$this->hardness = 15;
}
protected $id = self::FENCE_GATE_ACACIA;
public function getName(){
return "Acacia Fence Gate";
}
}

View File

@ -23,14 +23,10 @@ namespace pocketmine\block;
class FenceGateBirch extends FenceGate{
public function __construct($meta = 0){
Transparent::__construct(self::FENCE_GATE_BIRCH, $meta, "Birch Fence Gate");
$this->isActivable = true;
if(($this->meta & 0x04) === 0x04){
$this->isFullBlock = true;
}else{
$this->isFullBlock = false;
}
$this->hardness = 15;
}
protected $id = self::FENCE_GATE_BIRCH;
public function getName(){
return "Birch Fence Gate";
}
}

View File

@ -23,14 +23,10 @@ namespace pocketmine\block;
class FenceGateDarkOak extends FenceGate{
public function __construct($meta = 0){
Transparent::__construct(self::FENCE_GATE_DARK_OAK, $meta, "Dark Oak Fence Gate");
$this->isActivable = true;
if(($this->meta & 0x04) === 0x04){
$this->isFullBlock = true;
}else{
$this->isFullBlock = false;
}
$this->hardness = 15;
}
protected $id = self::FENCE_GATE_DARK_OAK;
public function getName(){
return "Dark Oak Fence Gate";
}
}

View File

@ -23,14 +23,10 @@ namespace pocketmine\block;
class FenceGateJungle extends FenceGate{
public function __construct($meta = 0){
Transparent::__construct(self::FENCE_GATE_JUNGLE, $meta, "Jungle Fence Gate");
$this->isActivable = true;
if(($this->meta & 0x04) === 0x04){
$this->isFullBlock = true;
}else{
$this->isFullBlock = false;
}
$this->hardness = 15;
}
protected $id = self::FENCE_GATE_JUNGLE;
public function getName(){
return "Jungle Fence Gate";
}
}

View File

@ -23,14 +23,10 @@ namespace pocketmine\block;
class FenceGateSpruce extends FenceGate{
public function __construct($meta = 0){
Transparent::__construct(self::FENCE_GATE_SPRUCE, $meta, "Spruce Fence Gate");
$this->isActivable = true;
if(($this->meta & 0x04) === 0x04){
$this->isFullBlock = true;
}else{
$this->isFullBlock = false;
}
$this->hardness = 15;
}
protected $id = self::FENCE_GATE_SPRUCE;
public function getName(){
return "Spruce Fence Gate";
}
}

View File

@ -22,9 +22,10 @@
namespace pocketmine\block;
class FenceJungle extends Fence{
public function __construct(){
Transparent::__construct(self::FENCE_JUNGLE, 0, "Jungle Fence");
$this->isFullBlock = false;
$this->hardness = 15;
}
protected $id = self::FENCE_JUNGLE;
public function getName(){
return "Jungle Fence";
}
}

View File

@ -22,9 +22,10 @@
namespace pocketmine\block;
class FenceSpruce extends Fence{
public function __construct(){
Transparent::__construct(self::FENCE_SPRUCE, 0, "Spruce Fence");
$this->isFullBlock = false;
$this->hardness = 15;
}
protected $id = self::FENCE_SPRUCE;
public function getName(){
return "Spruce Fence";
}
}

View File

@ -31,20 +31,31 @@ use pocketmine\Server;
class Fire extends Flowable{
public $hasEntityCollision = true;
public $lightLevel = 15;
protected $id = self::FIRE;
public function __construct($meta = 0){
parent::__construct(self::FIRE, $meta, "Fire");
$this->isReplaceable = true;
$this->breakable = false;
$this->isFullBlock = true;
$this->hardness = 0;
$this->meta = $meta;
}
public function getBoundingBox(){
return null;
}
public function hasEntityCollision(){
return true;
}
public function getName(){
return "Fire Block";
}
public function getLightLevel(){
return 15;
}
public function isBreakable(Item $item){
return false;
}
public function canBeReplaced(){
return true;
}
public function onEntityCollide(Entity $entity){
$ev = new EntityDamageByBlockEvent($this, $entity, EntityDamageEvent::CAUSE_FIRE, 1);

View File

@ -24,8 +24,19 @@ namespace pocketmine\block;
abstract class Flowable extends Transparent{
public $isFlowable = true;
public $isFullBlock = false;
public $isSolid = false;
public function canBeFlowedInto(){
return true;
}
public function isSolid(){
return false;
}
public function getBoundingBox(){
return null;
}
public function getHardness(){
return 0;
}
}

View File

@ -23,10 +23,10 @@ namespace pocketmine\block;
class Furnace extends BurningFurnace{
public function __construct($meta = 0){
parent::__construct($meta);
$this->id = self::FURNACE;
$this->name = "Furnace";
$this->isActivable = true;
}
protected $id = self::FURNACE;
public function getName(){
return "Furnace";
}
}

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Glass extends Transparent{
public function __construct(){
parent::__construct(self::GLASS, 0, "Glass");
$this->hardness = 1.5;
protected $id = self::GLASS;
public function __construct(){
}
public function getName(){
return "Glass";
}
public function getHardness(){
return 1.5;
}
public function getDrops(Item $item){
return [];
}

View File

@ -23,8 +23,19 @@ namespace pocketmine\block;
class GlassPane extends Thin{
public function __construct(){
parent::__construct(self::GLASS_PANE, 0, "Glass Pane");
}
protected $id = self::GLASS_PANE;
public function __construct(){
}
public function getName(){
return "Glass Pane";
}
public function getHardness(){
return 1.5;
}
}

View File

@ -24,10 +24,18 @@ namespace pocketmine\block;
class GlowingObsidian extends Solid{
public $lightLevel = 12;
protected $id = self::GLOWING_OBSIDIAN;
public function __construct($meta = 0){
parent::__construct(self::GLOWING_OBSIDIAN, $meta, "Glowing Obsidian");
$this->meta = $meta;
}
public function getName(){
return "Glowing Obsidian";
}
public function getLightLevel(){
return 12;
}
}

View File

@ -26,13 +26,24 @@ use pocketmine\level\Level;
class GlowingRedstoneOre extends Solid{
public $lightLevel = 9;
protected $id = self::GLOWING_REDSTONE_ORE;
public function __construct(){
parent::__construct(self::GLOWING_REDSTONE_ORE, 0, "Glowing Redstone Ore");
$this->hardness = 15;
}
public function getHardness(){
return 15;
}
public function getName(){
return "Glowing Redstone Ore";
}
public function getLightLevel(){
return 9;
}
public function onUpdate($type){
if($type === Level::BLOCK_UPDATE_SCHEDULED or $type === Level::BLOCK_UPDATE_RANDOM){
$this->getLevel()->setBlock($this, Block::get(Item::REDSTONE_ORE, $this->meta), false, false, true);

View File

@ -25,13 +25,24 @@ use pocketmine\item\Item;
class Glowstone extends Transparent{
public $lightLevel = 15;
protected $id = self::GLOWSTONE_BLOCK;
public function __construct(){
parent::__construct(self::GLOWSTONE_BLOCK, 0, "Glowstone");
$this->hardness = 1.5;
}
public function getName(){
return "Glowstone";
}
public function getHardness(){
return 1.5;
}
public function getLightLevel(){
return 15;
}
public function getDrops(Item $item){
return [
[Item::GLOWSTONE_DUST, 0, mt_rand(2, 4)],

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Gold extends Solid{
protected $id = self::GOLD_BLOCK;
public function __construct(){
parent::__construct(self::GOLD_BLOCK, 0, "Gold Block");
$this->hardness = 30;
}
public function getName(){
return "Gold Block";
}
public function getHardness(){
return 30;
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class GoldOre extends Solid{
protected $id = self::GOLD_ORE;
public function __construct(){
parent::__construct(self::GOLD_ORE, 0, "Gold Ore");
$this->hardness = 15;
}
public function getName(){
return "Gold Ore";
}
public function getHardness(){
return 15;
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -32,16 +32,24 @@ use pocketmine\utils\Random;
class Grass extends Solid{
public $isActivable = true;
protected $hardness = 3;
protected $id = self::GRASS;
protected $meta = 0;
protected $name = "Grass";
public function __construct(){
}
public function canBeActivated(){
return true;
}
public function getName(){
return "Grass";
}
public function getHardness(){
return 3;
}
public function getDrops(Item $item){
return [
[Item::DIRT, 0, 1],

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Gravel extends Fallable{
protected $id = self::GRAVEL;
public function __construct(){
parent::__construct(self::GRAVEL, 0, "Gravel");
$this->hardness = 3;
}
public function getName(){
return "Gravel";
}
public function getHardness(){
return 3;
}
public function getDrops(Item $item){
if(mt_rand(1, 10) === 1){
return [

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class HardenedClay extends Solid{
protected $id = self::HARDENED_CLAY;
public function __construct(){
parent::__construct(self::HARDENED_CLAY, 0, "Hardened Clay");
$this->hardness = 30;
}
public function getName(){
return "Hardened Clay";
}
public function getHardness(){
return 30;
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -25,11 +25,21 @@ use pocketmine\item\Item;
use pocketmine\Player;
class HayBale extends Solid{
protected $id = self::HAY_BALE;
public function __construct($meta = 0){
parent::__construct(self::HAY_BALE, $meta, "Hay Bale");
$this->hardness = 10;
$this->meta = $meta;
}
public function getName(){
return "Hay Bale";
}
public function getHardness(){
return 10;
}
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){
$faces = [
0 => 0,

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Ice extends Transparent{
protected $id = self::ICE;
public function __construct(){
parent::__construct(self::ICE, 0, "Ice");
$this->hardness = 2.5;
}
public function getName(){
return "Ice";
}
public function getHardness(){
return 2.5;
}
public function onBreak(Item $item){
$this->getLevel()->setBlock($this, new Water(), true);

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Iron extends Solid{
protected $id = self::IRON_BLOCK;
public function __construct(){
parent::__construct(self::IRON_BLOCK, 0, "Iron Block");
$this->hardness = 30;
}
public function getName(){
return "Iron Block";
}
public function getHardness(){
return 30;
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -23,8 +23,15 @@ namespace pocketmine\block;
class IronBars extends Thin{
protected $id = self::IRON_BARS;
public function __construct(){
parent::__construct(self::IRON_BARS, 0, "Iron Bars");
}
public function getName(){
return "Iron Bars";
}
}

View File

@ -24,12 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class IronDoor extends Door{
protected $id = self::IRON_DOOR_BLOCK;
public function __construct($meta = 0){
parent::__construct(self::IRON_DOOR_BLOCK, $meta, "Iron Door Block");
//$this->isActivable = true;
$this->hardness = 25;
$this->meta = $meta;
}
public function getName(){
return "Iron Door Block";
}
public function getHardness(){
return 25;
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class IronOre extends Solid{
protected $id = self::IRON_ORE;
public function __construct(){
parent::__construct(self::IRON_ORE, 0, "Iron Ore");
$this->hardness = 15;
}
public function getName(){
return "Iron Ore";
}
public function getHardness(){
return 15;
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -24,10 +24,17 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class JungleWoodStairs extends Stair{
protected $id = self::JUNGLE_WOOD_STAIRS;
public function __construct($meta = 0){
parent::__construct(self::JUNGLE_WOOD_STAIRS, $meta, "Jungle Wood Stairs");
$this->meta = $meta;
}
public function getName(){
return "Jungle Wood Stairs";
}
public function getDrops(Item $item){
return [
[$this->id, 0, 1],

View File

@ -29,15 +29,28 @@ use pocketmine\Player;
class Ladder extends Transparent{
public $hasEntityCollision = true;
protected $id = self::LADDER;
public function __construct($meta = 0){
parent::__construct(self::LADDER, $meta, "Ladder");
$this->isSolid = false;
$this->isFullBlock = false;
$this->hardness = 2;
$this->meta = $meta;
}
public function getName(){
return "Ladder";
}
public function hasEntityCollision(){
return true;
}
public function isSolid(){
return false;
}
public function getHardness(){
return 2;
}
public function onEntityCollide(Entity $entity){
$entity->fallDistance = 0;
$entity->onGround = true;

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Lapis extends Solid{
protected $id = self::LAPIS_BLOCK;
public function __construct(){
parent::__construct(self::LAPIS_BLOCK, 0, "Lapis Block");
$this->hardness = 15;
}
public function getName(){
return "Lapis Block";
}
public function getHardness(){
return 15;
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class LapisOre extends Solid{
protected $id = self::LAPIS_ORE;
public function __construct(){
parent::__construct(self::LAPIS_ORE, 0, "Lapis Ore");
$this->hardness = 15;
}
public function getHardness(){
return 15;
}
public function getName(){
return "Lapis Ore";
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){

View File

@ -31,13 +31,24 @@ use pocketmine\Server;
class Lava extends Liquid{
public $lightLevel = 15;
protected $id = self::LAVA;
public function __construct($meta = 0){
parent::__construct(self::LAVA, $meta, "Lava");
$this->hardness = 0;
$this->meta = $meta;
}
public function getLightLevel(){
return 15;
}
public function getName(){
return "Lava";
}
public function getHardness(){
return 0;
}
public function onEntityCollide(Entity $entity){
$entity->fallDistance *= 0.5;
$ev = new EntityDamageByBlockEvent($this, $entity, EntityDamageEvent::CAUSE_LAVA, 4);

View File

@ -35,18 +35,26 @@ class Leaves extends Transparent{
const ACACIA = 0;
const DARK_OAK = 1;
protected $id = self::LEAVES;
public function __construct($meta = 0){
parent::__construct(self::LEAVES, $meta, "Leaves");
$names = [
self::OAK => "Oak Leaves",
self::SPRUCE => "Spruce Leaves",
self::BIRCH => "Birch Leaves",
self::JUNGLE => "Jungle Leaves",
];
$this->name = $names[$this->meta & 0x03];
$this->hardness = 1;
$this->meta = $meta;
}
public function getHardness(){
return 1;
}
public function getName(){
static $names = [
self::OAK => "Oak Leaves",
self::SPRUCE => "Spruce Leaves",
self::BIRCH => "Birch Leaves",
self::JUNGLE => "Jungle Leaves",
];
return $names[$this->meta & 0x03];
}
private function findLog(Block $pos, array $visited, $distance, &$check, $fromSide = null){
++$check;
$index = $pos->x . "." . $pos->y . "." . $pos->z;

View File

@ -29,16 +29,20 @@ use pocketmine\Server;
class Leaves2 extends Leaves{
protected $id = self::LEAVES2;
public function __construct($meta = 0){
Transparent::__construct(self::LEAVES, $meta, "Leaves");
$names = [
self::ACACIA => "Acacia Leaves",
self::DARK_OAK => "Dark Oak Leaves",
];
$this->name = $names[$this->meta & 0x03];
$this->hardness = 1;
$this->meta = $meta;
}
public function getName(){
static $names = [
self::ACACIA => "Acacia Leaves",
self::DARK_OAK => "Dark Oak Leaves",
];
return $names[$this->meta & 0x01];
}
private function findLog(Block $pos, array $visited, $distance, &$check, $fromSide = null){
++$check;
$index = $pos->x . "." . $pos->y . "." . $pos->z;

View File

@ -28,12 +28,22 @@ use pocketmine\level\Level;
use pocketmine\math\Vector3;
abstract class Liquid extends Transparent{
public $hasEntityCollision = true;
public $breakable = false;
public $isReplaceable = true;
public $isSolid = false;
public $isFullBlock = true;
public function hasEntityCollision(){
return true;
}
public function isBreakable(Item $item){
return false;
}
public function canBeReplaced(){
return true;
}
public function isSolid(){
return false;
}
public $adjacentSources = 0;
public $isOptimalFlowDirection = [0, 0, 0, 0];
@ -102,7 +112,7 @@ abstract class Liquid extends Transparent{
$blockDecay = $this->getEffectiveFlowDecay($sideBlock);
if($blockDecay < 0){
if(!$sideBlock->isFlowable){
if(!$sideBlock->canBeFlowedInto()){
continue;
}
@ -123,21 +133,21 @@ abstract class Liquid extends Transparent{
if($this->getDamage() >= 8){
$falling = false;
if(!$this->getLevel()->getBlock($this->add(0, 0, -1))->isFlowable){
if(!$this->getLevel()->getBlock($this->add(0, 0, -1))->canBeFlowedInto()){
$falling = true;
}elseif(!$this->getLevel()->getBlock($this->add(0, 0, 1))->isFlowable){
}elseif(!$this->getLevel()->getBlock($this->add(0, 0, 1))->canBeFlowedInto()){
$falling = true;
}elseif(!$this->getLevel()->getBlock($this->add(-1, 0, 0))->isFlowable){
}elseif(!$this->getLevel()->getBlock($this->add(-1, 0, 0))->canBeFlowedInto()){
$falling = true;
}elseif(!$this->getLevel()->getBlock($this->add(1, 0, 0))->isFlowable){
}elseif(!$this->getLevel()->getBlock($this->add(1, 0, 0))->canBeFlowedInto()){
$falling = true;
}elseif(!$this->getLevel()->getBlock($this->add(0, 1, -1))->isFlowable){
}elseif(!$this->getLevel()->getBlock($this->add(0, 1, -1))->canBeFlowedInto()){
$falling = true;
}elseif(!$this->getLevel()->getBlock($this->add(0, 1, 1))->isFlowable){
}elseif(!$this->getLevel()->getBlock($this->add(0, 1, 1))->canBeFlowedInto()){
$falling = true;
}elseif(!$this->getLevel()->getBlock($this->add(-1, 1, 0))->isFlowable){
}elseif(!$this->getLevel()->getBlock($this->add(-1, 1, 0))->canBeFlowedInto()){
$falling = true;
}elseif(!$this->getLevel()->getBlock($this->add(1, 1, 0))->isFlowable){
}elseif(!$this->getLevel()->getBlock($this->add(1, 1, 0))->canBeFlowedInto()){
$falling = true;
}
@ -230,7 +240,7 @@ abstract class Liquid extends Transparent{
$bottomBlock = $this->getSide(0);
if($bottomBlock->isFlowable or $bottomBlock instanceof Liquid){
if($bottomBlock->canBeFlowedInto() or $bottomBlock instanceof Liquid){
if($this instanceof Lava and $bottomBlock instanceof Water){
$this->getLevel()->setBlock($bottomBlock, Block::get(Item::STONE), true);
return;
@ -243,7 +253,7 @@ abstract class Liquid extends Transparent{
$this->getLevel()->setBlock($bottomBlock, Block::get($this->id, $decay + 8), true);
$this->getLevel()->scheduleUpdate($bottomBlock, $this->tickRate());
}
}elseif($decay >= 0 and ($decay === 0 or !$bottomBlock->isFlowable)){
}elseif($decay >= 0 and ($decay === 0 or !$bottomBlock->canBeFlowedInto())){
$flags = $this->getOptimalFlowDirections();
$l = $decay + $multiplier;
@ -280,7 +290,7 @@ abstract class Liquid extends Transparent{
}
private function flowIntoBlock(Block $block, $newFlowDecay){
if($block->isFlowable){
if($block->canBeFlowedInto()){
if($block->getID() > 0){
$this->getLevel()->useBreakOn($block);
}
@ -315,11 +325,11 @@ abstract class Liquid extends Transparent{
}
$blockSide = $this->getLevel()->getBlock(new Vector3($x, $y, $z));
if(!$blockSide->isFlowable and !($blockSide instanceof Liquid)){
if(!$blockSide->canBeFlowedInto() and !($blockSide instanceof Liquid)){
continue;
}elseif($blockSide instanceof Liquid and $blockSide->getDamage() === 0){
continue;
}elseif($blockSide->getSide(0)->isFlowable){
}elseif($blockSide->getSide(0)->canBeFlowedInto()){
return $accumulatedCost;
}
@ -357,11 +367,11 @@ abstract class Liquid extends Transparent{
}
$block = $this->getLevel()->getBlock(new Vector3($x, $y, $z));
if(!$block->isFlowable and !($block instanceof Liquid)){
if(!$block->canBeFlowedInto() and !($block instanceof Liquid)){
continue;
}elseif($block instanceof Liquid and $block->getDamage() === 0){
continue;
}elseif($block->getSide(0)->isFlowable){
}elseif($block->getSide(0)->canBeFlowedInto()){
$this->flowCost[$j] = 0;
}else{
$this->flowCost[$j] = $this->calculateFlowCost($block, 1, $j);

View File

@ -26,11 +26,22 @@ use pocketmine\Player;
class LitPumpkin extends Solid{
public $lightLevel = 15;
protected $id = self::LIT_PUMPKIN;
public function __construct(){
parent::__construct(self::LIT_PUMPKIN, "Jack o'Lantern");
$this->hardness = 5;
public function getLightLevel(){
return 15;
}
public function getHardness(){
return 5;
}
public function getName(){
return "Jack o'Lantern";
}
public function __construct($meta = 0){
$this->meta = $meta;
}
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Melon extends Transparent{
protected $id = self::MELON_BLOCK;
public function __construct(){
parent::__construct(self::MELON_BLOCK, 0, "Melon Block");
$this->hardness = 5;
}
public function getName(){
return "Melon Block";
}
public function getHardness(){
return 5;
}
public function getDrops(Item $item){
return [
[Item::MELON_SLICE, 0, mt_rand(3, 7)],

View File

@ -27,8 +27,15 @@ use pocketmine\level\Level;
use pocketmine\Server;
class MelonStem extends Crops{
protected $id = self::MELON_STEM;
public function getName(){
return "Melon Stem";
}
public function __construct($meta = 0){
parent::__construct(self::MELON_STEM, $meta, "Melon Stem");
$this->meta = $meta;
}
public function onUpdate($type){

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class MonsterSpawner extends Solid{
public function __construct(){
parent::__construct(self::MONSTER_SPAWNER, 0, "Monster Spawner");
$this->hardness = 25;
protected $id = self::MONSTER_SPAWNER;
public function __construct($meta = 0){
$this->meta = $meta;
}
public function getHardness(){
return 25;
}
public function getName(){
return "Monster Spawner";
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){
case 5:

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class MossStone extends Solid{
protected $id = self::MOSS_STONE;
public function __construct($meta = 0){
parent::__construct(self::MOSS_STONE, $meta, "Moss Stone");
$this->hardness = 30;
$this->meta = $meta;
}
public function getName(){
return "Moss Stone";
}
public function getHardness(){
return 30;
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){

View File

@ -28,11 +28,21 @@ use pocketmine\math\Vector3;
use pocketmine\Server;
class Mycelium extends Solid{
protected $id = self::MYCELIUM;
public function __construct(){
parent::__construct(self::MYCELIUM, 0, "Mycelium");
$this->hardness = 2.5;
}
public function getName(){
return "Mycelium";
}
public function getHardness() {
return 2.5;
}
public function getDrops(Item $item){
return [
[Item::DIRT, 0, 1],

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class NetherBrick extends Solid{
protected $id = self::NETHER_BRICKS;
public function __construct(){
parent::__construct(self::NETHER_BRICKS, 0, "Nether Bricks");
$this->hardness = 30;
}
public function getName(){
return "Nether Bricks";
}
public function getHardness(){
return 30;
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){

View File

@ -23,8 +23,15 @@ namespace pocketmine\block;
class NetherBrickStairs extends Stair{
protected $id = self::NETHER_BRICKS_STAIRS;
public function getName(){
return "Nether Bricks Stairs";
}
public function __construct($meta = 0){
parent::__construct(self::NETHER_BRICKS_STAIRS, $meta, "Nether Bricks Stairs");
$this->meta = $meta;
}
}

View File

@ -23,9 +23,19 @@ namespace pocketmine\block;
class NetherReactor extends Solid{
protected $id = self::NETHER_REACTOR;
public function __construct($meta = 0){
parent::__construct(self::NETHER_REACTOR, $meta, "Nether Reactor");
$this->isActivable = true;
$this->meta = $meta;
}
public function getName(){
return "Nether Reactor";
}
public function canBeActivated(){
return true;
}
}

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Netherrack extends Solid{
protected $id = self::NETHERRACK;
public function __construct(){
parent::__construct(self::NETHERRACK, 0, "Netherrack");
$this->hardness = 2;
}
public function getName(){
return "Netherrack";
}
public function getHardness(){
return 2;
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){

View File

@ -24,11 +24,21 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Obsidian extends Solid{
protected $id = self::OBSIDIAN;
public function __construct(){
parent::__construct(self::OBSIDIAN, 0, "Obsidian");
$this->hardness = 6000;
}
public function getName(){
return "Obsidian";
}
public function getHardness(){
return 6000;
}
public function getBreakTime(Item $item){
if($item->isPickaxe() >= 5){

View File

@ -30,18 +30,28 @@ class Planks extends Solid{
const ACACIA = 4;
const DARK_OAK = 5;
protected $id = self::WOODEN_PLANKS;
public function __construct($meta = 0){
parent::__construct(self::PLANKS, $meta, "Wood Planks");
$names = [
self::OAK => "Oak Wood Planks",
self::SPRUCE => "Spruce Wood Planks",
self::BIRCH => "Birch Wood Planks",
self::JUNGLE => "Jungle Wood Planks",
self::ACACIA => "Acacia Wood Planks",
self::DARK_OAK => "Jungle Wood Planks",
];
$this->name = $names[$this->meta & 0x07];
$this->hardness = 15;
$this->meta = $meta;
}
public function getHardness(){
return 15;
}
public function getName(){
static $names = [
self::OAK => "Oak Wood Planks",
self::SPRUCE => "Spruce Wood Planks",
self::BIRCH => "Birch Wood Planks",
self::JUNGLE => "Jungle Wood Planks",
self::ACACIA => "Acacia Wood Planks",
self::DARK_OAK => "Jungle Wood Planks",
"",
""
];
return $names[$this->meta & 0x07];
}
}

View File

@ -22,8 +22,18 @@
namespace pocketmine\block;
class Podzol extends Solid{
protected $id = self::PODZOL;
public function __construct(){
parent::__construct(self::PODZOL, 0, "Podzol");
$this->hardness = 2.5;
}
public function getName(){
return "Podzol";
}
public function getHardness(){
return 2.5;
}
}

View File

@ -25,15 +25,17 @@ use pocketmine\item\Item;
use pocketmine\level\Level;
use pocketmine\Player;
class CyanFlower extends Flowable{
public function __construct(){
parent::__construct(self::POPPY, 0, "Cyan Flower");
$this->hardness = 0;
class Poppy extends Flowable{
protected $id = self::POPPY;
public function __construct($meta = 0){
$this->meta = $meta;
}
public function getBoundingBox(){
return null;
}
public function getName(){
return "Poppy";
}
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){

View File

@ -24,10 +24,17 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Potato extends Crops{
protected $id = self::POTATO_BLOCK;
public function __construct($meta = 0){
parent::__construct(self::POTATO_BLOCK, $meta, "Potato Block");
$this->meta = $meta;
}
public function getName(){
return "Potato Block";
}
public function getDrops(Item $item){
$drops = [];
if($this->meta >= 0x07){

View File

@ -25,11 +25,21 @@ use pocketmine\item\Item;
use pocketmine\Player;
class Pumpkin extends Solid{
protected $id = self::PUMPKIN;
public function __construct(){
parent::__construct(self::PUMPKIN, "Pumpkin");
$this->hardness = 5;
}
public function getHardness(){
return 5;
}
public function getName(){
return "Pumpkin";
}
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){
if($player instanceof Player){
$this->meta = ((int) $player->getDirection() + 5) % 4;

View File

@ -27,10 +27,17 @@ use pocketmine\level\Level;
use pocketmine\Server;
class PumpkinStem extends Crops{
protected $id = self::PUMPKIN_STEM;
public function __construct($meta = 0){
parent::__construct(self::PUMPKIN_STEM, $meta, "Pumpkin Stem");
$this->meta = $meta;
}
public function getName(){
return "Pumpkin Stem";
}
public function onUpdate($type){
if($type === Level::BLOCK_UPDATE_NORMAL){
if($this->getSide(0)->isTransparent === true){

View File

@ -24,17 +24,23 @@ namespace pocketmine\block;
use pocketmine\item\Item;
class Quartz extends Solid{
protected $id = self::QUARTZ_BLOCK;
public function __construct($meta = 0){
parent::__construct(self::QUARTZ_BLOCK, $meta, "Quartz Block");
$names = [
0 => "Quartz Block",
1 => "Chiseled Quartz Block",
2 => "Quartz Pillar",
3 => "Quartz Pillar",
];
$this->name = $names[$this->meta & 0x03];
$this->meta = $meta;
}
public function getName(){
static $names = [
0 => "Quartz Block",
1 => "Chiseled Quartz Block",
2 => "Quartz Pillar",
3 => "Quartz Pillar",
];
return $names[$this->meta & 0x03];
}
public function getBreakTime(Item $item){
switch($item->isPickaxe()){

View File

@ -23,8 +23,15 @@ namespace pocketmine\block;
class QuartzStairs extends Stair{
protected $id = self::QUARTZ_STAIRS;
public function __construct($meta = 0){
parent::__construct(self::QUARTZ_STAIRS, $meta, "Quartz Stairs");
$this->meta = $meta;
}
public function getName(){
return "Quartz Stairs";
}
}

View File

@ -26,14 +26,16 @@ use pocketmine\level\Level;
use pocketmine\Player;
class RedMushroom extends Flowable{
protected $id = self::RED_MUSHROOM;
public function __construct(){
parent::__construct(self::RED_MUSHROOM, 0, "Red Mushroom");
$this->hardness = 0;
}
public function getBoundingBox(){
return null;
}
public function getName(){
return "Red Mushroom";
}
public function onUpdate($type){

View File

@ -25,11 +25,21 @@ use pocketmine\item\Item;
use pocketmine\level\Level;
class RedstoneOre extends Solid{
protected $id = self::REDSTONE_ORE;
public function __construct(){
parent::__construct(self::REDSTONE_ORE, 0, "Redstone Ore");
$this->hardness = 15;
}
public function getName(){
return "Redstone Ore";
}
public function getHardness(){
return 15;
}
public function onUpdate($type){
if($type === Level::BLOCK_UPDATE_NORMAL or $type === Level::BLOCK_UPDATE_TOUCH){
$this->getLevel()->setBlock($this, Block::get(Item::GLOWING_REDSTONE_ORE, $this->meta), false, false, true);

View File

@ -23,12 +23,23 @@ namespace pocketmine\block;
class Sand extends Fallable{
protected $id = self::SAND;
public function __construct($meta = 0){
parent::__construct(self::SAND, $meta & 0x01, "Sand");
if($this->meta === 0x01){
$this->name = "Red sand";
}
$this->hardness = 2.5;
$this->meta = $meta & 0x01;
}
public function getHardness(){
return 2.5;
}
public function getName(){
if($this->meta === 0x01){
return "Red Sand";
}
return "Sand";
}
}

Some files were not shown because too many files have changed in this diff Show More