mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-08 02:42:58 +00:00
Added Vine blocks, closes #2162
This commit is contained in:
@ -167,7 +167,8 @@ abstract class Block extends Position implements Metadatable{
|
|||||||
const MELON_BLOCK = 103;
|
const MELON_BLOCK = 103;
|
||||||
const PUMPKIN_STEM = 104;
|
const PUMPKIN_STEM = 104;
|
||||||
const MELON_STEM = 105;
|
const MELON_STEM = 105;
|
||||||
|
const VINE = 106;
|
||||||
|
const VINES = 106;
|
||||||
const FENCE_GATE = 107;
|
const FENCE_GATE = 107;
|
||||||
const BRICK_STAIRS = 108;
|
const BRICK_STAIRS = 108;
|
||||||
const STONE_BRICK_STAIRS = 109;
|
const STONE_BRICK_STAIRS = 109;
|
||||||
@ -345,7 +346,7 @@ abstract class Block extends Position implements Metadatable{
|
|||||||
[Item::SNOW_LAYER, 0],
|
[Item::SNOW_LAYER, 0],
|
||||||
[Item::GLASS, 0],
|
[Item::GLASS, 0],
|
||||||
[Item::GLOWSTONE_BLOCK, 0],
|
[Item::GLOWSTONE_BLOCK, 0],
|
||||||
//TODO: Vines
|
[Item::VINES, 0],
|
||||||
[Item::NETHER_REACTOR, 0],
|
[Item::NETHER_REACTOR, 0],
|
||||||
[Item::LADDER, 0],
|
[Item::LADDER, 0],
|
||||||
[Item::SPONGE, 0],
|
[Item::SPONGE, 0],
|
||||||
@ -621,7 +622,7 @@ abstract class Block extends Position implements Metadatable{
|
|||||||
self::MELON_BLOCK => Melon::class,
|
self::MELON_BLOCK => Melon::class,
|
||||||
self::PUMPKIN_STEM => PumpkinStem::class,
|
self::PUMPKIN_STEM => PumpkinStem::class,
|
||||||
self::MELON_STEM => MelonStem::class,
|
self::MELON_STEM => MelonStem::class,
|
||||||
|
self::VINE => Vine::class,
|
||||||
self::FENCE_GATE => FenceGate::class,
|
self::FENCE_GATE => FenceGate::class,
|
||||||
self::BRICK_STAIRS => BrickStairs::class,
|
self::BRICK_STAIRS => BrickStairs::class,
|
||||||
self::STONE_BRICK_STAIRS => StoneBrickStairs::class,
|
self::STONE_BRICK_STAIRS => StoneBrickStairs::class,
|
||||||
|
168
src/pocketmine/block/Vine.php
Normal file
168
src/pocketmine/block/Vine.php
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
<?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/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\item\Item;
|
||||||
|
use pocketmine\item\Tool;
|
||||||
|
use pocketmine\level\Level;
|
||||||
|
use pocketmine\math\AxisAlignedBB;
|
||||||
|
use pocketmine\Player;
|
||||||
|
use pocketmine\entity\Entity;
|
||||||
|
|
||||||
|
class Vine extends Transparent{
|
||||||
|
public function __construct($meta = 0){
|
||||||
|
parent::__construct(self::VINE, $meta, "Vines");
|
||||||
|
$this->isSolid = false;
|
||||||
|
$this->isFullBlock = false;
|
||||||
|
$this->hardness = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onEntityCollide(Entity $entity){
|
||||||
|
$entity->fallDistance = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBoundingBox(){
|
||||||
|
$f1 = 1;
|
||||||
|
$f2 = 1;
|
||||||
|
$f3 = 1;
|
||||||
|
$f4 = 0;
|
||||||
|
$f5 = 0;
|
||||||
|
$f6 = 0;
|
||||||
|
|
||||||
|
$flag = $this->meta > 0;
|
||||||
|
|
||||||
|
if(($this->meta & 0x02) > 0){
|
||||||
|
$f4 = max($f4, 0.0625);
|
||||||
|
$f1 = 0;
|
||||||
|
$f2 = 0;
|
||||||
|
$f5 = 1;
|
||||||
|
$f3 = 0;
|
||||||
|
$f6 = 1;
|
||||||
|
$flag = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(($this->meta & 0x08) > 0){
|
||||||
|
$f1 = min($f1, 0.9375);
|
||||||
|
$f4 = 1;
|
||||||
|
$f2 = 0;
|
||||||
|
$f5 = 1;
|
||||||
|
$f3 = 0;
|
||||||
|
$f6 = 1;
|
||||||
|
$flag = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(($this->meta & 0x01) > 0){
|
||||||
|
$f3 = min($f3, 0.9375);
|
||||||
|
$f6 = 1;
|
||||||
|
$f1 = 0;
|
||||||
|
$f4 = 1;
|
||||||
|
$f2 = 0;
|
||||||
|
$f5 = 1;
|
||||||
|
$flag = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$flag and $this->getSide(1)->isSolid){
|
||||||
|
$f2 = min($f2, 0.9375);
|
||||||
|
$f5 = 1;
|
||||||
|
$f1 = 0;
|
||||||
|
$f4 = 1;
|
||||||
|
$f3 = 0;
|
||||||
|
$f6 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new AxisAlignedBB(
|
||||||
|
$this->x + $f1,
|
||||||
|
$this->y + $f2,
|
||||||
|
$this->z + $f3,
|
||||||
|
$this->x + $f4,
|
||||||
|
$this->y + $f5,
|
||||||
|
$this->z + $f6
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){
|
||||||
|
if($target->isSolid){
|
||||||
|
$faces = [
|
||||||
|
0 => 0,
|
||||||
|
1 => 0,
|
||||||
|
2 => 1,
|
||||||
|
3 => 4,
|
||||||
|
4 => 8,
|
||||||
|
5 => 2,
|
||||||
|
];
|
||||||
|
if(isset($faces[$face])){
|
||||||
|
$this->meta = $faces[$face];
|
||||||
|
$this->getLevel()->setBlock($block, $this, true, true);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBreakTime(Item $item){
|
||||||
|
if($item->isShears()){
|
||||||
|
return 0.02;
|
||||||
|
}elseif($item->isSword()){
|
||||||
|
return 0.2;
|
||||||
|
}elseif($item->isAxe()){
|
||||||
|
switch($item->isAxe()){
|
||||||
|
case Tool::TIER_WOODEN:
|
||||||
|
return 0.15;
|
||||||
|
case Tool::TIER_STONE:
|
||||||
|
return 0.075;
|
||||||
|
case Tool::TIER_IRON:
|
||||||
|
return 0.05;
|
||||||
|
case Tool::TIER_DIAMOND:
|
||||||
|
return 0.0375;
|
||||||
|
case Tool::TIER_GOLD:
|
||||||
|
return 0.025;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onUpdate($type){
|
||||||
|
if($type === Level::BLOCK_UPDATE_NORMAL){
|
||||||
|
/*if($this->getSide(0)->getID() === self::AIR){ //Replace with common break method
|
||||||
|
Server::getInstance()->api->entity->drop($this, Item::get(LADDER, 0, 1));
|
||||||
|
$this->getLevel()->setBlock($this, new Air(), true, true, true);
|
||||||
|
return Level::BLOCK_UPDATE_NORMAL;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDrops(Item $item){
|
||||||
|
if($item->isShears()){
|
||||||
|
return [
|
||||||
|
[$this->id, 0, 1],
|
||||||
|
];
|
||||||
|
}else{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -159,7 +159,8 @@ class Item{
|
|||||||
const MELON_BLOCK = 103;
|
const MELON_BLOCK = 103;
|
||||||
const PUMPKIN_STEM = 104;
|
const PUMPKIN_STEM = 104;
|
||||||
const MELON_STEM = 105;
|
const MELON_STEM = 105;
|
||||||
|
const VINE = 106;
|
||||||
|
const VINES = 106;
|
||||||
const FENCE_GATE = 107;
|
const FENCE_GATE = 107;
|
||||||
const BRICK_STAIRS = 108;
|
const BRICK_STAIRS = 108;
|
||||||
const STONE_BRICK_STAIRS = 109;
|
const STONE_BRICK_STAIRS = 109;
|
||||||
|
Reference in New Issue
Block a user