mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-30 15:19:56 +00:00
Added /kill, base entity health methods
This commit is contained in:
parent
bec642310a
commit
5cadc665d1
@ -24,11 +24,23 @@ namespace pocketmine;
|
|||||||
use pocketmine\block\Block;
|
use pocketmine\block\Block;
|
||||||
use pocketmine\command\CommandSender;
|
use pocketmine\command\CommandSender;
|
||||||
use pocketmine\entity\Human;
|
use pocketmine\entity\Human;
|
||||||
use pocketmine\Event;
|
use pocketmine\event\player\PlayerAchievementAwardedEvent;
|
||||||
|
use pocketmine\event\player\PlayerChatEvent;
|
||||||
|
use pocketmine\event\player\PlayerCommandPreprocessEvent;
|
||||||
|
use pocketmine\event\player\PlayerGameModeChangeEvent;
|
||||||
|
use pocketmine\event\player\PlayerItemHeldEvent;
|
||||||
|
use pocketmine\event\player\PlayerJoinEvent;
|
||||||
|
use pocketmine\event\player\PlayerKickEvent;
|
||||||
|
use pocketmine\event\player\PlayerLoginEvent;
|
||||||
|
use pocketmine\event\player\PlayerPreLoginEvent;
|
||||||
|
use pocketmine\event\player\PlayerQuitEvent;
|
||||||
|
use pocketmine\event\player\PlayerRespawnEvent;
|
||||||
|
use pocketmine\event\server\DataPacketReceiveEvent;
|
||||||
|
use pocketmine\event\server\DataPacketSendEvent;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\level\Level;
|
use pocketmine\level\Level;
|
||||||
use pocketmine\level\Position;
|
use pocketmine\level\Position;
|
||||||
use pocketmine\math\Vector3 as Vector3;
|
use pocketmine\math\Vector3;
|
||||||
use pocketmine\nbt\NBT;
|
use pocketmine\nbt\NBT;
|
||||||
use pocketmine\nbt\tag\Byte;
|
use pocketmine\nbt\tag\Byte;
|
||||||
use pocketmine\nbt\tag\Compound;
|
use pocketmine\nbt\tag\Compound;
|
||||||
@ -638,7 +650,7 @@ class Player extends Human implements CommandSender, IPlayer{
|
|||||||
if($this->connected === false){
|
if($this->connected === false){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$this->server->getPluginManager()->callEvent($ev = new event\server\DataPacketSendEvent($this, $packet));
|
$this->server->getPluginManager()->callEvent($ev = new DataPacketSendEvent($this, $packet));
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -919,7 +931,7 @@ class Player extends Human implements CommandSender, IPlayer{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->server->getPluginManager()->callEvent($ev = new event\player\PlayerAchievementAwardedEvent($this, $achievementId));
|
$this->server->getPluginManager()->callEvent($ev = new PlayerAchievementAwardedEvent($this, $achievementId));
|
||||||
if(!$ev->isCancelled()){
|
if(!$ev->isCancelled()){
|
||||||
$this->achievements[$achievementId] = true;
|
$this->achievements[$achievementId] = true;
|
||||||
Achievement::broadcast($this, $achievementId);
|
Achievement::broadcast($this, $achievementId);
|
||||||
@ -953,7 +965,7 @@ class Player extends Human implements CommandSender, IPlayer{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->server->getPluginManager()->callEvent($ev = new event\player\PlayerGameModeChangeEvent($this, (int) $gm));
|
$this->server->getPluginManager()->callEvent($ev = new PlayerGameModeChangeEvent($this, (int) $gm));
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1212,7 +1224,7 @@ class Player extends Human implements CommandSender, IPlayer{
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->server->getPluginManager()->callEvent($ev = new event\server\DataPacketReceiveEvent($this, $packet));
|
$this->server->getPluginManager()->callEvent($ev = new DataPacketReceiveEvent($this, $packet));
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1280,7 +1292,7 @@ class Player extends Human implements CommandSender, IPlayer{
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->server->getPluginManager()->callEvent($ev = new event\player\PlayerPreLoginEvent($this, "Plugin reason"));
|
$this->server->getPluginManager()->callEvent($ev = new PlayerPreLoginEvent($this, "Plugin reason"));
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
$this->close($ev->getKickMessage(), "Plugin reason");
|
$this->close($ev->getKickMessage(), "Plugin reason");
|
||||||
|
|
||||||
@ -1348,7 +1360,7 @@ class Player extends Human implements CommandSender, IPlayer{
|
|||||||
$this->slot = $this->hotbar[0];
|
$this->slot = $this->hotbar[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->server->getPluginManager()->callEvent($ev = new event\player\PlayerLoginEvent($this, "Plugin reason"));
|
$this->server->getPluginManager()->callEvent($ev = new PlayerLoginEvent($this, "Plugin reason"));
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
$this->close($ev->getKickMessage(), "Plugin reason");
|
$this->close($ev->getKickMessage(), "Plugin reason");
|
||||||
|
|
||||||
@ -1392,7 +1404,7 @@ class Player extends Human implements CommandSender, IPlayer{
|
|||||||
|
|
||||||
console("[INFO] " . TextFormat::AQUA . $this->username . TextFormat::RESET . "[/" . $this->ip . ":" . $this->port . "] logged in with entity id " . $this->id . " at (" . $this->level->getName() . ", " . round($this->x, 4) . ", " . round($this->y, 4) . ", " . round($this->z, 4) . ")");
|
console("[INFO] " . TextFormat::AQUA . $this->username . TextFormat::RESET . "[/" . $this->ip . ":" . $this->port . "] logged in with entity id " . $this->id . " at (" . $this->level->getName() . ", " . round($this->x, 4) . ", " . round($this->y, 4) . ", " . round($this->z, 4) . ")");
|
||||||
|
|
||||||
$this->server->getPluginManager()->callEvent(new event\player\PlayerJoinEvent($this, $this->username . " joined the game"));
|
$this->server->getPluginManager()->callEvent(new PlayerJoinEvent($this, $this->username . " joined the game"));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case ProtocolInfo::READY_PACKET:
|
case ProtocolInfo::READY_PACKET:
|
||||||
@ -1423,7 +1435,7 @@ class Player extends Human implements CommandSender, IPlayer{
|
|||||||
|
|
||||||
$pos = new Position($this->x, $this->y, $this->z, $this->level);
|
$pos = new Position($this->x, $this->y, $this->z, $this->level);
|
||||||
$pos = $this->level->getSafeSpawn($pos);
|
$pos = $this->level->getSafeSpawn($pos);
|
||||||
$this->server->getPluginManager()->callEvent($ev = new event\player\PlayerRespawnEvent($this, $pos));
|
$this->server->getPluginManager()->callEvent($ev = new PlayerRespawnEvent($this, $pos));
|
||||||
|
|
||||||
$this->teleport($ev->getRespawnPosition());
|
$this->teleport($ev->getRespawnPosition());
|
||||||
$this->sendBuffer();
|
$this->sendBuffer();
|
||||||
@ -1493,7 +1505,7 @@ class Player extends Human implements CommandSender, IPlayer{
|
|||||||
if($packet->slot === false){
|
if($packet->slot === false){
|
||||||
$this->sendInventorySlot($packet->slot);
|
$this->sendInventorySlot($packet->slot);
|
||||||
}else{
|
}else{
|
||||||
$this->server->getPluginManager()->callEvent($ev = new event\player\PlayerItemHeldEvent($this, $item, $packet->slot, 0));
|
$this->server->getPluginManager()->callEvent($ev = new PlayerItemHeldEvent($this, $item, $packet->slot, 0));
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
$this->sendInventorySlot($packet->slot);
|
$this->sendInventorySlot($packet->slot);
|
||||||
}elseif($item instanceof Item){
|
}elseif($item instanceof Item){
|
||||||
@ -1853,7 +1865,7 @@ class Player extends Human implements CommandSender, IPlayer{
|
|||||||
$this->craftingItems = array();
|
$this->craftingItems = array();
|
||||||
$this->toCraft = array();
|
$this->toCraft = array();
|
||||||
|
|
||||||
$this->server->getPluginManager()->callEvent($ev = new event\player\PlayerRespawnEvent($this, $this->spawnPosition));
|
$this->server->getPluginManager()->callEvent($ev = new PlayerRespawnEvent($this, $this->spawnPosition));
|
||||||
|
|
||||||
$this->teleport($ev->getRespawnPosition());
|
$this->teleport($ev->getRespawnPosition());
|
||||||
//$this->entity->fire = 0;
|
//$this->entity->fire = 0;
|
||||||
@ -1951,14 +1963,14 @@ class Player extends Human implements CommandSender, IPlayer{
|
|||||||
$packet->message = TextFormat::clean($packet->message);
|
$packet->message = TextFormat::clean($packet->message);
|
||||||
if(trim($packet->message) != "" and strlen($packet->message) <= 255){
|
if(trim($packet->message) != "" and strlen($packet->message) <= 255){
|
||||||
$message = $packet->message;
|
$message = $packet->message;
|
||||||
$this->server->getPluginManager()->callEvent($ev = new event\player\PlayerCommandPreprocessEvent($this, $message));
|
$this->server->getPluginManager()->callEvent($ev = new PlayerCommandPreprocessEvent($this, $message));
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(substr($ev->getMessage(), 0, 1) === "/"){ //Command
|
if(substr($ev->getMessage(), 0, 1) === "/"){ //Command
|
||||||
$this->server->dispatchCommand($ev->getPlayer(), substr($ev->getMessage(), 1));
|
$this->server->dispatchCommand($ev->getPlayer(), substr($ev->getMessage(), 1));
|
||||||
}else{
|
}else{
|
||||||
$this->server->getPluginManager()->callEvent($ev = new event\player\PlayerChatEvent($this, $ev->getMessage()));
|
$this->server->getPluginManager()->callEvent($ev = new PlayerChatEvent($this, $ev->getMessage()));
|
||||||
if(!$ev->isCancelled()){
|
if(!$ev->isCancelled()){
|
||||||
$this->server->broadcastMessage(sprintf($ev->getFormat(), $ev->getPlayer()->getDisplayName(), $ev->getMessage()), $ev->getRecipients());
|
$this->server->broadcastMessage(sprintf($ev->getFormat(), $ev->getPlayer()->getDisplayName(), $ev->getMessage()), $ev->getRecipients());
|
||||||
}
|
}
|
||||||
@ -2218,7 +2230,7 @@ class Player extends Human implements CommandSender, IPlayer{
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function kick($reason = ""){
|
public function kick($reason = ""){
|
||||||
$this->server->getPluginManager()->callEvent($ev = new event\player\PlayerKickEvent($this, $reason, "Kicked player " . $this->username . "." . ($reason !== "" ? " With reason: $reason" : "")));
|
$this->server->getPluginManager()->callEvent($ev = new PlayerKickEvent($this, $reason, "Kicked player " . $this->username . "." . ($reason !== "" ? " With reason: $reason" : "")));
|
||||||
if(!$ev->isCancelled()){
|
if(!$ev->isCancelled()){
|
||||||
$this->sendMessage("You have been kicked. " . ($reason !== "" ? " Reason: $reason" : "") . "\n");
|
$this->sendMessage("You have been kicked. " . ($reason !== "" ? " Reason: $reason" : "") . "\n");
|
||||||
$this->close($ev->getQuitMessage(), $reason);
|
$this->close($ev->getQuitMessage(), $reason);
|
||||||
@ -2272,7 +2284,7 @@ class Player extends Human implements CommandSender, IPlayer{
|
|||||||
if($this->connected === true){
|
if($this->connected === true){
|
||||||
unset($this->level->players[$this->CID]);
|
unset($this->level->players[$this->CID]);
|
||||||
if($this->username != ""){
|
if($this->username != ""){
|
||||||
$this->server->getPluginManager()->callEvent($ev = new event\player\PlayerQuitEvent($this, $message));
|
$this->server->getPluginManager()->callEvent($ev = new PlayerQuitEvent($this, $message));
|
||||||
if($this->loggedIn === true){
|
if($this->loggedIn === true){
|
||||||
parent::close();
|
parent::close();
|
||||||
$this->save();
|
$this->save();
|
||||||
@ -2351,7 +2363,7 @@ class Player extends Human implements CommandSender, IPlayer{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->server->getPluginManager()->callEvent($ev = new event\server\DataPacketSendEvent($this, $packet));
|
$this->server->getPluginManager()->callEvent($ev = new DataPacketSendEvent($this, $packet));
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
@ -36,14 +36,10 @@ class PlayerAPI{
|
|||||||
public function init(){
|
public function init(){
|
||||||
$this->server->schedule(20 * 15, array($this, "handle"), 1, true, "server.regeneration");
|
$this->server->schedule(20 * 15, array($this, "handle"), 1, true, "server.regeneration");
|
||||||
$this->server->addHandler("player.death", array($this, "handle"), 1);
|
$this->server->addHandler("player.death", array($this, "handle"), 1);
|
||||||
$this->server->api->console->register("list", "", array($this, "commandHandler"));
|
|
||||||
$this->server->api->console->register("kill", "<player>", array($this, "commandHandler"));
|
$this->server->api->console->register("kill", "<player>", array($this, "commandHandler"));
|
||||||
$this->server->api->console->register("gamemode", "<mode> [player]", array($this, "commandHandler"));
|
|
||||||
$this->server->api->console->register("tp", "[target player] <destination player | w:world> OR /tp [target player] <x> <y> <z>", array($this, "commandHandler"));
|
$this->server->api->console->register("tp", "[target player] <destination player | w:world> OR /tp [target player] <x> <y> <z>", array($this, "commandHandler"));
|
||||||
$this->server->api->console->register("spawnpoint", "[player | w:world] [x] [y] [z]", array($this, "commandHandler"));
|
$this->server->api->console->register("spawnpoint", "[player | w:world] [x] [y] [z]", array($this, "commandHandler"));
|
||||||
$this->server->api->console->register("spawn", "", array($this, "commandHandler"));
|
|
||||||
$this->server->api->console->register("ping", "", array($this, "commandHandler"));
|
|
||||||
$this->server->api->console->alias("lag", "ping");
|
|
||||||
$this->server->api->console->alias("suicide", "kill");
|
$this->server->api->console->alias("suicide", "kill");
|
||||||
$this->server->api->console->alias("tppos", "tp");
|
$this->server->api->console->alias("tppos", "tp");
|
||||||
$this->server->api->ban->cmdWhitelist("list");
|
$this->server->api->ban->cmdWhitelist("list");
|
||||||
|
@ -31,6 +31,7 @@ use pocketmine\command\defaults\GamemodeCommand;
|
|||||||
use pocketmine\command\defaults\GiveCommand;
|
use pocketmine\command\defaults\GiveCommand;
|
||||||
use pocketmine\command\defaults\HelpCommand;
|
use pocketmine\command\defaults\HelpCommand;
|
||||||
use pocketmine\command\defaults\KickCommand;
|
use pocketmine\command\defaults\KickCommand;
|
||||||
|
use pocketmine\command\defaults\KillCommand;
|
||||||
use pocketmine\command\defaults\ListCommand;
|
use pocketmine\command\defaults\ListCommand;
|
||||||
use pocketmine\command\defaults\MeCommand;
|
use pocketmine\command\defaults\MeCommand;
|
||||||
use pocketmine\command\defaults\OpCommand;
|
use pocketmine\command\defaults\OpCommand;
|
||||||
@ -90,6 +91,7 @@ class SimpleCommandMap implements CommandMap{
|
|||||||
$this->register("pocketmine", new SaveCommand("save-all"));
|
$this->register("pocketmine", new SaveCommand("save-all"));
|
||||||
$this->register("pocketmine", new GiveCommand("give"));
|
$this->register("pocketmine", new GiveCommand("give"));
|
||||||
$this->register("pocketmine", new GamemodeCommand("gamemode"));
|
$this->register("pocketmine", new GamemodeCommand("gamemode"));
|
||||||
|
$this->register("pocketmine", new KillCommand("kill"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
60
src/pocketmine/command/defaults/KillCommand.php
Normal file
60
src/pocketmine/command/defaults/KillCommand.php
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?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\command\defaults;
|
||||||
|
|
||||||
|
use pocketmine\command\Command;
|
||||||
|
use pocketmine\command\CommandSender;
|
||||||
|
use pocketmine\Player;
|
||||||
|
use pocketmine\Server;
|
||||||
|
use pocketmine\utils\TextFormat;
|
||||||
|
|
||||||
|
class KillCommand extends VanillaCommand{
|
||||||
|
|
||||||
|
public function __construct($name){
|
||||||
|
parent::__construct(
|
||||||
|
$name,
|
||||||
|
"Commits suicide, only usable as a player",
|
||||||
|
"/kill",
|
||||||
|
["suicide"]
|
||||||
|
);
|
||||||
|
$this->setPermission("pocketmine.command.kill");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function execute(CommandSender $sender, $currentAlias, array $args){
|
||||||
|
if(!$this->testPermission($sender)){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($sender instanceof Player){
|
||||||
|
//TODO: EntityDamageEvent
|
||||||
|
|
||||||
|
//$ev->setLastDamageCause()
|
||||||
|
$sender->setHealth(0);
|
||||||
|
//TODO: set update
|
||||||
|
$sender->sendMessage("Ouch. That look like it hurt.");
|
||||||
|
}else{
|
||||||
|
$sender->sendMessage(TextFormat::RED . "You can only perform this command as a player");
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -92,6 +92,10 @@ abstract class Entity extends Position{
|
|||||||
public $width;
|
public $width;
|
||||||
public $length;
|
public $length;
|
||||||
|
|
||||||
|
/** @var int */
|
||||||
|
private $health = 20;
|
||||||
|
private $maxHealth = 20;
|
||||||
|
|
||||||
public $fallDistance;
|
public $fallDistance;
|
||||||
public $ticksLived;
|
public $ticksLived;
|
||||||
public $lastUpdate;
|
public $lastUpdate;
|
||||||
@ -184,6 +188,44 @@ abstract class Entity extends Position{
|
|||||||
|
|
||||||
abstract function heal($amount, $source = "generic");
|
abstract function heal($amount, $source = "generic");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getHealth(){
|
||||||
|
return $this->health;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the health of the Entity. This won't send any update to the players
|
||||||
|
*
|
||||||
|
* @param int $amount
|
||||||
|
*/
|
||||||
|
public function setHealth($amount){
|
||||||
|
if($amount < 0){
|
||||||
|
$this->health = 0;
|
||||||
|
$this->dead = true;
|
||||||
|
}elseif($amount > $this->getMaxHealth()){
|
||||||
|
$this->health = $this->getMaxHealth();
|
||||||
|
}else{
|
||||||
|
$this->health = (int) $amount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getMaxHealth(){
|
||||||
|
return $this->maxHealth;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $amount
|
||||||
|
*/
|
||||||
|
public function setMaxHealth($amount){
|
||||||
|
$this->maxHealth = (int) $amount;
|
||||||
|
$this->health = (int) min($this->health, $this->maxHealth);
|
||||||
|
}
|
||||||
|
|
||||||
public function onUpdate(){
|
public function onUpdate(){
|
||||||
if($this->closed !== false){
|
if($this->closed !== false){
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user