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\entity; |
10
|
|
|
|
11
|
|
|
use InkoHX\GoldLibrary\GoldAPI; |
12
|
|
|
use InkoHX\LeveLibrary\LevelAPI; |
13
|
|
|
use pocketmine\event\entity\EntityDamageByEntityEvent; |
14
|
|
|
use pocketmine\event\entity\EntityDamageEvent; |
15
|
|
|
use pocketmine\event\Listener; |
16
|
|
|
use pocketmine\item\Item; |
17
|
|
|
use pocketmine\Player; |
18
|
|
|
use pocketmine\Server; |
19
|
|
|
use VectorNetworkProject\TheMix\event\game\TheEndGameEvent; |
20
|
|
|
use VectorNetworkProject\TheMix\game\corepvp\blue\BlueTeamManager; |
21
|
|
|
use VectorNetworkProject\TheMix\game\corepvp\red\RedTeamManager; |
22
|
|
|
use VectorNetworkProject\TheMix\game\corepvp\SpawnManager; |
23
|
|
|
use VectorNetworkProject\TheMix\game\streak\Streak; |
24
|
|
|
|
25
|
|
|
class TheEntityDamageEvent implements Listener |
26
|
|
|
{ |
27
|
|
|
/** |
28
|
|
|
* @param EntityDamageEvent $event |
29
|
|
|
* |
30
|
|
|
* @throws \ReflectionException |
31
|
|
|
*/ |
32
|
|
|
public function event(EntityDamageEvent $event) |
33
|
|
|
{ |
34
|
|
|
$entity = $event->getEntity(); |
35
|
|
|
$entity->extinguish(); |
36
|
|
|
if (TheEndGameEvent::isFinish()) { |
37
|
|
|
$event->setCancelled(); |
38
|
|
|
|
39
|
|
|
return; |
40
|
|
|
} |
41
|
|
|
if (!$entity instanceof Player) { |
42
|
|
|
return; |
43
|
|
|
} |
44
|
|
|
if ($event->getFinalDamage() < $entity->getHealth()) { |
45
|
|
|
return; |
46
|
|
|
} |
47
|
|
|
if ($event->getCause() === EntityDamageEvent::CAUSE_FALL) { |
48
|
|
|
$event->setCancelled(); |
49
|
|
|
|
50
|
|
|
return; |
51
|
|
|
} |
52
|
|
|
if ($entity->getLevel()->getName() === Server::getInstance()->getDefaultLevel()->getName()) { |
53
|
|
|
$event->setCancelled(); |
54
|
|
|
|
55
|
|
|
return; |
56
|
|
|
} |
57
|
|
|
if ($event instanceof EntityDamageByEntityEvent) { |
58
|
|
|
$event->setCancelled(); |
59
|
|
|
$damager = $event->getDamager(); |
60
|
|
|
self::dropItem($entity); |
61
|
|
|
SpawnManager::PlayerReSpawn($entity); |
62
|
|
|
Streak::resetStreak($entity); |
63
|
|
|
if ($damager instanceof Player) { |
64
|
|
|
if ($entity->getName() === $damager->getName()) { |
65
|
|
|
Server::getInstance()->broadcastMessage("{$entity->getNameTag()} §fは自滅した。"); |
66
|
|
|
|
67
|
|
|
return; |
68
|
|
|
} |
69
|
|
|
Streak::addStreak($damager); |
70
|
|
|
GoldAPI::addGold($damager, mt_rand(10, 15)); |
71
|
|
|
LevelAPI::Auto($damager, mt_rand(10, 15)); |
72
|
|
|
Server::getInstance()->broadcastMessage("{$damager->getNameTag()} §fが {$entity->getNameTag()} §fを倒した。"); |
73
|
|
|
} |
74
|
|
|
} else { |
75
|
|
|
$event->setCancelled(); |
76
|
|
|
self::dropItem($entity); |
77
|
|
|
Streak::resetStreak($entity); |
78
|
|
|
SpawnManager::PlayerReSpawn($entity); |
79
|
|
|
Server::getInstance()->broadcastMessage("{$entity->getNameTag()} §fは自滅した。"); |
80
|
|
|
} |
81
|
|
|
} |
82
|
|
|
|
83
|
|
|
public function BlockTeamPvP(EntityDamageEvent $event) |
|
|
|
|
84
|
|
|
{ |
85
|
|
|
if ($event instanceof EntityDamageByEntityEvent) { |
86
|
|
|
$entity = $event->getEntity(); |
87
|
|
|
$damager = $event->getDamager(); |
88
|
|
|
if (!$entity instanceof Player && !$damager instanceof Player) { |
89
|
|
|
return; |
90
|
|
|
} |
91
|
|
|
if (BlueTeamManager::isJoined($entity) === true && BlueTeamManager::isJoined($damager) === true) { |
|
|
|
|
92
|
|
|
$event->setCancelled(); |
93
|
|
|
} elseif (RedTeamManager::isJoined($entity) === true && RedTeamManager::isJoined($damager) === true) { |
|
|
|
|
94
|
|
|
$event->setCancelled(); |
95
|
|
|
} |
96
|
|
|
} |
97
|
|
|
} |
98
|
|
|
|
99
|
|
|
/** |
100
|
|
|
* @param Player $player |
101
|
|
|
* @return void |
102
|
|
|
*/ |
103
|
|
|
public static function dropItem(Player $player): void |
104
|
|
|
{ |
105
|
|
|
$contents = $player->getInventory()->getContents(); |
106
|
|
|
foreach ($contents as $slot => $item) { |
107
|
|
|
switch ($item->getId()) { |
108
|
|
|
case Item::STONE_AXE: |
109
|
|
|
case Item::STONE_PICKAXE: |
110
|
|
|
case Item::STONE_SHOVEL: |
111
|
|
|
case Item::WOODEN_SWORD: |
112
|
|
|
case Item::LEATHER_CAP: |
113
|
|
|
case Item::LEATHER_CHESTPLATE: |
114
|
|
|
case Item::LEATHER_LEGGINGS: |
115
|
|
|
case Item::LEATHER_BOOTS: |
116
|
|
|
case Item::BOW: |
117
|
|
|
unset($contents[$slot]); |
118
|
|
|
break; |
119
|
|
|
} |
120
|
|
|
} |
121
|
|
|
foreach ($contents as $item) { |
122
|
|
|
$player->getLevel()->dropItem($player->asVector3(), $item); |
123
|
|
|
} |
124
|
|
|
} |
125
|
|
|
} |
126
|
|
|
|
This check examines a number of code elements and verifies that they conform to the given naming conventions.
You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods.