Added some new blocks, fixed collisions not being detected when standing on top of a full block

This commit is contained in:
Dylan K. Taylor 2017-08-18 13:58:05 +01:00
parent 41f5cba971
commit f73d3d086e
6 changed files with 187 additions and 21 deletions

View File

@ -188,7 +188,7 @@ class Block extends Position implements BlockIds, Metadatable{
self::registerBlock(new StoneBrickStairs());
self::registerBlock(new Mycelium());
self::registerBlock(new WaterLily());
self::registerBlock(new NetherBrick());
self::registerBlock(new NetherBrick(Block::NETHER_BRICK_BLOCK, 0, "Nether Bricks"));
self::registerBlock(new NetherBrickFence());
self::registerBlock(new NetherBrickStairs());
self::registerBlock(new NetherWartPlant());
@ -229,7 +229,7 @@ class Block extends Position implements BlockIds, Metadatable{
//TODO: POWERED_COMPARATOR
self::registerBlock(new DaylightSensor());
self::registerBlock(new Redstone());
//TODO: NETHER_QUARTZ_ORE
self::registerBlock(new NetherQuartzOre());
//TODO: HOPPER_BLOCK
self::registerBlock(new Quartz());
self::registerBlock(new QuartzStairs());
@ -283,9 +283,9 @@ class Block extends Position implements BlockIds, Metadatable{
self::registerBlock(new EndRod());
//TODO: END_GATEWAY
//TODO: MAGMA
//TODO: NETHER_WART_BLOCK
//TODO: RED_NETHER_BRICK
self::registerBlock(new Magma());
self::registerBlock(new NetherWartBlock());
self::registerBlock(new NetherBrick(Block::RED_NETHER_BRICK, 0, "Red Nether Bricks"));
//TODO: BONE_BLOCK
//TODO: SHULKER_BOX

View File

@ -0,0 +1,75 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* 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.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\entity\Entity;
use pocketmine\event\entity\EntityDamageByBlockEvent;
use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\item\Item;
use pocketmine\item\Tool;
class Magma extends Solid{
protected $id = Block::MAGMA;
public function __construct(int $meta = 0){
$this->meta = $meta;
}
public function getName() : string{
return "Magma Block";
}
public function getHardness() : float{
return 0.5;
}
public function getToolType() : int{
return Tool::TYPE_PICKAXE;
}
public function getLightLevel() : int{
return 3;
}
public function hasEntityCollision() : bool{
return true;
}
public function onEntityCollide(Entity $entity){
if(!$entity->isSneaking()){
$ev = new EntityDamageByBlockEvent($this, $entity, EntityDamageEvent::CAUSE_FIRE, 1);
$entity->attack($ev->getFinalDamage(), $ev);
}
}
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return parent::getDrops($item);
}
return [];
}
}

View File

@ -28,20 +28,10 @@ use pocketmine\item\Tool;
class NetherBrick extends Solid{
protected $id = self::NETHER_BRICK_BLOCK;
public function __construct(int $meta = 0){
$this->meta = $meta;
}
public function getToolType() : int{
return Tool::TYPE_PICKAXE;
}
public function getName() : string{
return "Nether Bricks";
}
public function getHardness() : float{
return 2;
}

View File

@ -0,0 +1,59 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* 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.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\item\Item;
use pocketmine\item\Tool;
class NetherQuartzOre extends Solid{
protected $id = Block::NETHER_QUARTZ_ORE;
public function __construct(int $meta = 0){
$this->meta = $meta;
}
public function getName() : string{
return "Nether Quartz Ore";
}
public function getHardness() : float{
return 3;
}
public function getToolType() : int{
return Tool::TYPE_PICKAXE;
}
public function getDrops(Item $item) : array{
if($item->isPickaxe() >= Tool::TIER_WOODEN){
return [
Item::get(Item::QUARTZ, 0, 1)
];
}
return [];
}
}

View File

@ -0,0 +1,41 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* 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.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
declare(strict_types=1);
namespace pocketmine\block;
class NetherWartBlock extends Solid{
protected $id = Block::NETHER_WART_BLOCK;
public function __construct(int $meta = 0){
$this->meta = $meta;
}
public function getName() : string{
return "Nether Wart Block";
}
public function getHardness() : float{
return 1;
}
}

View File

@ -1611,12 +1611,13 @@ abstract class Entity extends Location implements Metadatable{
*/
public function getBlocksAround() : array{
if($this->blocksAround === null){
$minX = Math::floorFloat($this->boundingBox->minX);
$minY = Math::floorFloat($this->boundingBox->minY);
$minZ = Math::floorFloat($this->boundingBox->minZ);
$maxX = Math::ceilFloat($this->boundingBox->maxX);
$maxY = Math::ceilFloat($this->boundingBox->maxY);
$maxZ = Math::ceilFloat($this->boundingBox->maxZ);
$bb = $this->boundingBox->grow(0.01, 0.01, 0.01);
$minX = Math::floorFloat($bb->minX);
$minY = Math::floorFloat($bb->minY);
$minZ = Math::floorFloat($bb->minZ);
$maxX = Math::ceilFloat($bb->maxX);
$maxY = Math::ceilFloat($bb->maxY);
$maxZ = Math::ceilFloat($bb->maxZ);
$this->blocksAround = [];