From 64f7a78329b60b39b1155c5fc55d722aef794482 Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Sun, 24 Nov 2013 12:18:50 +0100 Subject: [PATCH 1/3] Added achievement.grant and achievement.broadcast handlers for more customization --- src/API/AchievementAPI.php | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/API/AchievementAPI.php b/src/API/AchievementAPI.php index d2a56c323..f8b047965 100644 --- a/src/API/AchievementAPI.php +++ b/src/API/AchievementAPI.php @@ -98,11 +98,18 @@ class AchievementAPI{ } public static function broadcastAchievement(Player $player, $achievementId){ - if(ServerAPI::request()->api->getProperty("announce-player-achievements") == true){ - ServerAPI::request()->api->chat->broadcast($player->username." has just earned the achievement ".self::$achievements[$achievementId]["name"]); - }else{ - $player->sendChat("You have just earned the achievement ".self::$achievements[$achievementId]["name"]); + if(isset(self::$achievements[$achievementId])){ + $result = ServerAPI::request()->api->dhandle("achievement.broadcast", array("player" => $player, "achievementId" => $achievementId)); + if($result !== false and $result !== true){ + if(ServerAPI::request()->api->getProperty("announce-player-achievements") == true){ + ServerAPI::request()->api->chat->broadcast($player->username." has just earned the achievement ".self::$achievements[$achievementId]["name"]); + }else{ + $player->sendChat("You have just earned the achievement ".self::$achievements[$achievementId]["name"]); + } + } + return true; } + return false; } public static function addAchievement($achievementId, $achievementName, array $requires = array()){ @@ -135,9 +142,13 @@ class AchievementAPI{ return false; } } - $player->achievements[$achievementId] = true; - self::broadcastAchievement($player, $achievementId); - return true; + if(ServerAPI::request()->api->dhandle("achievement.grant", array("player" => $player, "achievementId" => $achievementId)) !== false){ + $player->achievements[$achievementId] = true; + self::broadcastAchievement($player, $achievementId); + return true; + }else{ + return false; + } } return false; } From ff8363e2ae4a889df5d3431ec674a2307788c39f Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Sun, 24 Nov 2013 13:22:09 +0100 Subject: [PATCH 2/3] Added Wooden Slabs, Double Wooden Slabs, new Wooden Slab crafting --- src/constants/BlockIDs.php | 8 ++ src/material/Block.php | 4 +- src/material/block/nonfull/WoodSlab.php | 107 ++++++++++++++++++ .../block/nonfull/stairs/WoodStairs.php | 20 ++++ src/material/block/solid/DoubleWoodSlab.php | 61 ++++++++++ src/recipes/CraftingRecipes.php | 8 +- 6 files changed, 203 insertions(+), 5 deletions(-) create mode 100644 src/material/block/nonfull/WoodSlab.php create mode 100644 src/material/block/solid/DoubleWoodSlab.php 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", From c25607588bcc6fa1721975bf5e592758e768defc Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Sun, 24 Nov 2013 13:32:21 +0100 Subject: [PATCH 3/3] Added sideway Hay Bales --- src/material/block/solid/HayBale.php | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/material/block/solid/HayBale.php b/src/material/block/solid/HayBale.php index 472060301..c83702b1b 100644 --- a/src/material/block/solid/HayBale.php +++ b/src/material/block/solid/HayBale.php @@ -20,9 +20,30 @@ */ class HayBaleBlock extends SolidBlock{ - public function __construct(){ - parent::__construct(HAY_BALE, "Hay Bale"); + public function __construct($meta = 0){ + parent::__construct(HAY_BALE, $meta, "Hay Bale"); $this->hardness = 10; } + public function place(Item $item, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){ + $faces = array( + 0 => 0, + 1 => 0, + 2 => 0b1000, + 3 => 0b1000, + 4 => 0b0100, + 5 => 0b0100, + ); + + $this->meta = ($this->meta & 0x03) | $faces[$face]; + $this->level->setBlock($block, $this, true, false, true); + return true; + } + + public function getDrops(Item $item, Player $player){ + return array( + array($this->id, 0, 1), + ); + } + } \ No newline at end of file