diff --git a/src/API/BlockAPI.php b/src/API/BlockAPI.php index f9ac3a888..288667deb 100644 --- a/src/API/BlockAPI.php +++ b/src/API/BlockAPI.php @@ -25,6 +25,7 @@ the Free Software Foundation, either version 3 of the License, or */ + define("BLOCK_UPDATE_NORMAL", 0); define("BLOCK_UPDATE_RANDOM", 1); define("BLOCK_UPDATE_SCHEDULED", 2); @@ -35,16 +36,15 @@ define("BLOCK_UPDATE_WEAK", 3); class BlockAPI{ - public static $class = array(); private $server; public static function get($id, $meta = 0, $v = false){ $id = (int) $id; - if(isset(BlockAPI::$class[$id])){ - $classname = BlockAPI::$class[$id]; + if(isset(Block::$class[$id])){ + $classname = Block::$class[$id]; $b = new $classname($meta); }else{ - $b = new GenericBlock($id, $meta, ""); + $b = new GenericBlock($id, $meta); } if($v instanceof Vector3){ $b->position($v); @@ -52,6 +52,17 @@ class BlockAPI{ return $b; } + public static function getItem($id, $meta = 0, $count = 1){ + $id = (int) $id; + if(isset(Item::$class[$id])){ + $classname = Item::$class[$id]; + $i = new $classname($meta); + }else{ + $i = new Item($id, $meta, $count); + } + return $i; + } + public function setBlock($block, $id, $meta){ if(($block instanceof Vector3) or (($block instanceof Block) and $block->inWorld === true)){ $this->server->api->level->setBlock($block->x, $block->y, $block->z, (int) $id, (int) $meta); @@ -78,111 +89,6 @@ class BlockAPI{ function __construct(PocketMinecraftServer $server){ $this->server = $server; - BlockAPI::$class = array( - AIR => "AirBlock", - STONE => "StoneBlock", - GRASS => "GrassBlock", - DIRT => "DirtBlock", - COBBLESTONE => "CobblestoneBlock", - PLANKS => "PlanksBlock", - SAPLING => "SaplingBlock", - BEDROCK => "BedrockBlock", - WATER => "WaterBlock", - STILL_WATER => "StillWaterBlock", - LAVA => "LavaBlock", - STILL_LAVA => "StillLavaBlock", - SAND => "SandBlock", - GRAVEL => "GravelBlock", - GOLD_ORE => "GoldOreBlock", - IRON_ORE => "IronOreBlock", - COAL_ORE => "CoalOreBlock", - WOOD => "WoodBlock", - LEAVES => "LeavesBlock", - GLASS => "GlassBlock", - LAPIS_ORE => "LapisOreBlock", - LAPIS_BLOCK => "LapisBlock", - SANDSTONE => "SandstoneBlock", - BED_BLOCK => "BedBlock", - COBWEB => "CobwebBlock", - TALL_GRASS => "TallGrassBlock", - DEAD_BUSH => "DeadBushBlock", - WOOL => "WoolBlock", - DANDELION => "DandelionBlock", - CYAN_FLOWER => "CyanFlowerBlock", - BROWN_MUSHROOM => "BrownMushroomBlock", - RED_MUSHROOM => "RedMushRoomBlock", - GOLD_BLOCK => "GoldBlock", - IRON_BLOCK => "IronBlock", - DOUBLE_SLAB => "DoubleSlabBlock", - SLAB => "SlabBlock", - BRICKS => "BricksBlock", - TNT => "TNTBlock", - BOOKSHELF => "BookshelfBlock", - MOSS_STONE => "MossStoneBlock", - OBSIDIAN => "ObsidianBlock", - TORCH => "TorchBlock", - FIRE => "FireBlock", - - WOOD_STAIRS => "WoodStairsBlock", - CHEST => "ChestBlock", - - DIAMOND_ORE => "DiamondOreBlock", - DIAMOND_BLOCK => "DiamondBlock", - WORKBENCH => "WorkbenchBlock", - WHEAT => "WheatBlock", - FARMLAND => "FarmlandBlock", - FURNACE => "FurnaceBlock", - BURNING_FURNACE => "BurningFurnaceBlock", - SIGN_POST => "SignPostBlock", - WOOD_DOOR_BLOCK => "WoodDoorBlock", - LADDER => "LadderBlock", - - COBBLESTONE_STAIRS => "CobblestoneStairsBlock", - WALL_SIGN => "WallSignBlock", - - IRON_DOOR => "IronDoorBlock", - REDSTONE_ORE => "RedstoneOreBlock", - GLOWING_REDSTONE_ORE => "GlowingRedstoneOreBlock", - - SNOW_LAYER => "SnowLayerBlock", - ICE => "IceBlock", - SNOW_BLOCK => "SnowBlock", - CACTUS => "CactusBlock", - CLAY_BLOCK => "ClayBlock", - SUGARCANE_BLOCK => "SugarcaneBlock", - - FENCE => "FenceBlock", - - NETHERRACK => "NetherrackBlock", - SOUL_SAND => "SoulSandBlock", - GLOWSTONE_BLOCK => "GlowstoneBlock", - - TRAPDOOR => "TrapdoorBlock", - - STONE_BRICKS => "StoneBricksBlock", - - GLASS_PANE => "GlassPaneBlock", - MELON_BLOCK => "MelonBlock", - - MELON_STEM => "MelonStemBlock", - - FENCE_GATE => "FenceGateBlock", - BRICK_STAIRS => "BrickStairsBlock", - STONE_BRICK_STAIRS => "StoneBrickStairsBlock", - - NETHER_BRICK => "NetherBrickBlock", - - NETHER_BRICK_STAIRS => "NetherBrickStairsBlock", - - SANDSTONE_STAIRS => "SandstoneStairsBlock", - - QUARTZ_BLOCK => "QuartzBlock", - QUARTZ_STAIRS => "QuartzStairsBlock", - - STONECUTTER => "StonecutterBlock", - GLOWING_OBSIDIAN => "GlowingObsidianBlock", - NETHER_REACTOR => "NetherReactorBlock", - ); } public function init(){ @@ -532,22 +438,6 @@ class BlockAPI{ } } break; - case 50: //Torch - if(isset(Material::$transparent[$target[0]])){ - return false; - } - $faces = array( - 1 => 5, - 2 => 4, - 3 => 3, - 4 => 2, - 5 => 1, - ); - if(!isset($faces[$data["face"]])){ - return false; - } - $data["meta"] = $faces[$data["face"]]; - break; case 53://Stairs case 67: case 108: diff --git a/src/classes/material/Block.php b/src/classes/material/Block.php index a6fcdc2c2..d6d8696ad 100644 --- a/src/classes/material/Block.php +++ b/src/classes/material/Block.php @@ -25,9 +25,114 @@ the Free Software Foundation, either version 3 of the License, or */ +require_once("classes/material/IDs.php"); abstract class Block{ + public static $class = array( + AIR => "AirBlock", + STONE => "StoneBlock", + GRASS => "GrassBlock", + DIRT => "DirtBlock", + COBBLESTONE => "CobblestoneBlock", + PLANKS => "PlanksBlock", + SAPLING => "SaplingBlock", + BEDROCK => "BedrockBlock", + WATER => "WaterBlock", + STILL_WATER => "StillWaterBlock", + LAVA => "LavaBlock", + STILL_LAVA => "StillLavaBlock", + SAND => "SandBlock", + GRAVEL => "GravelBlock", + GOLD_ORE => "GoldOreBlock", + IRON_ORE => "IronOreBlock", + COAL_ORE => "CoalOreBlock", + WOOD => "WoodBlock", + LEAVES => "LeavesBlock", + GLASS => "GlassBlock", + LAPIS_ORE => "LapisOreBlock", + LAPIS_BLOCK => "LapisBlock", + SANDSTONE => "SandstoneBlock", + BED_BLOCK => "BedBlock", + COBWEB => "CobwebBlock", + TALL_GRASS => "TallGrassBlock", + DEAD_BUSH => "DeadBushBlock", + WOOL => "WoolBlock", + DANDELION => "DandelionBlock", + CYAN_FLOWER => "CyanFlowerBlock", + BROWN_MUSHROOM => "BrownMushroomBlock", + RED_MUSHROOM => "RedMushRoomBlock", + GOLD_BLOCK => "GoldBlock", + IRON_BLOCK => "IronBlock", + DOUBLE_SLAB => "DoubleSlabBlock", + SLAB => "SlabBlock", + BRICKS => "BricksBlock", + TNT => "TNTBlock", + BOOKSHELF => "BookshelfBlock", + MOSS_STONE => "MossStoneBlock", + OBSIDIAN => "ObsidianBlock", + TORCH => "TorchBlock", + FIRE => "FireBlock", + WOOD_STAIRS => "WoodStairsBlock", + CHEST => "ChestBlock", + + DIAMOND_ORE => "DiamondOreBlock", + DIAMOND_BLOCK => "DiamondBlock", + WORKBENCH => "WorkbenchBlock", + WHEAT => "WheatBlock", + FARMLAND => "FarmlandBlock", + FURNACE => "FurnaceBlock", + BURNING_FURNACE => "BurningFurnaceBlock", + SIGN_POST => "SignPostBlock", + WOOD_DOOR_BLOCK => "WoodDoorBlock", + LADDER => "LadderBlock", + + COBBLESTONE_STAIRS => "CobblestoneStairsBlock", + WALL_SIGN => "WallSignBlock", + + IRON_DOOR => "IronDoorBlock", + REDSTONE_ORE => "RedstoneOreBlock", + GLOWING_REDSTONE_ORE => "GlowingRedstoneOreBlock", + + SNOW_LAYER => "SnowLayerBlock", + ICE => "IceBlock", + SNOW_BLOCK => "SnowBlock", + CACTUS => "CactusBlock", + CLAY_BLOCK => "ClayBlock", + SUGARCANE_BLOCK => "SugarcaneBlock", + + FENCE => "FenceBlock", + + NETHERRACK => "NetherrackBlock", + SOUL_SAND => "SoulSandBlock", + GLOWSTONE_BLOCK => "GlowstoneBlock", + + TRAPDOOR => "TrapdoorBlock", + + STONE_BRICKS => "StoneBricksBlock", + + GLASS_PANE => "GlassPaneBlock", + MELON_BLOCK => "MelonBlock", + + MELON_STEM => "MelonStemBlock", + + FENCE_GATE => "FenceGateBlock", + BRICK_STAIRS => "BrickStairsBlock", + STONE_BRICK_STAIRS => "StoneBrickStairsBlock", + + NETHER_BRICK => "NetherBrickBlock", + + NETHER_BRICK_STAIRS => "NetherBrickStairsBlock", + + SANDSTONE_STAIRS => "SandstoneStairsBlock", + + QUARTZ_BLOCK => "QuartzBlock", + QUARTZ_STAIRS => "QuartzStairsBlock", + + STONECUTTER => "StonecutterBlock", + GLOWING_OBSIDIAN => "GlowingObsidianBlock", + NETHER_REACTOR => "NetherReactorBlock", + ); protected $id; protected $meta; protected $shortname = ""; diff --git a/src/classes/material/Item.php b/src/classes/material/Item.php index b5a1e9f27..7a5dd7007 100644 --- a/src/classes/material/Item.php +++ b/src/classes/material/Item.php @@ -25,20 +25,27 @@ the Free Software Foundation, either version 3 of the License, or */ +require_once("classes/material/IDs.php"); + class Item{ + public static $class = array( + + + ); protected $block = false; protected $id; protected $meta; protected $count; protected $maxStackSize = 64; protected $durability = 0; - protected $name = "Unknown"; + protected $name; - public function __construct($id, $meta = 0, $count = 1){ + public function __construct($id, $meta = 0, $count = 1, $name = "Unknown"){ $this->id = (int) $id; $this->meta = (int) $meta; $this->count = (int) $count; - if(isset(BlockAPI::$class[$this->id])){ + $this->name = $name; + if(isset(Block::$class[$this->id])){ $this->block = BlockAPI::get($this->id, $this->meta); $this->name = $this->block->getName(); } diff --git a/src/classes/material/block/attachable/Torch.php b/src/classes/material/block/attachable/Torch.php index 3ef8c6ac9..26f0cd6dd 100644 --- a/src/classes/material/block/attachable/Torch.php +++ b/src/classes/material/block/attachable/Torch.php @@ -30,4 +30,26 @@ class TorchBlock extends FlowableBlock{ parent::__construct(TORCH, $meta, "Torch"); } + public function place(BlockAPI $level, Item $item, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){ + if($block->inWorld === true){ + $down = $level->getBlockFace($block, 0); + if($down->isTransparent === false and $face !== 0){ + $faces = array( + 1 => 5, + 2 => 4, + 3 => 3, + 4 => 2, + 5 => 1, + ); + $level->setBlock($block, $this->id, $faces[$face]); + return true; + } + } + return false; + } + public function getDrops(Item $item, Player $player){ + return = array( + array($this->id, 0, 1), + ); + } } \ No newline at end of file diff --git a/src/classes/material/block/plant/Sapling.php b/src/classes/material/block/plant/Sapling.php index 5b69ac993..af17b6d36 100644 --- a/src/classes/material/block/plant/Sapling.php +++ b/src/classes/material/block/plant/Sapling.php @@ -77,4 +77,10 @@ class SaplingBlock extends TransparentBlock{ } return false; } + + public function getDrops(Item $item, Player $player){ + return = array( + array($this->id, $this->meta & 0x03, 1), + ); + } } \ No newline at end of file diff --git a/src/classes/material/block/solid/Slab.php b/src/classes/material/block/solid/Slab.php index 67e677590..489ac4b44 100644 --- a/src/classes/material/block/solid/Slab.php +++ b/src/classes/material/block/solid/Slab.php @@ -76,5 +76,9 @@ class SlabBlock extends TransparentBlock{ } return false; } - + public function getDrops(Item $item, Player $player){ + return = array( + array($this->id, $this->meta & 0x07, 1), + ); + } } \ No newline at end of file