mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-03 16:45:13 +00:00
Merge branch 'mcpe-0.11'
This commit is contained in:
@ -27,6 +27,7 @@ use pocketmine\command\defaults\BanListCommand;
|
||||
use pocketmine\command\defaults\DefaultGamemodeCommand;
|
||||
use pocketmine\command\defaults\DeopCommand;
|
||||
use pocketmine\command\defaults\DifficultyCommand;
|
||||
use pocketmine\command\defaults\EffectCommand;
|
||||
use pocketmine\command\defaults\GamemodeCommand;
|
||||
use pocketmine\command\defaults\GiveCommand;
|
||||
use pocketmine\command\defaults\HelpCommand;
|
||||
@ -37,6 +38,7 @@ use pocketmine\command\defaults\MeCommand;
|
||||
use pocketmine\command\defaults\OpCommand;
|
||||
use pocketmine\command\defaults\PardonCommand;
|
||||
use pocketmine\command\defaults\PardonIpCommand;
|
||||
use pocketmine\command\defaults\ParticleCommand;
|
||||
use pocketmine\command\defaults\PluginsCommand;
|
||||
use pocketmine\command\defaults\ReloadCommand;
|
||||
use pocketmine\command\defaults\SaveCommand;
|
||||
@ -98,6 +100,8 @@ class SimpleCommandMap implements CommandMap{
|
||||
$this->register("pocketmine", new SaveOffCommand("save-off"));
|
||||
$this->register("pocketmine", new SaveCommand("save-all"));
|
||||
$this->register("pocketmine", new GiveCommand("give"));
|
||||
$this->register("pocketmine", new EffectCommand("effect"));
|
||||
$this->register("pocketmine", new ParticleCommand("particle"));
|
||||
$this->register("pocketmine", new GamemodeCommand("gamemode"));
|
||||
$this->register("pocketmine", new KillCommand("kill"));
|
||||
$this->register("pocketmine", new SpawnpointCommand("spawnpoint"));
|
||||
|
@ -75,7 +75,7 @@ class BanIpCommand extends VanillaCommand{
|
||||
}
|
||||
}
|
||||
|
||||
$sender->getServer()->blockAddress($ip, -1);
|
||||
$sender->getServer()->getNetwork()->blockAddress($ip, -1);
|
||||
|
||||
Command::broadcastCommandMessage($sender, "Banned IP Address " . $ip);
|
||||
}
|
||||
|
113
src/pocketmine/command/defaults/EffectCommand.php
Normal file
113
src/pocketmine/command/defaults/EffectCommand.php
Normal file
@ -0,0 +1,113 @@
|
||||
<?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\entity\Effect;
|
||||
use pocketmine\entity\InstantEffect;
|
||||
use pocketmine\utils\TextFormat;
|
||||
|
||||
class EffectCommand extends VanillaCommand{
|
||||
|
||||
public function __construct($name){
|
||||
parent::__construct(
|
||||
$name,
|
||||
"Adds/Removes effects on players",
|
||||
"/effect <player> <effect|clear> [seconds] [amplifier]"
|
||||
);
|
||||
$this->setPermission("pocketmine.command.effect");
|
||||
}
|
||||
|
||||
public function execute(CommandSender $sender, $currentAlias, array $args){
|
||||
if(!$this->testPermission($sender)){
|
||||
return true;
|
||||
}
|
||||
|
||||
if(count($args) < 2){
|
||||
$sender->sendMessage(TextFormat::RED . "Usage: " . $this->usageMessage);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
$player = $sender->getServer()->getPlayer($args[0]);
|
||||
|
||||
if($player === null){
|
||||
$sender->sendMessage(TextFormat::RED . "Player {$args[0]} not found");
|
||||
return true;
|
||||
}
|
||||
|
||||
if(strtolower($args[1]) === "clear"){
|
||||
foreach($player->getEffects() as $effect){
|
||||
$player->removeEffect($effect->getId());
|
||||
}
|
||||
|
||||
$sender->sendMessage("Took all effects from " . $player->getDisplayName());
|
||||
return true;
|
||||
}
|
||||
|
||||
$effect = Effect::getEffectByName($args[1]);
|
||||
|
||||
if($effect === null){
|
||||
$effect = Effect::getEffect((int) $args[1]);
|
||||
}
|
||||
|
||||
if($effect === null){
|
||||
$sender->sendMessage(TextFormat::RED . "Effect {$args[1]} not found");
|
||||
return true;
|
||||
}
|
||||
|
||||
$duration = 300;
|
||||
$amplification = 0;
|
||||
|
||||
if(count($args) >= 3){
|
||||
$duration = (int) $args[2];
|
||||
if(!($effect instanceof InstantEffect)){
|
||||
$duration *= 20;
|
||||
}
|
||||
}elseif($effect instanceof InstantEffect){
|
||||
$duration = 1;
|
||||
}
|
||||
|
||||
if(count($args) >= 4){
|
||||
$amplification = (int) $args[3];
|
||||
}
|
||||
|
||||
if($duration === 0){
|
||||
if(!$player->hasEffect($effect->getId())){
|
||||
$sender->sendMessage("Couldn't take ". $effect->getName() ." from ". $player->getDisplayName());
|
||||
return true;
|
||||
}
|
||||
|
||||
$player->removeEffect($effect->getId());
|
||||
$sender->sendMessage("Took ". $effect->getName() ." from ". $player->getDisplayName());
|
||||
}else{
|
||||
$effect->setDuration($duration)->setAmplifier($amplification);
|
||||
|
||||
$player->addEffect($effect);
|
||||
self::broadcastCommandMessage($sender, "Given ". $effect->getName() ." (ID ". $effect->getId().") * ". $effect->getAmplifier()." to ". $player->getDisplayName() ." for ". ($effect->getDuration() / 20) ." seconds");
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -46,7 +46,7 @@ class GiveCommand extends VanillaCommand{
|
||||
if(count($args) < 2){
|
||||
$sender->sendMessage(TextFormat::RED . "Usage: " . $this->usageMessage);
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
$player = $sender->getServer()->getPlayer($args[0]);
|
||||
|
191
src/pocketmine/command/defaults/ParticleCommand.php
Normal file
191
src/pocketmine/command/defaults/ParticleCommand.php
Normal file
@ -0,0 +1,191 @@
|
||||
<?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\block\Block;
|
||||
use pocketmine\command\CommandSender;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\level\particle\BubbleParticle;
|
||||
use pocketmine\level\particle\CriticalParticle;
|
||||
use pocketmine\level\particle\DustParticle;
|
||||
use pocketmine\level\particle\EnchantParticle;
|
||||
use pocketmine\level\particle\ExplodeParticle;
|
||||
use pocketmine\level\particle\FlameParticle;
|
||||
use pocketmine\level\particle\HeartParticle;
|
||||
use pocketmine\level\particle\InkParticle;
|
||||
use pocketmine\level\particle\ItemBreakParticle;
|
||||
use pocketmine\level\particle\LavaDripParticle;
|
||||
use pocketmine\level\particle\LavaParticle;
|
||||
use pocketmine\level\particle\Particle;
|
||||
use pocketmine\level\particle\PortalParticle;
|
||||
use pocketmine\level\particle\RedstoneParticle;
|
||||
use pocketmine\level\particle\SmokeParticle;
|
||||
use pocketmine\level\particle\SplashParticle;
|
||||
use pocketmine\level\particle\SporeParticle;
|
||||
use pocketmine\level\particle\TerrainParticle;
|
||||
use pocketmine\level\particle\WaterDripParticle;
|
||||
use pocketmine\level\particle\WaterParticle;
|
||||
use pocketmine\math\Vector3;
|
||||
use pocketmine\Player;
|
||||
use pocketmine\utils\Random;
|
||||
use pocketmine\utils\TextFormat;
|
||||
|
||||
class ParticleCommand extends VanillaCommand{
|
||||
|
||||
public function __construct($name){
|
||||
parent::__construct(
|
||||
$name,
|
||||
"Adds particles to a world",
|
||||
"/particle <name> <x> <y> <z> <xd> <yd> <zd> [count] [data]"
|
||||
);
|
||||
$this->setPermission("pocketmine.command.particle");
|
||||
}
|
||||
|
||||
public function execute(CommandSender $sender, $currentAlias, array $args){
|
||||
if(!$this->testPermission($sender)){
|
||||
return true;
|
||||
}
|
||||
|
||||
if(count($args) < 7){
|
||||
$sender->sendMessage(TextFormat::RED . "Usage: " . $this->usageMessage);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if($sender instanceof Player){
|
||||
$level = $sender->getLevel();
|
||||
}else{
|
||||
$level = $sender->getServer()->getDefaultLevel();
|
||||
}
|
||||
|
||||
$name = strtolower($args[0]);
|
||||
|
||||
$pos = new Vector3((float) $args[1], (float) $args[2], (float) $args[3]);
|
||||
|
||||
$xd = (float) $args[4];
|
||||
$yd = (float) $args[5];
|
||||
$zd = (float) $args[6];
|
||||
|
||||
$count = isset($args[7]) ? max(1, (int) $args[7]) : 1;
|
||||
|
||||
$data = isset($args[8]) ? (int) $args[8] : null;
|
||||
|
||||
$particle = $this->getParticle($name, $pos, $xd, $yd, $zd, $data);
|
||||
|
||||
if($particle === null){
|
||||
$sender->sendMessage(TextFormat::RED . "Unknown particle name (" . $name . ")");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
$sender->sendMessage("Playing particle ". $name ." for ". $count ." times");
|
||||
|
||||
$random = new Random((int) (microtime(true) * 1000) + mt_rand());
|
||||
|
||||
for($i = 0; $i < $count; ++$i){
|
||||
$particle->setComponents(
|
||||
$pos->x + $random->nextSignedFloat() * $xd,
|
||||
$pos->y + $random->nextSignedFloat() * $yd,
|
||||
$pos->z + $random->nextSignedFloat() * $zd
|
||||
);
|
||||
$level->addParticle($particle);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $name
|
||||
*
|
||||
* @return Particle
|
||||
*/
|
||||
private function getParticle($name, Vector3 $pos, $xd, $yd, $zd, $data){
|
||||
switch($name){
|
||||
case "explode":
|
||||
return new ExplodeParticle($pos);
|
||||
case "bubble":
|
||||
return new BubbleParticle($pos);
|
||||
case "splash":
|
||||
return new SplashParticle($pos);
|
||||
case "wake":
|
||||
case "water":
|
||||
return new WaterParticle($pos);
|
||||
case "crit":
|
||||
return new CriticalParticle($pos);
|
||||
case "smoke":
|
||||
return new SmokeParticle($pos, $data !== null ? $data : 0);
|
||||
case "spell":
|
||||
return new EnchantParticle($pos);
|
||||
case "dripwater":
|
||||
return new WaterDripParticle($pos);
|
||||
case "driplava":
|
||||
return new LavaDripParticle($pos);
|
||||
case "townaura":
|
||||
case "spore":
|
||||
return new SporeParticle($pos);
|
||||
case "portal":
|
||||
return new PortalParticle($pos);
|
||||
case "flame":
|
||||
return new FlameParticle($pos);
|
||||
case "lava":
|
||||
return new LavaParticle($pos);
|
||||
case "reddust":
|
||||
return new RedstoneParticle($pos, $data !== null ? $data : 1);
|
||||
case "snowballpoof":
|
||||
return new ItemBreakParticle($pos, Item::get(Item::SNOWBALL));
|
||||
case "itembreak":
|
||||
if($data !== null and $data !== 0){
|
||||
return new ItemBreakParticle($pos, $data);
|
||||
}
|
||||
break;
|
||||
case "terrain":
|
||||
if($data !== null and $data !== 0){
|
||||
return new TerrainParticle($pos, $data);
|
||||
}
|
||||
break;
|
||||
case "heart":
|
||||
return new HeartParticle($pos, $data !== null ? $data : 0);
|
||||
case "ink":
|
||||
return new InkParticle($pos, $data !== null ? $data : 0);
|
||||
|
||||
}
|
||||
|
||||
if(substr($name, 0, 10) === "iconcrack_"){
|
||||
$d = explode("_", $name);
|
||||
if(count($d) === 3){
|
||||
return new ItemBreakParticle($pos, Item::get((int) $d[1], (int) $d[2]));
|
||||
}
|
||||
}elseif(substr($name, 0, 11) === "blockcrack_"){
|
||||
$d = explode("_", $name);
|
||||
if(count($d) === 2){
|
||||
return new TerrainParticle($pos, Block::get($d[1] & 0xff, $d[1] >> 12));
|
||||
}
|
||||
}elseif(substr($name, 0, 10) === "blockdust_"){
|
||||
$d = explode("_", $name);
|
||||
if(count($d) >= 4){
|
||||
return new DustParticle($pos, $d[1] & 0xff, $d[2] & 0xff, $d[3] & 0xff, isset($d[4]) ? $d[4] & 0xff : 255);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
@ -44,10 +44,10 @@ class StatusCommand extends VanillaCommand{
|
||||
$sender->sendMessage(TextFormat::GREEN . "---- " . TextFormat::WHITE . "Server status" . TextFormat::GREEN . " ----");
|
||||
$sender->sendMessage(TextFormat::GOLD . "TPS: " . TextFormat::WHITE . $server->getTicksPerSecond());
|
||||
$sender->sendMessage(TextFormat::GOLD . "TPS Load: " . TextFormat::WHITE . $server->getTickUsage() . "%");
|
||||
//TODO: implement network speed
|
||||
//$sender->sendMessage(TextFormat::GOLD . "Upload: " . TextFormat::WHITE . round($server->getNetwork()->getUploadSpeed() / 1024, 2) . " kB/s");
|
||||
//$sender->sendMessage(TextFormat::GOLD . "Download: " . TextFormat::WHITE . round($server->getNetwork()->getDownloadSpeed() / 1024, 2) . " kB/s");
|
||||
$sender->sendMessage(TextFormat::GOLD . "Memory: " . TextFormat::WHITE . round((memory_get_usage() / 1024) / 1024, 2) . TextFormat::YELLOW . "/" . TextFormat::WHITE . round((memory_get_usage(true) / 1024) / 1024, 2) . " MB");
|
||||
$sender->sendMessage(TextFormat::GOLD . "Upload: " . TextFormat::WHITE . round($server->getNetwork()->getUploadUsage() / 1024, 2) . " kB/s");
|
||||
$sender->sendMessage(TextFormat::GOLD . "Download: " . TextFormat::WHITE . round($server->getNetwork()->getDownloadUsage() / 1024, 2) . " kB/s");
|
||||
$sender->sendMessage(TextFormat::GOLD . "Memory: " . TextFormat::WHITE . round(($server->getMemoryUsage() / 1024) / 1024, 2) . " MB");
|
||||
$sender->sendMessage(TextFormat::GOLD . "Threads: " . TextFormat::WHITE . $server->getThreadCount());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user