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

Commit 115ac17

Browse files
authored
Merge pull request #36 from VectorNetworkProject/feature/eventlistener
Feature/eventlistener
2 parents 4343c33 + 3082062 commit 115ac17

39 files changed

+825
-677
lines changed

.scrutinizer.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
checks:
2+
php:
3+
simplify_boolean_return: true
4+
properties_in_camelcaps: true
5+
parameters_in_camelcaps: true
6+
overriding_parameter: true
7+
no_short_method_names:
8+
minimum: '3'
9+
no_goto: true
10+
naming_conventions:
11+
local_variable: '^[a-z][a-zA-Z0-9]*$'
12+
abstract_class_name: ^Abstract|Factory$
13+
utility_class_name: 'Utils?$'
14+
constant_name: '^[A-Z][A-Z0-9]*(?:_[A-Z0-9]+)*$'
15+
property_name: '^[a-z][a-zA-Z0-9]*$'
16+
method_name: '^(?:[a-z]|__)[a-zA-Z0-9]*$'
17+
parameter_name: '^[a-z][a-zA-Z0-9]*$'
18+
interface_name: '^[A-Z][a-zA-Z0-9]*Interface$'
19+
type_name: '^[A-Z][a-zA-Z0-9]*$'
20+
exception_name: '^[A-Z][a-zA-Z0-9]*Exception$'
21+
isser_method_name: '^(?:is|has|should|may|supports)'

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@
1212
[![GitHub All Releases](https://img.shields.io/github/downloads/VectorNetworkProject/TheMix/total.svg?style=for-the-badge)](https://github.com/VectorNetworkProject/TheMix/releases)
1313
[![Twitter Tweet](https://img.shields.io/badge/Twitter-tweet-blue.svg?style=for-the-badge)](https://twitter.com/intent/tweet?text=VectorNetwork:&url=https%3A%2F%2Fgithub.com%2FVectorNetworkProject)
1414
[![Discord](https://img.shields.io/discord/439355544063705088.svg?style=for-the-badge)](https://discord.gg/EF2G5dh)
15-
[![ServerAdd](https://img.shields.io/badge/Server-Add-brightgreen.svg?style=for-the-badge)](minecraft://?addExternalServer=VectorNetwork|play.vector-network.tk:19132)
15+
[![ServerAdd](https://img.shields.io/badge/Server-Add-brightgreen.svg?style=for-the-badge)](minecraft://?addExternalServer=VectorNetwork|play.vector-network.tk:56333)
1616

1717
[![HitCount](http://hits.dwyl.io/VectorNetworkProject/TheMix.svg)](http://hits.dwyl.io/VectorNetworkProject/TheMix)
1818
[![StyleCI](https://github.styleci.io/repos/157084851/shield?branch=master)](https://github.styleci.io/repos/157084851)
19+
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/VectorNetworkProject/TheMix/badges/quality-score.png?b=develop)](https://scrutinizer-ci.com/g/VectorNetworkProject/TheMix/?branch=develop)
1920

2021
# The Mix
2122
VectorNetworkの新しいゲームプラグイン!

composer.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/VectorNetworkProject/TheMix/TheMix.php

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,12 @@
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;
22-
use VectorNetworkProject\TheMix\event\block\TheBlockBreakEvent;
23-
use VectorNetworkProject\TheMix\event\block\TheBlockPlaceEvent;
24-
use VectorNetworkProject\TheMix\event\entity\TheEntityDamageEvent;
25-
use VectorNetworkProject\TheMix\event\game\TheEndGameEvent;
26-
use VectorNetworkProject\TheMix\event\game\ThePlayerStreakEvent;
27-
use VectorNetworkProject\TheMix\event\gold\ThePlayerAddGoldEvent;
28-
use VectorNetworkProject\TheMix\event\level\TheItemSpawnEvent;
29-
use VectorNetworkProject\TheMix\event\level\TheLevelUpEvent;
30-
use VectorNetworkProject\TheMix\event\level\ThePlayerAddXpEvent;
31-
use VectorNetworkProject\TheMix\event\player\ThePlayerInteractEvent;
32-
use VectorNetworkProject\TheMix\event\player\ThePlayerJoinEvent;
33-
use VectorNetworkProject\TheMix\event\player\ThePlayerLoginEvent;
34-
use VectorNetworkProject\TheMix\event\player\ThePlayerQuitEvent;
21+
use VectorNetworkProject\TheMix\event\BlockEventListener;
22+
use VectorNetworkProject\TheMix\event\EntityEventListener;
23+
use VectorNetworkProject\TheMix\event\GameEventListener;
24+
use VectorNetworkProject\TheMix\event\LevelEventListener;
25+
use VectorNetworkProject\TheMix\event\LibraryEventListener;
26+
use VectorNetworkProject\TheMix\event\PlayerEventListener;
3527
use VectorNetworkProject\TheMix\game\DefaultConfig;
3628

3729
class TheMix extends PluginBase
@@ -107,19 +99,11 @@ private function registerCommands(): void
10799
private function registerEvents(): void
108100
{
109101
$plm = $this->getServer()->getPluginManager();
110-
$plm->registerEvents(new ThePlayerLoginEvent(), $this);
111-
$plm->registerEvents(new ThePlayerJoinEvent(), $this);
112-
$plm->registerEvents(new ThePlayerQuitEvent(), $this);
113-
$plm->registerEvents(new TheBlockBreakEvent(), $this);
114-
$plm->registerEvents(new TheBlockPlaceEvent(), $this);
115-
$plm->registerEvents(new TheEntityDamageEvent(), $this);
116-
$plm->registerEvents(new TheEndGameEvent(), $this);
117-
$plm->registerEvents(new ThePlayerStreakEvent(), $this);
118-
$plm->registerEvents(new TheLevelUpEvent(), $this);
119-
$plm->registerEvents(new ThePlayerAddGoldEvent(), $this);
120-
$plm->registerEvents(new ThePlayerAddXpEvent(), $this);
121-
$plm->registerEvents(new BlockReGeneratorEvent(), $this);
122-
$plm->registerEvents(new ThePlayerInteractEvent(), $this);
123-
$plm->registerEvents(new TheItemSpawnEvent(), $this);
102+
$plm->registerEvents(new BlockEventListener(), $this);
103+
$plm->registerEvents(new EntityEventListener(), $this);
104+
$plm->registerEvents(new GameEventListener(), $this);
105+
$plm->registerEvents(new LevelEventListener(), $this);
106+
$plm->registerEvents(new LibraryEventListener(), $this);
107+
$plm->registerEvents(new PlayerEventListener(), $this);
124108
}
125109
}
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
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;
10+
11+
use pocketmine\block\Block;
12+
use pocketmine\event\block\BlockBreakEvent;
13+
use pocketmine\event\block\BlockPlaceEvent;
14+
use pocketmine\event\Listener;
15+
use pocketmine\item\Item;
16+
use pocketmine\Server;
17+
use VectorNetworkProject\TheMix\game\corepvp\blue\BlueCoreManager;
18+
use VectorNetworkProject\TheMix\game\corepvp\blue\BlueTeamManager;
19+
use VectorNetworkProject\TheMix\game\corepvp\red\RedCoreManager;
20+
use VectorNetworkProject\TheMix\game\corepvp\red\RedTeamManager;
21+
use VectorNetworkProject\TheMix\game\DefaultConfig;
22+
use VectorNetworkProject\TheMix\game\event\game\BreakCoreEvent;
23+
use VectorNetworkProject\TheMix\task\BlockReGeneratorTask;
24+
use VectorNetworkProject\TheMix\TheMix;
25+
26+
class BlockEventListener implements Listener
27+
{
28+
/**
29+
* @param BlockBreakEvent $event
30+
*/
31+
public function onOreBreak(BlockBreakEvent $event): void
32+
{
33+
$block = $event->getBlock();
34+
$inventory = $event->getPlayer()->getInventory();
35+
if (DefaultConfig::isDev() || $block->getLevel()->getName() !== DefaultConfig::getStageLevelName() || GameEventListener::isFinish()) {
36+
$event->setCancelled();
37+
38+
return;
39+
}
40+
if ($block->getToolType() !== $inventory->getItemInHand()->getBlockToolType() && !DefaultConfig::isDev()) {
41+
$event->setCancelled();
42+
43+
return;
44+
}
45+
if (RedTeamManager::getListCount() < 1 || BlueTeamManager::getListCount() < 1) {
46+
$event->getPlayer()->sendMessage('プレイヤーが足りないのでブロックの採掘が不可能です。');
47+
$event->setCancelled();
48+
49+
return;
50+
}
51+
$event->setDrops([]);
52+
switch ($block->getId()) {
53+
case Block::MELON_BLOCK:
54+
$inventory->addItem(Item::get(Item::MELON, 0, 16));
55+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block), 10 * 20);
56+
break;
57+
case Block::WOOD:
58+
$inventory->addItem(Item::get(Item::WOODEN_PLANKS, 0, 4));
59+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block), 15 * 20);
60+
break;
61+
case Block::DIAMOND_ORE:
62+
$inventory->addItem(Item::get(Item::DIAMOND));
63+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block), 60 * 20);
64+
break;
65+
case Block::EMERALD_ORE:
66+
$inventory->addItem(Item::get(Item::EMERALD, 0, mt_rand(1, 3)));
67+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block), 60 * 20);
68+
break;
69+
case Block::COAL_ORE:
70+
$inventory->addItem(Item::get(Item::COAL));
71+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block), 15 * 20);
72+
break;
73+
case Block::IRON_ORE:
74+
$inventory->addItem(Item::get(Item::IRON_INGOT));
75+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block), 20 * 20);
76+
break;
77+
case Block::GOLD_ORE:
78+
$inventory->addItem(Item::get(Item::GOLD_INGOT));
79+
TheMix::getInstance()->getScheduler()->scheduleDelayedTask(new BlockReGeneratorTask($block), 30 * 20);
80+
break;
81+
default:
82+
if ($event->getPlayer()->getLevel()->getName() === DefaultConfig::getStageLevelName() && DefaultConfig::isDev() === false) {
83+
$event->setCancelled();
84+
85+
return;
86+
}
87+
}
88+
}
89+
90+
/**
91+
* @param BlockBreakEvent $event
92+
*
93+
* @throws \ReflectionException
94+
*/
95+
public function onBlockBreak(BlockBreakEvent $event)
96+
{
97+
$player = $event->getPlayer();
98+
$block = $event->getBlock();
99+
if (GameEventListener::isFinish()) {
100+
$event->setCancelled();
101+
102+
return;
103+
}
104+
if ($player->getLevel()->getName() === Server::getInstance()->getDefaultLevel()->getName()) {
105+
if ($player->isOp()) {
106+
return;
107+
}
108+
$event->setCancelled();
109+
}
110+
if (!DefaultConfig::isDev()) {
111+
if (RedCoreManager::isCore($block)) {
112+
$event->setCancelled();
113+
if (RedTeamManager::isJoined($player)) {
114+
return;
115+
}
116+
$revent = new BreakCoreEvent($player, BreakCoreEvent::RED);
117+
$revent->call();
118+
if (!$revent->isCancelled()) {
119+
RedCoreManager::reduceHP($revent->getDamage(), $player);
120+
}
121+
} elseif (BlueCoreManager::isCore($block)) {
122+
$event->setCancelled();
123+
if (BlueTeamManager::isJoined($player)) {
124+
return;
125+
}
126+
$bevent = new BreakCoreEvent($player, BreakCoreEvent::BLUE);
127+
$bevent->call();
128+
if (!$bevent->isCancelled()) {
129+
BlueCoreManager::reduceHP($bevent->getDamage(), $player);
130+
}
131+
}
132+
}
133+
}
134+
135+
/**
136+
* @param BlockPlaceEvent $event
137+
*/
138+
public function onBlockPlace(BlockPlaceEvent $event)
139+
{
140+
$player = $event->getPlayer();
141+
if (GameEventListener::isFinish()) {
142+
$event->setCancelled();
143+
144+
return;
145+
}
146+
if ($player->getLevel()->getName() === Server::getInstance()->getDefaultLevel()->getName()) {
147+
if ($player->isOp()) {
148+
return;
149+
}
150+
$event->setCancelled();
151+
} elseif ($player->getLevel()->getName() === DefaultConfig::getStageLevelName()) {
152+
if (DefaultConfig::isDev()) {
153+
return;
154+
}
155+
$event->setCancelled();
156+
}
157+
}
158+
}

