diff --git a/src/constants/BlockIDs.php b/src/constants/BlockIDs.php index 32a4bf3c9..542e9e3b4 100644 --- a/src/constants/BlockIDs.php +++ b/src/constants/BlockIDs.php @@ -168,6 +168,14 @@ define("COBBLESTONE_WALL", 139); define("QUARTZ_BLOCK", 155); define("QUARTZ_STAIRS", 156); +define("DOUBLE_WOOD_SLAB", 157); +define("DOUBLE_WOODEN_SLAB", 157); +define("DOUBLE_WOOD_SLABS", 157); +define("DOUBLE_WOODEN_SLABS", 157); +define("WOOD_SLAB", 158); +define("WOODEN_SLAB", 158); +define("WOOD_SLABS", 158); +define("WOODEN_SLABS", 158); define("HAY_BALE", 170); diff --git a/src/material/Block.php b/src/material/Block.php index 957ab3eb5..9165cf77b 100644 --- a/src/material/Block.php +++ b/src/material/Block.php @@ -130,7 +130,9 @@ abstract class Block extends Position{ QUARTZ_BLOCK => "QuartzBlock", QUARTZ_STAIRS => "QuartzStairsBlock", - + DOUBLE_WOOD_SLAB => "DoubleWoodSlabBlock", + WOOD_SLAB => "WoodSlabBlock", + HAY_BALE => "HayBaleBlock", COAL_BLOCK => "CoalBlock", diff --git a/src/material/block/nonfull/WoodSlab.php b/src/material/block/nonfull/WoodSlab.php new file mode 100644 index 000000000..9c6e12b79 --- /dev/null +++ b/src/material/block/nonfull/WoodSlab.php @@ -0,0 +1,107 @@ + "Oak", + 1 => "Spruce", + 2 => "Birch", + 3 => "Jungle", + ); + $this->name = (($this->meta & 0x08) === 0x08 ? "Upper ":"") . $names[$this->meta & 0x07] . " Wooden Slab"; + if(($this->meta & 0x08) === 0x08){ + $this->isFullBlock = true; + }else{ + $this->isFullBlock = false; + } + $this->hardness = 15; + } + + public function place(Item $item, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){ + $this->meta &= 0x07; + if($face === 0){ + if($target->getID() === WOOD_SLAB and ($target->getMetadata() & 0x08) === 0x08 and ($target->getMetadata() & 0x07) === ($this->meta & 0x07)){ + $this->level->setBlock($target, BlockAPI::get(DOUBLE_WOOD_SLAB, $this->meta), true, false, true); + return true; + }elseif($block->getID() === WOOD_SLAB and ($block->getMetadata() & 0x07) === ($this->meta & 0x07)){ + $this->level->setBlock($block, BlockAPI::get(DOUBLE_WOOD_SLAB, $this->meta), true, false, true); + return true; + }else{ + $this->meta |= 0x08; + } + }elseif($face === 1){ + if($target->getID() === WOOD_SLAB and ($target->getMetadata() & 0x08) === 0 and ($target->getMetadata() & 0x07) === ($this->meta & 0x07)){ + $this->level->setBlock($target, BlockAPI::get(DOUBLE_WOOD_SLAB, $this->meta), true, false, true); + return true; + }elseif($block->getID() === WOOD_SLAB and ($block->getMetadata() & 0x07) === ($this->meta & 0x07)){ + $this->level->setBlock($block, BlockAPI::get(DOUBLE_WOOD_SLAB, $this->meta), true, false, true); + return true; + } + }elseif(!$player->entity->inBlock($block)){ + if($block->getID() === WOOD_SLAB){ + if(($block->getMetadata() & 0x07) === ($this->meta & 0x07)){ + $this->level->setBlock($block, BlockAPI::get(DOUBLE_WOOD_SLAB, $this->meta), true, false, true); + return true; + } + return false; + }else{ + if($fy > 0.5){ + $this->meta |= 0x08; + } + } + }else{ + return false; + } + if($block->getID() === WOOD_SLAB and ($target->getMetadata() & 0x07) !== ($this->meta & 0x07)){ + return false; + } + $this->level->setBlock($block, $this, true, false, true); + return true; + } + + public function getBreakTime(Item $item, Player $player){ + if(($player->gamemode & 0x01) === 0x01){ + return 0.20; + } + switch($item->isAxe()){ + case 5: + return 0.4; + case 4: + return 0.5; + case 3: + return 0.75; + case 2: + return 0.25; + case 1: + return 1.5; + default: + return 3; + } + } + + public function getDrops(Item $item, Player $player){ + return array( + array($this->id, $this->meta & 0x07, 1), + ); + } +} \ No newline at end of file diff --git a/src/material/block/nonfull/stairs/WoodStairs.php b/src/material/block/nonfull/stairs/WoodStairs.php index f1c7cdcf1..909e91e3f 100644 --- a/src/material/block/nonfull/stairs/WoodStairs.php +++ b/src/material/block/nonfull/stairs/WoodStairs.php @@ -24,6 +24,26 @@ class WoodStairsBlock extends StairBlock{ parent::__construct(WOOD_STAIRS, $meta, "Wood Stairs"); } + public function getBreakTime(Item $item, Player $player){ + if(($player->gamemode & 0x01) === 0x01){ + return 0.20; + } + switch($item->isAxe()){ + case 5: + return 0.4; + case 4: + return 0.5; + case 3: + return 0.75; + case 2: + return 0.25; + case 1: + return 1.5; + default: + return 3; + } + } + public function getDrops(Item $item, Player $player){ return array( array($this->id, 0, 1), diff --git a/src/material/block/solid/DoubleWoodSlab.php b/src/material/block/solid/DoubleWoodSlab.php new file mode 100644 index 000000000..9853f0be6 --- /dev/null +++ b/src/material/block/solid/DoubleWoodSlab.php @@ -0,0 +1,61 @@ + "Oak", + 1 => "Spruce", + 2 => "Birch", + 3 => "Jungle", + ); + $this->name = "Double " . $names[$this->meta & 0x07] . " Wooden Slab"; + $this->hardness = 15; + } + + public function getBreakTime(Item $item, Player $player){ + if(($player->gamemode & 0x01) === 0x01){ + return 0.20; + } + switch($item->isAxe()){ + case 5: + return 0.4; + case 4: + return 0.5; + case 3: + return 0.75; + case 2: + return 0.25; + case 1: + return 1.5; + default: + return 3; + } + } + + public function getDrops(Item $item, Player $player){ + return array( + array(WOOD_SLAB, $this->meta & 0x07, 2), + ); + } + +} \ No newline at end of file diff --git a/src/recipes/CraftingRecipes.php b/src/recipes/CraftingRecipes.php index 362af2a1c..3642da986 100644 --- a/src/recipes/CraftingRecipes.php +++ b/src/recipes/CraftingRecipes.php @@ -99,13 +99,13 @@ class CraftingRecipes{ "WOODEN_PLANKS:?x6=>TRAPDOOR:0x2", "WOODEN_PLANKS:?x6=>WOODEN_DOOR:0x1", "WOODEN_PLANKS:0x6=>WOODEN_STAIRS:0x4", - "WOODEN_PLANKS:0x3=>SLAB:2x6", + "WOODEN_PLANKS:0x3=>WOOD_SLAB:0x6", "WOODEN_PLANKS:1x6=>SPRUCE_WOOD_STAIRS:0x4", - //"WOODEN_PLANKS:1x3=>SPRUCE_WOOD_SLAB:2x6", + "WOODEN_PLANKS:1x3=>WOOD_SLAB:1x6", "WOODEN_PLANKS:2x6=>BIRCH_WOOD_STAIRS:0x4", - //"WOODEN_PLANKS:2x3=>BIRCH_WOOD_SLAB:2x6", + "WOODEN_PLANKS:2x3=>BIRCH_WOOD_SLAB:2x6", "WOODEN_PLANKS:3x6=>JUNGLE_WOOD_STAIRS:0x4", - //"WOODEN_PLANKS:3x3=>JUNGLE_WOOD_SLAB:2x6", + "WOODEN_PLANKS:3x3=>JUNGLE_WOOD_SLAB:3x6", //Tools "STICK:?x1,FEATHER:?x1,FLINT:?x1=>ARROW:0x4",