mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-22 00:33:59 +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{
|
||||
public static $class = array();
|
||||
private $server;
|
||||
function __construct(PocketMinecraftServer $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(){
|
||||
@ -95,6 +214,7 @@ class BlockAPI{
|
||||
if($event !== "player.block.break"){
|
||||
return;
|
||||
}
|
||||
|
||||
$target = $this->server->api->level->getBlock($data["x"], $data["y"], $data["z"]);
|
||||
if(isset(Material::$unbreakable[$target[0]]) or $this->server->gamemode === 2){
|
||||
return $this->cancelAction($target);
|
||||
@ -262,6 +382,10 @@ class BlockAPI{
|
||||
}
|
||||
$data["original"] = array($data["block"], $data["meta"]);
|
||||
$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
|
||||
$this->cancelAction($target);
|
||||
$block = $this->server->api->level->getBlockFace($target, $data["face"]);
|
||||
@ -298,7 +422,9 @@ class BlockAPI{
|
||||
break;
|
||||
case 6:
|
||||
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;
|
||||
}
|
||||
break;
|
||||
@ -452,10 +578,6 @@ class BlockAPI{
|
||||
}else{
|
||||
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])){
|
||||
return $this->cancelAction($block); //Entity in block
|
||||
|
@ -29,7 +29,7 @@ class PocketMinecraftServer{
|
||||
public $tCnt;
|
||||
var $version, $invisible, $api, $tickMeasure, $preparedSQL, $seed, $gamemode, $name, $maxClients, $clients, $eidCnt, $custom, $description, $motd, $timePerSecond, $spawn, $entities, $mapDir, $mapName, $map, $levelData, $tileEntities;
|
||||
private $database, $interface, $evCnt, $handCnt, $events, $eventsID, $handlers, $serverType, $lastTick, $ticker;
|
||||
|
||||
|
||||
private function load(){
|
||||
$this->version = new VersionString();
|
||||
console("[INFO] \x1b[33;1mPocketMine-MP ".MAJOR_VERSION." #".$this->version->getNumber()." by @shoghicp, LGPL License", true, true, 0);
|
||||
@ -46,7 +46,7 @@ class PocketMinecraftServer{
|
||||
console("[INFO] Loading database...");
|
||||
$this->startDatabase();
|
||||
$this->doTick = false;
|
||||
$this->api = false;
|
||||
$this->api = false;
|
||||
$this->tCnt = 1;
|
||||
$this->mapDir = false;
|
||||
$this->mapName = false;
|
||||
@ -78,9 +78,9 @@ class PocketMinecraftServer{
|
||||
$this->reloadConfig();
|
||||
console("[INFO] Server Name: \x1b[36m".$this->name."\x1b[0m");
|
||||
console("[DEBUG] Server ID: ".$this->serverID, true, true, 2);
|
||||
$this->stop = false;
|
||||
$this->stop = false;
|
||||
}
|
||||
|
||||
|
||||
function __construct($name, $gamemode = 1, $seed = false, $port = 19132, $serverID = false){
|
||||
$this->port = (int) $port; //19132 - 19135
|
||||
$this->gamemode = (int) $gamemode;
|
||||
@ -244,7 +244,7 @@ class PocketMinecraftServer{
|
||||
}
|
||||
console("[ERROR] Event \"$event\" has been deprecated.$sub [Handler]");
|
||||
}
|
||||
|
||||
|
||||
if($result !== false){
|
||||
$this->trigger($event, $data);
|
||||
}
|
||||
@ -295,7 +295,7 @@ class PocketMinecraftServer{
|
||||
console("[INFO] Gamemode: \x1b[36m".$this->getGamemode()."\x1b[0m");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function getGamemode(){
|
||||
switch($this->gamemode){
|
||||
case 0:
|
||||
@ -376,7 +376,7 @@ class PocketMinecraftServer{
|
||||
"Rotation" => array(
|
||||
0 => $entity->yaw,
|
||||
1 => $entity->pitch,
|
||||
),
|
||||
),
|
||||
);
|
||||
}elseif($entity->class === ENTITY_ITEM){
|
||||
$entities[] = array(
|
||||
@ -395,8 +395,8 @@ class PocketMinecraftServer{
|
||||
"Rotation" => array(
|
||||
0 => 0,
|
||||
1 => 0,
|
||||
),
|
||||
);
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
file_put_contents($this->mapDir."entities.dat", serialize($entities));
|
||||
@ -433,7 +433,7 @@ class PocketMinecraftServer{
|
||||
console("[INFO] Server started!");
|
||||
$this->process();
|
||||
}
|
||||
|
||||
|
||||
public function dumpError(){
|
||||
console("[ERROR] An Unrecovereable has ocurred and the server has Crashed. Creating an Error Dump");
|
||||
$dump = "# PocketMine-MP Error Dump ".date("D M j H:i:s T Y")."\r\n";
|
||||
@ -616,7 +616,7 @@ class PocketMinecraftServer{
|
||||
$ev[0]->$method($data, $event);
|
||||
}else{
|
||||
$ev($data, $event);
|
||||
}
|
||||
}
|
||||
}
|
||||
}elseif(isset(Deprecation::$events[$event])){
|
||||
$sub = "";
|
||||
@ -641,7 +641,7 @@ class PocketMinecraftServer{
|
||||
return $chcnt;
|
||||
}
|
||||
|
||||
public function action($microseconds, $code, $repeat = true){
|
||||
public function action($microseconds, $code, $repeat = true){
|
||||
$this->query("INSERT INTO actions (interval, last, code, repeat) VALUES(".($microseconds / 1000000).", ".microtime(true).", '".base64_encode($code)."', ".($repeat === true ? 1:0).");");
|
||||
console("[INTERNAL] Attached to action ".$microseconds, true, true, 3);
|
||||
}
|
||||
|
@ -27,10 +27,6 @@ the Free Software Foundation, either version 3 of the License, or
|
||||
|
||||
|
||||
abstract class Block{
|
||||
/*public static $name = array(
|
||||
AIR => "GenericBlock",
|
||||
|
||||
);*/
|
||||
|
||||
protected $id;
|
||||
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){
|
||||
switch($block->getMetadata() & 0x03){
|
||||
case Sapling::SPRUCE:
|
||||
case SaplingBlock::SPRUCE:
|
||||
if(mt_rand(0,1) == 1){
|
||||
$tree = new SpruceTreeObject();
|
||||
}else{
|
||||
$tree = new PineTreeObject();
|
||||
}
|
||||
break;
|
||||
case Sapling::BIRCH:
|
||||
case SaplingBlock::BIRCH:
|
||||
$tree = new SmallTreeObject();
|
||||
$tree->type = Sapling::BIRCH;
|
||||
$tree->type = SaplingBlock::BIRCH;
|
||||
break;
|
||||
default:
|
||||
case Sapling::OAK:
|
||||
case SaplingBlock::OAK:
|
||||
if(mt_rand(0,9) === 0){
|
||||
$tree = new BigTreeObject();
|
||||
}else{
|
||||
|
Loading…
x
Reference in New Issue
Block a user