Skip to content
This repository was archived by the owner on Feb 8, 2019. It is now read-only.

Commit 1008028

Browse files
committed
Add BlockReGenerator
1 parent 23df5ee commit 1008028

File tree

3 files changed

+115
-0
lines changed

3 files changed

+115
-0
lines changed

src/VectorNetworkProject/TheMix/TheMix.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use VectorNetworkProject\TheMix\command\defaults\PingCommand;
1919
use VectorNetworkProject\TheMix\command\defaults\TpsCommand;
2020
use VectorNetworkProject\TheMix\command\Permissions;
21+
use VectorNetworkProject\TheMix\event\block\BlockReGeneratorEvent;
2122
use VectorNetworkProject\TheMix\event\block\TheBlockBreakEvent;
2223
use VectorNetworkProject\TheMix\event\block\TheBlockPlaceEvent;
2324
use VectorNetworkProject\TheMix\event\entity\TheEntityDamageEvent;
@@ -108,5 +109,6 @@ private function registerEvents(): void
108109
$plm->registerEvents(new TheEndGameEvent(), $this);
109110
$plm->registerEvents(new ThePlayerStreakEvent(), $this);
110111
$plm->registerEvents(new TheLevelUpEvent(), $this);
112+
$plm->registerEvents(new BlockReGeneratorEvent(), $this);
111113
}
112114
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
/**
3+
* Copyright (c) 2018 VectorNetworkProject. All rights reserved. MIT license.
4+
*
5+
* GitHub: https://github.com/VectorNetworkProject/TheMix
6+
* Website: https://www.vector-network.tk
7+
*/
8+
9+
namespace VectorNetworkProject\TheMix\event\block;
10+
11+
12+
use pocketmine\block\Block;
13+
use pocketmine\event\block\BlockBreakEvent;
14+
use pocketmine\event\Listener;
15+
use pocketmine\item\Item;
16+
use pocketmine\item\TieredTool;
17+
use VectorNetworkProject\TheMix\game\DefaultConfig;
18+
use VectorNetworkProject\TheMix\task\BlockReGeneratorTask;
19+
use VectorNetworkProject\TheMix\TheMix;
20+
21+
class BlockReGeneratorEvent implements Listener
22+
{
23+
public function event(BlockBreakEvent $event): void
24+
{
25+
$block = $event->getBlock();
26+
$inventory = $event->getPlayer()->getInventory();
27+
switch ($block->getId()) {
28+
case Block::MELON_BLOCK:
29+
$inventory->addItem(Item::get(Item::MELON, 0, 16));
30+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block, Block::MELON_BLOCK), 10 * 20);
31+
break;
32+
case Block::WOOD:
33+
if ($block->getToolType() !== $inventory->getItemInHand()->getBlockToolType()) $event->setCancelled();
34+
$inventory->addItem(Item::get(Item::WOODEN_PLANKS, 0, 4));
35+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block, Block::WOOD), 15 * 20);
36+
break;
37+
case Block::DIAMOND_ORE:
38+
if ($block->getToolType() !== $inventory->getItemInHand()->getBlockToolType()) $event->setCancelled();
39+
if (TieredTool::TIER_IRON >= $inventory->getItemInHand()->getBlockToolHarvestLevel()) $event->setCancelled();
40+
$inventory->addItem(Item::get(Item::DIAMOND));
41+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block, Block::DIAMOND_ORE), 60 * 20);
42+
break;
43+
case Block::EMERALD_ORE:
44+
if ($block->getToolType() !== $inventory->getItemInHand()->getBlockToolType()) $event->setCancelled();
45+
if (TieredTool::TIER_IRON >= $inventory->getItemInHand()->getBlockToolHarvestLevel()) $event->setCancelled();
46+
$inventory->addItem(Item::get(Item::EMERALD, 0, mt_rand(1, 3)));
47+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block, Block::EMERALD_ORE), 60 * 20);
48+
break;
49+
case Block::COAL_ORE:
50+
if ($block->getToolType() !== $inventory->getItemInHand()->getBlockToolType()) $event->setCancelled();
51+
if (TieredTool::TIER_WOODEN >= $inventory->getItemInHand()->getBlockToolHarvestLevel()) $event->setCancelled();
52+
$inventory->addItem(Item::get(Item::COAL));
53+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block, Block::COAL_ORE), 15 * 20);
54+
break;
55+
case Block::IRON_ORE:
56+
if ($block->getToolType() !== $inventory->getItemInHand()->getBlockToolType()) $event->setCancelled();
57+
if (TieredTool::TIER_STONE >= $inventory->getItemInHand()->getBlockToolHarvestLevel()) $event->setCancelled();
58+
$inventory->addItem(Item::get(Item::IRON_INGOT));
59+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block, Block::IRON_ORE), 20 * 20);
60+
break;
61+
case Block::GOLD_ORE:
62+
63+
$inventory->addItem(Item::get(Item::GOLD_INGOT));
64+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block, Block::GOLD_ORE), 30 * 20);
65+
break;
66+
default:
67+
if ($event->getPlayer()->getLevel()->getName() === DefaultConfig::getStageLevelName() && DefaultConfig::isDev() === false) {
68+
$event->setCancelled();
69+
}
70+
}
71+
}
72+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
/**
3+
* Copyright (c) 2018 VectorNetworkProject. All rights reserved. MIT license.
4+
*
5+
* GitHub: https://github.com/VectorNetworkProject/TheMix
6+
* Website: https://www.vector-network.tk
7+
*/
8+
9+
namespace VectorNetworkProject\TheMix\task;
10+
11+
12+
use pocketmine\block\Block;
13+
use pocketmine\scheduler\Task;
14+
15+
class BlockReGeneratorTask extends Task
16+
{
17+
/** @var Block $block */
18+
private $block;
19+
20+
/** @var int $id */
21+
private $id;
22+
23+
public function __construct(Block $block, int $id)
24+
{
25+
$this->block = $block;
26+
$this->id = $id;
27+
}
28+
29+
public function onRun(int $currentTick)
30+
{
31+
$this->getBlock()->getLevel()->setBlock($this->getBlock()->asVector3(), Block::get($this->id));
32+
}
33+
34+
/**
35+
* @return Block
36+
*/
37+
public function getBlock(): Block
38+
{
39+
return $this->block;
40+
}
41+
}

0 commit comments

Comments
 (0)