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

Commit 69a0edd

Browse files
committed
Merge branch 'feature/blockgenerator' into develop
2 parents fc9e93b + eaf4b27 commit 69a0edd

File tree

3 files changed

+125
-0
lines changed

3 files changed

+125
-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: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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+
use pocketmine\block\Block;
12+
use pocketmine\event\block\BlockBreakEvent;
13+
use pocketmine\event\Listener;
14+
use pocketmine\item\Item;
15+
use VectorNetworkProject\TheMix\event\game\TheEndGameEvent;
16+
use VectorNetworkProject\TheMix\game\DefaultConfig;
17+
use VectorNetworkProject\TheMix\task\BlockReGeneratorTask;
18+
use VectorNetworkProject\TheMix\TheMix;
19+
20+
class BlockReGeneratorEvent implements Listener
21+
{
22+
public function event(BlockBreakEvent $event): void
23+
{
24+
$block = $event->getBlock();
25+
$inventory = $event->getPlayer()->getInventory();
26+
if (DefaultConfig::isDev() || $block->getLevel()->getName() !== DefaultConfig::getStageLevelName() || TheEndGameEvent::isFinish()) return;
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), 10 * 20);
31+
break;
32+
case Block::WOOD:
33+
if ($block->getToolType() !== $inventory->getItemInHand()->getBlockToolType()) {
34+
$event->setCancelled();
35+
return;
36+
}
37+
$inventory->addItem(Item::get(Item::WOODEN_PLANKS, 0, 4));
38+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block), 15 * 20);
39+
break;
40+
case Block::DIAMOND_ORE:
41+
if ($block->getToolType() !== $inventory->getItemInHand()->getBlockToolType()) {
42+
$event->setCancelled();
43+
return;
44+
}
45+
$inventory->addItem(Item::get(Item::DIAMOND));
46+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block), 60 * 20);
47+
break;
48+
case Block::EMERALD_ORE:
49+
if ($block->getToolType() !== $inventory->getItemInHand()->getBlockToolType()) {
50+
$event->setCancelled();
51+
return;
52+
}
53+
$inventory->addItem(Item::get(Item::EMERALD, 0, mt_rand(1, 3)));
54+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block), 60 * 20);
55+
break;
56+
case Block::COAL_ORE:
57+
if ($block->getToolType() !== $inventory->getItemInHand()->getBlockToolType()) {
58+
$event->setCancelled();
59+
return;
60+
}
61+
$inventory->addItem(Item::get(Item::COAL));
62+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block), 15 * 20);
63+
break;
64+
case Block::IRON_ORE:
65+
if ($block->getToolType() !== $inventory->getItemInHand()->getBlockToolType()) {
66+
$event->setCancelled();
67+
return;
68+
}
69+
$inventory->addItem(Item::get(Item::IRON_INGOT));
70+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block), 20 * 20);
71+
break;
72+
case Block::GOLD_ORE:
73+
if ($block->getToolType() !== $inventory->getItemInHand()->getBlockToolType()) {
74+
$event->setCancelled();
75+
return;
76+
}
77+
$inventory->addItem(Item::get(Item::GOLD_INGOT));
78+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block), 30 * 20);
79+
break;
80+
default:
81+
if ($event->getPlayer()->getLevel()->getName() === DefaultConfig::getStageLevelName() && DefaultConfig::isDev() === false) {
82+
$event->setCancelled();
83+
return;
84+
}
85+
}
86+
}
87+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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+
use pocketmine\block\Block;
12+
use pocketmine\scheduler\Task;
13+
14+
class BlockReGeneratorTask extends Task
15+
{
16+
/** @var Block $block */
17+
private $block;
18+
19+
public function __construct(Block $block)
20+
{
21+
$this->block = $block;
22+
}
23+
24+
public function onRun(int $currentTick)
25+
{
26+
$this->getBlock()->getLevel()->setBlock($this->getBlock()->asVector3(), $this->block);
27+
}
28+
29+
/**
30+
* @return Block
31+
*/
32+
public function getBlock(): Block
33+
{
34+
return $this->block;
35+
}
36+
}

0 commit comments

Comments
 (0)