GenisysPro  for Minecraft PE/Windows 10 v1.1.x
Feature-rich server software for Minecraft PE and Windows 10 Edition
TimingsCommand Class Reference

Public Member Functions

 __construct ($name)
 
 execute (CommandSender $sender, $currentAlias, array $args)
 
- Public Member Functions inherited from VanillaCommand
 __construct ($name, $description="", $usageMessage=null, array $aliases=[])
 
- Public Member Functions inherited from Command
 __construct ($name, $description="", $usageMessage=null, array $aliases=[])
 
 getDefaultCommandData ()
 
 generateCustomCommandData (Player $player)
 
 getOverloads ()
 
 execute (CommandSender $sender, $commandLabel, array $args)
 
 getName ()
 
 getPermission ()
 
 setPermission ($permission)
 
 testPermission (CommandSender $target)
 
 testPermissionSilent (CommandSender $target)
 
 getLabel ()
 
 setLabel ($name)
 
 register (CommandMap $commandMap)
 
 unregister (CommandMap $commandMap)
 
 isRegistered ()
 
 getAliases ()
 
 getPermissionMessage ()
 
 getDescription ()
 
 getUsage ()
 
 setAliases (array $aliases)
 
 setDescription ($description)
 
 setPermissionMessage ($permissionMessage)
 
 setUsage ($usage)
 
 __toString ()
 

Static Public Attributes

static $timingStart = 0
 

Additional Inherited Members

- Static Public Member Functions inherited from Command
static generateDefaultData ()
 
static broadcastCommandMessage (CommandSender $source, $message, $sendToSource=true)
 
- Data Fields inherited from VanillaCommand
const MAX_COORD = 30000000
 
const MIN_COORD = -30000000
 
- Data Fields inherited from Command
 $timings
 
- Protected Member Functions inherited from VanillaCommand
 getInteger (CommandSender $sender, $value, $min=self::MIN_COORD, $max=self::MAX_COORD)
 
 getRelativeDouble ($original, CommandSender $sender, $input, $min=self::MIN_COORD, $max=self::MAX_COORD)
 
 getDouble (CommandSender $sender, $value, $min=self::MIN_COORD, $max=self::MAX_COORD)
 
- Protected Attributes inherited from Command
 $commandData = null
 
 $description = ""
 
 $usageMessage
 

Constructor & Destructor Documentation

◆ __construct()

__construct (   $name)

TimingsCommand constructor.

Parameters
$name
38  {
39  parent::__construct(
40  $name,
41  "%pocketmine.command.timings.description",
42  "%pocketmine.command.timings.usage"
43  );
44  $this->setPermission("pocketmine.command.timings");
45  }

Member Function Documentation

◆ execute()

execute ( CommandSender  $sender,
  $currentAlias,
array  $args 
)
Parameters
CommandSender$sender
string$currentAlias
array$args
Returns
bool
54  {
55  if(!$this->testPermission($sender)){
56  return true;
57  }
58 
59  if(count($args) !== 1){
60  $sender->sendMessage(new TranslationContainer("commands.generic.usage", [$this->usageMessage]));
61 
62  return true;
63  }
64 
65  $mode = strtolower($args[0]);
66 
67  if($mode === "on"){
68  $sender->getServer()->getPluginManager()->setUseTimings(true);
70  $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.enable"));
71 
72  return true;
73  }elseif($mode === "off"){
74  $sender->getServer()->getPluginManager()->setUseTimings(false);
75  $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.disable"));
76  return true;
77  }
78 
79  if(!$sender->getServer()->getPluginManager()->useTimings()){
80  $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsDisabled"));
81 
82  return true;
83  }
84 
85  $paste = $mode === "paste";
86 
87  if($mode === "reset"){
89  $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.reset"));
90  }elseif($mode === "merged" or $mode === "report" or $paste){
91 
92  $sampleTime = microtime(true) - self::$timingStart;
93  $index = 0;
94  $timingFolder = $sender->getServer()->getDataPath() . "timings/";
95 
96  if(!file_exists($timingFolder)){
97  mkdir($timingFolder, 0777);
98  }
99  $timings = $timingFolder . "timings.txt";
100  while(file_exists($timings)){
101  $timings = $timingFolder . "timings" . (++$index) . ".txt";
102  }
103 
104  $fileTimings = $paste ? fopen("php://temp", "r+b") : fopen($timings, "a+b");
105 
106  TimingsHandler::printTimings($fileTimings);
107 
108  fwrite($fileTimings, "Sample time " . round($sampleTime * 1000000000) . " (" . $sampleTime . "s)" . PHP_EOL);
109 
110  if($paste){
111  fseek($fileTimings, 0);
112  $data = [
113  "syntax" => "text",
114  "poster" => $sender->getServer()->getName(),
115  "content" => stream_get_contents($fileTimings)
116  ];
117 
118  $ch = curl_init("http://paste.ubuntu.com/");
119  curl_setopt($ch, CURLOPT_POST, 1);
120  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
121  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
122  curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
123  curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
124  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
125  curl_setopt($ch, CURLOPT_AUTOREFERER, false);
126  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
127  curl_setopt($ch, CURLOPT_HEADER, true);
128  curl_setopt($ch, CURLOPT_HTTPHEADER, ["User-Agent: " . $this->getName() . " " . $sender->getServer()->getPocketMineVersion()]);
129  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
130  $data = curl_exec($ch);
131  curl_close($ch);
132  if(preg_match('#^Location: http://paste\\.ubuntu\\.com/([0-9]{1,})/#m', $data, $matches) == 0){
133  $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.pasteError"));
134 
135  return true;
136  }
137 
138 
139  $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsUpload", ["http://paste.ubuntu.com/" . $matches[1] . "/"]));
140  $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsRead", ["http://" . $sender->getServer()->getProperty("timings.host", "timings.pmmp.io") . "/?url=" . $matches[1]]));
141  fclose($fileTimings);
142  }else{
143  fclose($fileTimings);
144  $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsWrite", [$timings]));
145  }
146  }
147 
148  return true;
149  }

Field Documentation

◆ $timingStart

$timingStart = 0
static

The documentation for this class was generated from the following file: