mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-06 10:01:53 +00:00
Added new methods of Block properties (WiP)
This commit is contained in:
parent
4c06b384c7
commit
5a054a8ab4
@ -32,10 +32,129 @@ define("BLOCK_UPDATE_WEAK", 3);
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class BlockAPI{
|
class BlockAPI{
|
||||||
|
public static $class = array();
|
||||||
private $server;
|
private $server;
|
||||||
function __construct(PocketMinecraftServer $server){
|
function __construct(PocketMinecraftServer $server){
|
||||||
$this->server = $server;
|
$this->server = $server;
|
||||||
|
BlockAPI::$class = array(
|
||||||
|
AIR => new AirBlock(),
|
||||||
|
STONE => new StoneBlock(),
|
||||||
|
GRASS => new GrassBlock(),
|
||||||
|
DIRT => new DirtBlock(),
|
||||||
|
COBBLESTONE => new CobblestoneBlock(),
|
||||||
|
PLANKS => new PlanksBlock(),
|
||||||
|
SAPLING => new SaplingBlock(0),
|
||||||
|
BEDROCK => new BedrockBlock(),
|
||||||
|
WATER => new GenericBlock(WATER, 0, ""),
|
||||||
|
STILL_WATER => new GenericBlock(STILL_WATER, 0, ""),
|
||||||
|
LAVA => new GenericBlock(LAVA, 0, ""),
|
||||||
|
STILL_LAVA => new GenericBlock(STILL_LAVA, 0, ""),
|
||||||
|
SAND => new SandBlock(),
|
||||||
|
GRAVEL => new GravelBlock(),
|
||||||
|
GOLD_ORE => new GoldOreBlock(),
|
||||||
|
IRON_ORE => new IronOreBlock(),
|
||||||
|
COAL_ORE => new CoalOreBlock(),
|
||||||
|
WOOD => new WoodBlock(0),
|
||||||
|
LEAVES => new LeavesBlock(0),
|
||||||
|
GLASS => new GlassBlock(),
|
||||||
|
LAPIS_ORE => new LapisOreBlock(),
|
||||||
|
LAPIS_BLOCK => new LapisBlock(),
|
||||||
|
SANDSTONE => new SandstoneBlock(0),
|
||||||
|
BED_BLOCK => new BedBlock(0),
|
||||||
|
COBWEB => new CobwebBlock(),
|
||||||
|
TALL_GRASS => new TallGrassBlock(1),
|
||||||
|
DEAD_BUSH => new DeadBushBlock(),
|
||||||
|
WOOL => new WoolBlock(0),
|
||||||
|
DANDELION => new DandelionBlock(),
|
||||||
|
CYAN_FLOWER => new CyanFlowerBlock(),
|
||||||
|
BROWN_MUSHROOM => new BrownMushroomBlock(),
|
||||||
|
RED_MUSHROOM => new RedMushRoomBlock(),
|
||||||
|
GOLD_BLOCK => new GoldBlock(),
|
||||||
|
IRON_BLOCK => new IronBlock(),
|
||||||
|
DOUBLE_SLAB => new GenericBlock(DOUBLE_SLAB, 0, ""),
|
||||||
|
DOUBLE_SLABS => new GenericBlock(DOUBLE_SLABS, 0, ""),
|
||||||
|
SLAB => new GenericBlock(SLAB, 0, ""),
|
||||||
|
SLABS => new GenericBlock(SLABS, 0, ""),
|
||||||
|
BICKS => new GenericBlock(BICKS, 0, ""),
|
||||||
|
TNT => new GenericBlock(TNT, 0, ""),
|
||||||
|
BOOKSHELF => new GenericBlock(BOOKSHELF, 0, ""),
|
||||||
|
MOSS_STONE => new GenericBlock(MOSS_STONE, 0, ""),
|
||||||
|
MOSSY_STONE => new GenericBlock(MOSSY_STONE, 0, ""),
|
||||||
|
OBSIDIAN => new GenericBlock(OBSIDIAN, 0, ""),
|
||||||
|
TORCH => new GenericBlock(TORCH, 0, ""),
|
||||||
|
FiRE => new GenericBlock(FiRE, 0, ""),
|
||||||
|
|
||||||
|
WOOD_STAIRS => new GenericBlock(WOOD_STAIRS, 0, ""),
|
||||||
|
CHEST => new GenericBlock(CHEST, 0, ""),
|
||||||
|
|
||||||
|
DIAMOND_ORE => new GenericBlock(DIAMOND_ORE, 0, ""),
|
||||||
|
DIAMOND_BLOCK => new GenericBlock(DIAMOND_BLOCK, 0, ""),
|
||||||
|
CRAFTING_TABLE => new GenericBlock(CRAFTING_TABLE, 0, ""),
|
||||||
|
WORKBENCH => new GenericBlock(WORKBENCH, 0, ""),
|
||||||
|
WHEAT => new GenericBlock(WHEAT, 0, ""),
|
||||||
|
FARMLAND => new GenericBlock(FARMLAND, 0, ""),
|
||||||
|
FURNACE => new GenericBlock(FURNACE, 0, ""),
|
||||||
|
BURNING_FURNACE => new GenericBlock(BURNING_FURNACE, 0, ""),
|
||||||
|
LIT_FURNACE => new GenericBlock(LIT_FURNACE, 0, ""),
|
||||||
|
SIGN => new GenericBlock(SIGN, 0, ""),
|
||||||
|
SIGN_POST => new GenericBlock(SIGN_POST, 0, ""),
|
||||||
|
DOOR => new GenericBlock(DOOR, 0, ""),
|
||||||
|
WOODEN_DOOR => new GenericBlock(WOODEN_DOOR, 0, ""),
|
||||||
|
WOOD_DOOR => new GenericBlock(WOOD_DOOR, 0, ""),
|
||||||
|
LADDER => new GenericBlock(LADDER, 0, ""),
|
||||||
|
|
||||||
|
COBBLE_STAIRS => new GenericBlock(COBBLE_STAIRS, 0, ""),
|
||||||
|
COBBLESTONE_STAIRS => new GenericBlock(COBBLESTONE_STAIRS, 0, ""),
|
||||||
|
WALL_SIGN => new GenericBlock(WALL_SIGN, 0, ""),
|
||||||
|
|
||||||
|
IRON_DOOR => new GenericBlock(IRON_DOOR, 0, ""),
|
||||||
|
REDSTONE_ORE => new GenericBlock(REDSTONE_ORE, 0, ""),
|
||||||
|
GLOWING_REDSTONE_ORE => new GenericBlock(GLOWING_REDSTONE_ORE, 0, ""),
|
||||||
|
LIT_REDSTONE_ORE => new GenericBlock(LIT_REDSTONE_ORE, 0, ""),
|
||||||
|
|
||||||
|
SNOW => new GenericBlock(SNOW, 0, ""),
|
||||||
|
ICE => new GenericBlock(ICE, 0, ""),
|
||||||
|
SNOW_BLOCK => new GenericBlock(SNOW_BLOCK, 0, ""),
|
||||||
|
CACTUS => new GenericBlock(CACTUS, 0, ""),
|
||||||
|
CLAY_BLOCK => new GenericBlock(CLAY_BLOCK, 0, ""),
|
||||||
|
SUGARCANE_BLOCK => new GenericBlock(SUGARCANE_BLOCK, 0, ""),
|
||||||
|
|
||||||
|
FENCE => new GenericBlock(FENCE, 0, ""),
|
||||||
|
|
||||||
|
NETHERRACK => new GenericBlock(NETHERRACK, 0, ""),
|
||||||
|
SOUL_SAND => new GenericBlock(SOUL_SAND, 0, ""),
|
||||||
|
GLOWSTONE_BLOCK => new GenericBlock(GLOWSTONE_BLOCK, 0, ""),
|
||||||
|
|
||||||
|
TRAPDOOR => new GenericBlock(TRAPDOOR, 0, ""),
|
||||||
|
|
||||||
|
STONE_BRICKS => new GenericBlock(STONE_BRICKS, 0, ""),
|
||||||
|
|
||||||
|
GLASS_PANE => new GenericBlock(GLASS_PANE, 0, ""),
|
||||||
|
GLASS_PANEL => new GenericBlock(GLASS_PANEL, 0, ""),
|
||||||
|
MELON => new GenericBlock(MELON, 0, ""),
|
||||||
|
|
||||||
|
MELON_STEM => new GenericBlock(MELON_STEM, 0, ""),
|
||||||
|
|
||||||
|
FENCE_GATE => new GenericBlock(FENCE_GATE, 0, ""),
|
||||||
|
BRICK_STAIRS => new GenericBlock(BRICK_STAIRS, 0, ""),
|
||||||
|
STONE_BRICK_STAIRS => new GenericBlock(STONE_BRICK_STAIRS, 0, ""),
|
||||||
|
|
||||||
|
NETHER_BRICK => new GenericBlock(NETHER_BRICK, 0, ""),
|
||||||
|
|
||||||
|
NETHER_BRICK_STAIRS => new GenericBlock(NETHER_BRICK_STAIRS, 0, ""),
|
||||||
|
|
||||||
|
SANDSTONE_STAIRS => new GenericBlock(SANDSTONE_STAIRS, 0, ""),
|
||||||
|
|
||||||
|
QUARTZ_BLOCK => new GenericBlock(QUARTZ_BLOCK, 0, ""),
|
||||||
|
QUARTZ_STAIRS => new GenericBlock(QUARTZ_STAIRS, 0, ""),
|
||||||
|
|
||||||
|
STONECUTTER => new GenericBlock(STONECUTTER, 0, ""),
|
||||||
|
GLOWING_OBSIDIAN => new GenericBlock(GLOWING_OBSIDIAN, 0, ""),
|
||||||
|
NETHER_REACTOR => new GenericBlock(NETHER_REACTOR, 0, ""),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function init(){
|
public function init(){
|
||||||
@ -95,6 +214,7 @@ class BlockAPI{
|
|||||||
if($event !== "player.block.break"){
|
if($event !== "player.block.break"){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$target = $this->server->api->level->getBlock($data["x"], $data["y"], $data["z"]);
|
$target = $this->server->api->level->getBlock($data["x"], $data["y"], $data["z"]);
|
||||||
if(isset(Material::$unbreakable[$target[0]]) or $this->server->gamemode === 2){
|
if(isset(Material::$unbreakable[$target[0]]) or $this->server->gamemode === 2){
|
||||||
return $this->cancelAction($target);
|
return $this->cancelAction($target);
|
||||||
@ -262,6 +382,10 @@ class BlockAPI{
|
|||||||
}
|
}
|
||||||
$data["original"] = array($data["block"], $data["meta"]);
|
$data["original"] = array($data["block"], $data["meta"]);
|
||||||
$target = $this->server->api->level->getBlock($data["x"], $data["y"], $data["z"]);
|
$target = $this->server->api->level->getBlock($data["x"], $data["y"], $data["z"]);
|
||||||
|
$entity = $this->server->api->entity->get($data["eid"]);
|
||||||
|
if(($entity instanceof Entity) !== true){
|
||||||
|
return $this->cancelAction($block); //No Entity WTF?
|
||||||
|
}
|
||||||
if($target[0] === 0){ //If no block exists
|
if($target[0] === 0){ //If no block exists
|
||||||
$this->cancelAction($target);
|
$this->cancelAction($target);
|
||||||
$block = $this->server->api->level->getBlockFace($target, $data["face"]);
|
$block = $this->server->api->level->getBlockFace($target, $data["face"]);
|
||||||
@ -298,7 +422,9 @@ class BlockAPI{
|
|||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
if($data["block"] === 351 and $data["meta"] === 0x0F){ //Bonemeal
|
if($data["block"] === 351 and $data["meta"] === 0x0F){ //Bonemeal
|
||||||
Sapling::growTree($this->server->api->level, $target, $target[1] & 0x03);
|
$s = new SaplingBlock($target[1] & 0x03);
|
||||||
|
$s->position(new Vector3($target[2][0], $target[2][1], $target[2][2]));
|
||||||
|
$s->onActivate($this->server->api->level, new Item($data["block"], $data["meta"]), $entity->player);
|
||||||
$cancelPlace = true;
|
$cancelPlace = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -452,10 +578,6 @@ class BlockAPI{
|
|||||||
}else{
|
}else{
|
||||||
return $this->cancelAction($block);
|
return $this->cancelAction($block);
|
||||||
}
|
}
|
||||||
$entity = $this->server->api->entity->get($data["eid"]);
|
|
||||||
if(($entity instanceof Entity) !== true){
|
|
||||||
return $this->cancelAction($block); //No Entity WTF?
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!isset(Material::$transparent[$data["block"]]) and $entity->inBlock($block[2][0], $block[2][1], $block[2][2])){
|
if(!isset(Material::$transparent[$data["block"]]) and $entity->inBlock($block[2][0], $block[2][1], $block[2][2])){
|
||||||
return $this->cancelAction($block); //Entity in block
|
return $this->cancelAction($block); //Entity in block
|
||||||
|
@ -27,10 +27,6 @@ the Free Software Foundation, either version 3 of the License, or
|
|||||||
|
|
||||||
|
|
||||||
abstract class Block{
|
abstract class Block{
|
||||||
/*public static $name = array(
|
|
||||||
AIR => "GenericBlock",
|
|
||||||
|
|
||||||
);*/
|
|
||||||
|
|
||||||
protected $id;
|
protected $id;
|
||||||
protected $meta;
|
protected $meta;
|
||||||
|
41
src/classes/material/block/misc/Air.php
Normal file
41
src/classes/material/block/misc/Air.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
-
|
||||||
|
/ \
|
||||||
|
/ \
|
||||||
|
/ PocketMine \
|
||||||
|
/ MP \
|
||||||
|
|\ @shoghicp /|
|
||||||
|
|. \ / .|
|
||||||
|
| .. \ / .. |
|
||||||
|
| .. | .. |
|
||||||
|
| .. | .. |
|
||||||
|
\ | /
|
||||||
|
\ | /
|
||||||
|
\ | /
|
||||||
|
\ | /
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
class AirBlock extends TransparentBlock{
|
||||||
|
public function __construct(){
|
||||||
|
parent::__construct(AIR, 0, "Air");
|
||||||
|
$this->isActivable = false;
|
||||||
|
$this->isBreakable = false;
|
||||||
|
$this->isFlowable = true;
|
||||||
|
$this->isTransparent = true;
|
||||||
|
$this->isReplaceable = true;
|
||||||
|
$this->isPlaceable = false;
|
||||||
|
$this->inWorld = false;
|
||||||
|
$this->hasPhysics = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
52
src/classes/material/block/solid/Wool.php
Normal file
52
src/classes/material/block/solid/Wool.php
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
-
|
||||||
|
/ \
|
||||||
|
/ \
|
||||||
|
/ PocketMine \
|
||||||
|
/ MP \
|
||||||
|
|\ @shoghicp /|
|
||||||
|
|. \ / .|
|
||||||
|
| .. \ / .. |
|
||||||
|
| .. | .. |
|
||||||
|
| .. | .. |
|
||||||
|
\ | /
|
||||||
|
\ | /
|
||||||
|
\ | /
|
||||||
|
\ | /
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
class WoolBlock extends SolidBlock{
|
||||||
|
public function __construct($type = 0){
|
||||||
|
parent::__construct(WOOL, $type, "Wool");
|
||||||
|
$names = array(
|
||||||
|
0 => "White Wool",
|
||||||
|
1 => "Orange Wool",
|
||||||
|
2 => "Magenta Wool",
|
||||||
|
3 => "Light Blue Wool",
|
||||||
|
4 => "Yellow Wool",
|
||||||
|
5 => "Lime Wool",
|
||||||
|
6 => "Pink Wool",
|
||||||
|
7 => "Gray Wool",
|
||||||
|
8 => "Light Gray Wool",
|
||||||
|
9 => "Cyan Wool",
|
||||||
|
10 => "Purple Wool",
|
||||||
|
11 => "Blue Wool",
|
||||||
|
12 => "Brown Wool",
|
||||||
|
13 => "Green Wool",
|
||||||
|
14 => "Red Wool",
|
||||||
|
15 => "Black Wool",
|
||||||
|
);
|
||||||
|
$this->name = $names[$this->type];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -35,19 +35,19 @@ class TreeObject{
|
|||||||
);
|
);
|
||||||
public static function growTree(LevelAPI $level, Block $block){
|
public static function growTree(LevelAPI $level, Block $block){
|
||||||
switch($block->getMetadata() & 0x03){
|
switch($block->getMetadata() & 0x03){
|
||||||
case Sapling::SPRUCE:
|
case SaplingBlock::SPRUCE:
|
||||||
if(mt_rand(0,1) == 1){
|
if(mt_rand(0,1) == 1){
|
||||||
$tree = new SpruceTreeObject();
|
$tree = new SpruceTreeObject();
|
||||||
}else{
|
}else{
|
||||||
$tree = new PineTreeObject();
|
$tree = new PineTreeObject();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Sapling::BIRCH:
|
case SaplingBlock::BIRCH:
|
||||||
$tree = new SmallTreeObject();
|
$tree = new SmallTreeObject();
|
||||||
$tree->type = Sapling::BIRCH;
|
$tree->type = SaplingBlock::BIRCH;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
case Sapling::OAK:
|
case SaplingBlock::OAK:
|
||||||
if(mt_rand(0,9) === 0){
|
if(mt_rand(0,9) === 0){
|
||||||
$tree = new BigTreeObject();
|
$tree = new BigTreeObject();
|
||||||
}else{
|
}else{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user