mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-22 19:06:35 +00:00
Initial working slash commands on 0.16. TODO: new API
This commit is contained in:
parent
b198f287db
commit
018897062c
@ -102,6 +102,7 @@ use pocketmine\nbt\tag\ShortTag;
|
|||||||
use pocketmine\nbt\tag\StringTag;
|
use pocketmine\nbt\tag\StringTag;
|
||||||
use pocketmine\network\protocol\AdventureSettingsPacket;
|
use pocketmine\network\protocol\AdventureSettingsPacket;
|
||||||
use pocketmine\network\protocol\AnimatePacket;
|
use pocketmine\network\protocol\AnimatePacket;
|
||||||
|
use pocketmine\network\protocol\AvailableCommandsPacket;
|
||||||
use pocketmine\network\protocol\BatchPacket;
|
use pocketmine\network\protocol\BatchPacket;
|
||||||
use pocketmine\network\protocol\ChunkRadiusUpdatedPacket;
|
use pocketmine\network\protocol\ChunkRadiusUpdatedPacket;
|
||||||
use pocketmine\network\protocol\ContainerClosePacket;
|
use pocketmine\network\protocol\ContainerClosePacket;
|
||||||
@ -1686,7 +1687,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
$pk->eduMode = 0;
|
$pk->eduMode = 0;
|
||||||
$pk->rainLevel = 0; //TODO: implement these properly
|
$pk->rainLevel = 0; //TODO: implement these properly
|
||||||
$pk->lightningLevel = 0;
|
$pk->lightningLevel = 0;
|
||||||
$pk->commandsEnabled = 0;
|
$pk->commandsEnabled = 1;
|
||||||
$pk->unknown = "UNKNOWN";
|
$pk->unknown = "UNKNOWN";
|
||||||
$pk->worldName = $this->server->getMotd();
|
$pk->worldName = $this->server->getMotd();
|
||||||
$this->dataPacket($pk);
|
$this->dataPacket($pk);
|
||||||
@ -1712,6 +1713,14 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
if($this->isOp()){
|
if($this->isOp()){
|
||||||
$this->setRemoveFormat(false);
|
$this->setRemoveFormat(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$pk = new AvailableCommandsPacket();
|
||||||
|
$data = [];
|
||||||
|
foreach($this->server->getCommandMap()->getCommands() as $command){
|
||||||
|
$data[$command->getName()] = $command->generateJsonData($this);
|
||||||
|
}
|
||||||
|
$pk->commands = json_encode($data);
|
||||||
|
$this->dataPacket($pk);
|
||||||
|
|
||||||
if($this->isCreative()){
|
if($this->isCreative()){
|
||||||
$this->inventory->sendCreativeContents();
|
$this->inventory->sendCreativeContents();
|
||||||
@ -2483,6 +2492,21 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
|
|
||||||
$this->setDataFlag(self::DATA_FLAGS, self::DATA_FLAG_ACTION, false);
|
$this->setDataFlag(self::DATA_FLAGS, self::DATA_FLAG_ACTION, false);
|
||||||
break;
|
break;
|
||||||
|
case ProtocolInfo::COMMAND_STEP_PACKET:
|
||||||
|
if($this->spawned === false or !$this->isAlive()){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$this->craftingType = 0;
|
||||||
|
Timings::$playerCommandTimer->startTiming();
|
||||||
|
$commandText = $packet->command;
|
||||||
|
if($packet->args !== null){
|
||||||
|
foreach($packet->args as $arg){ //command ordering will be an issue
|
||||||
|
$commandText .= " " . $arg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->server->dispatchCommand($this, $commandText);
|
||||||
|
Timings::$playerCommandTimer->stopTiming();
|
||||||
|
break;
|
||||||
case ProtocolInfo::TEXT_PACKET:
|
case ProtocolInfo::TEXT_PACKET:
|
||||||
if($this->spawned === false or !$this->isAlive()){
|
if($this->spawned === false or !$this->isAlive()){
|
||||||
break;
|
break;
|
||||||
|
@ -27,6 +27,7 @@ namespace pocketmine\command;
|
|||||||
use pocketmine\event\TextContainer;
|
use pocketmine\event\TextContainer;
|
||||||
use pocketmine\event\TimingsHandler;
|
use pocketmine\event\TimingsHandler;
|
||||||
use pocketmine\event\TranslationContainer;
|
use pocketmine\event\TranslationContainer;
|
||||||
|
use pocketmine\Player;
|
||||||
use pocketmine\Server;
|
use pocketmine\Server;
|
||||||
use pocketmine\utils\TextFormat;
|
use pocketmine\utils\TextFormat;
|
||||||
|
|
||||||
@ -85,6 +86,25 @@ abstract class Command{
|
|||||||
$this->timings = new TimingsHandler("** Command: " . $name);
|
$this->timings = new TimingsHandler("** Command: " . $name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function generateJsonData(Player $player) : array{
|
||||||
|
/*if(!$this->testPermissionSilent($player)){
|
||||||
|
return [];
|
||||||
|
}*/
|
||||||
|
$data = [
|
||||||
|
"versions" => [
|
||||||
|
[
|
||||||
|
"description" => $this->getDescription(),
|
||||||
|
"overloads" => $this->getOverloadData(),
|
||||||
|
"permission" => "any", //TODO: implement vanilla op API
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
if(count($aliases = $this->getAliases()) > 0){
|
||||||
|
$data["versions"][0]["aliases"] = $aliases;
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param CommandSender $sender
|
* @param CommandSender $sender
|
||||||
* @param string $commandLabel
|
* @param string $commandLabel
|
||||||
@ -101,6 +121,34 @@ abstract class Command{
|
|||||||
return $this->name;
|
return $this->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an array of overload data for generating JSON data for AvailableCommandsPacket
|
||||||
|
* To show custom usages and command parameters, you MUST override this method and define
|
||||||
|
* your own parameters and overloads. Omitting this method will cause the generic default
|
||||||
|
* [args: string] message to be shown.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getOverloadData() : array{
|
||||||
|
$data = [
|
||||||
|
"default" => [
|
||||||
|
"input" => [
|
||||||
|
"parameters" => [
|
||||||
|
0 => [ //Default rawtext parameter for old plugins
|
||||||
|
"name" => "args",
|
||||||
|
"type" => "rawtext",
|
||||||
|
"optional" => true
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"output" => [
|
||||||
|
"format_strings" => []
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
@ -38,8 +38,27 @@ class CommandStepPacket extends DataPacket{
|
|||||||
* https://gist.github.com/dktapps/8285b93af4ca38e0104bfeb9a6c87afd
|
* https://gist.github.com/dktapps/8285b93af4ca38e0104bfeb9a6c87afd
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
public $command;
|
||||||
|
public $overload;
|
||||||
|
public $uvarint1;
|
||||||
|
public $uvarint2;
|
||||||
|
public $bool;
|
||||||
|
public $uvarint64;
|
||||||
|
public $args; //JSON formatted command arguments
|
||||||
|
public $string4;
|
||||||
|
|
||||||
public function decode(){
|
public function decode(){
|
||||||
//TODO
|
$this->command = $this->getString();
|
||||||
|
$this->overload = $this->getString();
|
||||||
|
$this->uvarint1 = $this->getUnsignedVarInt();
|
||||||
|
$this->uvarint2 = $this->getUnsignedVarInt();
|
||||||
|
$this->bool = (bool) $this->getByte();
|
||||||
|
$this->uvarint64 = $this->getUnsignedVarInt(); //TODO: varint64
|
||||||
|
$this->args = json_decode($this->getString());
|
||||||
|
$this->string4 = $this->getString();
|
||||||
|
while(!$this->feof()){
|
||||||
|
$this->getByte(); //prevent assertion errors. TODO: find out why there are always 3 extra bytes at the end of this packet.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function encode(){
|
public function encode(){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user