src/VectorNetworkProject/TheMix/event/entity/TheEntityDamageEvent.php renamed to src/VectorNetworkProject/TheMix/event/EntityEventListener.php

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,33 @@
66
* Website: https://www.vector-network.tk
77
*/
88

9-
namespace VectorNetworkProject\TheMix\event\entity;
9+
namespace VectorNetworkProject\TheMix\event;
1010

1111
use InkoHX\GoldLibrary\GoldAPI;
1212
use InkoHX\LeveLibrary\LevelAPI;
1313
use pocketmine\event\entity\EntityDamageByEntityEvent;
1414
use pocketmine\event\entity\EntityDamageEvent;
1515
use pocketmine\event\Listener;
16+
use pocketmine\item\Item;
1617
use pocketmine\Player;
1718
use pocketmine\Server;
18-
use VectorNetworkProject\TheMix\event\game\TheEndGameEvent;
1919
use VectorNetworkProject\TheMix\game\corepvp\blue\BlueTeamManager;
2020
use VectorNetworkProject\TheMix\game\corepvp\red\RedTeamManager;
2121
use VectorNetworkProject\TheMix\game\corepvp\SpawnManager;
22-
use VectorNetworkProject\TheMix\game\item\ItemManager;
2322
use VectorNetworkProject\TheMix\game\streak\Streak;
2423

25-
class TheEntityDamageEvent implements Listener
24+
class EntityEventListener implements Listener
2625
{
2726
/**
2827
* @param EntityDamageEvent $event
2928
*
3029
* @throws \ReflectionException
3130
*/
32-
public function event(EntityDamageEvent $event)
31+
public function onEntityDamage(EntityDamageEvent $event)
3332
{
3433
$entity = $event->getEntity();
3534
$entity->extinguish();
36-
if (TheEndGameEvent::isFinish()) {
35+
if (GameEventListener::isFinish()) {
3736
$event->setCancelled();
3837

3938
return;
@@ -56,10 +55,10 @@ public function event(EntityDamageEvent $event)
5655
}
5756
if ($event instanceof EntityDamageByEntityEvent) {
5857
$event->setCancelled();
59-
ItemManager::DropItem($entity);
58+
$damager = $event->getDamager();
59+
self::dropItem($entity);
6060
SpawnManager::PlayerReSpawn($entity);
6161
Streak::resetStreak($entity);
62-
$damager = $event->getDamager();
6362
if ($damager instanceof Player) {
6463
if ($entity->getName() === $damager->getName()) {
6564
Server::getInstance()->broadcastMessage("{$entity->getNameTag()} §fは自滅した。");
@@ -73,13 +72,16 @@ public function event(EntityDamageEvent $event)
7372
}
7473
} else {
7574
$event->setCancelled();
75+
self::dropItem($entity);
7676
Streak::resetStreak($entity);
77-
ItemManager::DropItem($entity);
7877
SpawnManager::PlayerReSpawn($entity);
7978
Server::getInstance()->broadcastMessage("{$entity->getNameTag()} §fは自滅した。");
8079
}
8180
}
8281

82+
/**
83+
* @param EntityDamageEvent $event
84+
*/
8385
public function BlockTeamPvP(EntityDamageEvent $event)
8486
{
8587
if ($event instanceof EntityDamageByEntityEvent) {
@@ -95,4 +97,32 @@ public function BlockTeamPvP(EntityDamageEvent $event)
9597
}
9698
}
9799
}
100+
101+
/**
102+
* @param Player $player
103+
*
104+
* @return void
105+
*/
106+
private static function dropItem(Player $player): void
107+
{
108+
$contents = $player->getInventory()->getContents();
109+
foreach ($contents as $slot => $item) {
110+
switch ($item->getId()) {
111+
case Item::STONE_AXE:
112+
case Item::STONE_PICKAXE:
113+
case Item::STONE_SHOVEL:
114+
case Item::WOODEN_SWORD:
115+
case Item::LEATHER_CAP:
116+
case Item::LEATHER_CHESTPLATE:
117+
case Item::LEATHER_LEGGINGS:
118+
case Item::LEATHER_BOOTS:
119+
case Item::BOW:
120+
unset($contents[$slot]);
121+
break;
122+
}
123+
}
124+
foreach ($contents as $item) {
125+
$player->getLevel()->dropItem($player->asVector3(), $item);
126+
}
127+
}
98128
}

0 commit comments

Comments
 (0)