1111use pocketmine \command \CommandSender ;
1212use NhanAZ \QueryServer \libs \libpmquery \PMQuery ;
1313use NhanAZ \QueryServer \libs \libpmquery \PmQueryException ;
14+ use pocketmine \console \ConsoleCommandSender ;
15+ use pocketmine \Server ;
1416
1517class Main extends PluginBase implements Listener {
1618
1719 public array $ players = [];
1820
19- public function qrs ($ sender , $ query ) {
20- $ sender ->sendMessage ("§e>§f GameName:§a " . (($ query ["GameName " ] == null ) ? "§cNull! " : $ query ["GameName " ]));
21- $ sender ->sendMessage ("§e>§f HostName:§r " . (($ query ["HostName " ] == null ) ? "§cNull! " : $ query ["HostName " ]));
22- $ sender ->sendMessage ("§e>§f Protocol:§a " . (($ query ["Protocol " ] == null ) ? "§cNull! " : $ query ["Protocol " ]));
23- $ sender ->sendMessage ("§e>§f Version:§a " . (($ query ["Version " ] == null ) ? "§cNull! " : $ query ["Version " ]));
24- $ sender ->sendMessage ("§e>§f Players:§a " . (($ query ["Players " ] == null ) ? "§cNull! " : $ query ["Players " ]));
25- $ sender ->sendMessage ("§e>§f MaxPlayers:§a " . (($ query ["MaxPlayers " ] == null ) ? "§cNull! " : $ query ["MaxPlayers " ]));
26- $ sender ->sendMessage ("§e>§f ServerId:§a " . (($ query ["ServerId " ] == null ) ? "§cNull! " : $ query ["ServerId " ]));
27- $ sender ->sendMessage ("§e>§f Map:§a " . (($ query ["Map " ] == null ) ? "§cNull! " : $ query ["Map " ]));
28- $ sender ->sendMessage ("§e>§f GameMode:§a " . (($ query ["GameMode " ] == null ) ? "§cNull! " : $ query ["GameMode " ]));
29- $ sender ->sendMessage ("§e>§f NintendoLimited:§a " . (($ query ["NintendoLimited " ] == null ) ? "§cNull! " : $ query ["NintendoLimited " ]));
30- $ sender ->sendMessage ("§e>§f IPv4Port:§a " . (($ query ["IPv4Port " ] == null ) ? "§cNull! " : $ query ["IPv4Port " ]));
31- $ sender ->sendMessage ("§e>§f IPv6Port:§a " . (($ query ["IPv6Port " ] == null ) ? "§cNull! " : $ query ["IPv6Port " ]));
32- $ sender ->sendMessage ("§e>§f Extra:§a " . (($ query ["Extra " ] == null ) ? "§cNull! " : $ query ["Extra " ]));
33- }
21+ public static function qrs ($ sender , $ query ): void {
22+ $ keys = [
23+ "GameName " => "§e>§f GameName:§a " ,
24+ "HostName " => "§e>§f HostName:§r " ,
25+ "Protocol " => "§e>§f Protocol:§a " ,
26+ "Version " => "§e>§f Version:§a " ,
27+ "Players " => "§e>§f Players:§a " ,
28+ "MaxPlayers " => "§e>§f MaxPlayers:§a " ,
29+ "ServerId " => "§e>§f ServerId:§a " ,
30+ "Map " => "§e>§f Map:§a " ,
31+ "GameMode " => "§e>§f GameMode:§a " ,
32+ "NintendoLimited " => "§e>§f NintendoLimited:§a " ,
33+ "IPv4Port " => "§e>§f IPv4Port:§a " ,
34+ "IPv6Port " => "§e>§f IPv6Port:§a " ,
35+ "Extra " => "§e>§f Extra:§a "
36+ ];
37+
38+ foreach ($ keys as $ key => $ message ) {
39+ $ value = $ query [$ key ];
40+ $ output = ($ value == null ) ? "§cNull! " : $ value ;
41+ $ sender ->sendMessage ($ message . $ output );
42+ }
43+ }
44+
45+ public static function logInfo ($ status ): void {
46+ $ sender = new ConsoleCommandSender (Server::getInstance (), Server::getInstance ()->getLanguage ());
47+ $ serverInfo = $ status ->ip . ": " . $ status ->port ;
48+ if ($ status ->online ) {
49+ $ sender ->sendMessage ("§e>§f Domain:§a " . str_replace (": " , "§f:§a " , $ serverInfo ));
50+
51+ $ fields = [
52+ "ip " => "IP/Port " ,
53+ "debug->ping " => "Ping " ,
54+ "debug->query " => "Query " ,
55+ "debug->srv " => "SRV " ,
56+ "debug->querymismatch " => "QueryMisMatch " ,
57+ "debug->ipinsrv " => "IPInSRV " ,
58+ "debug->cnameinsrv " => "CNameInSRV " ,
59+ "debug->animatedmotd " => "AnimatedMotd " ,
60+ "debug->cachetime " => "CacheTime " ,
61+ "motd->clean " => "Motd " ,
62+ "players->online " => "Online " ,
63+ "players->max " => "Max " ,
64+ "players->list " => "Players " ,
65+ "players->uuid " => "UUIDS " ,
66+ "version " => "Version " ,
67+ "protocol " => "Protocol " ,
68+ "hostname " => "HostName " ,
69+ "icon " => "Icon " ,
70+ "software " => "SoftWare " ,
71+ "map " => "Map " ,
72+ "plugins->raw " => "Plugins " ,
73+ "mods->raw " => "Mods " ,
74+ "info->clean " => "Info "
75+ ];
76+
77+ foreach ($ fields as $ field => $ label ) {
78+ try {
79+ $ value = $ status ;
80+ foreach (explode ("-> " , $ field ) as $ key ) {
81+ $ value = $ value ->$ key ;
82+ }
83+ $ output = ($ value == null ) ? "§cError or has blocked queries! " : $ value ;
84+ if (is_array ($ output )) {
85+ $ output = implode ("§f,§a " , $ output );
86+ }
87+ $ sender ->sendMessage ("§e>§f $ label:§a " . $ output );
88+ } catch (\Exception $ e ) {
89+ $ sender ->sendMessage ("§e>§f $ label:§c Error or has blocked queries! " );
90+ }
91+ }
92+
93+ if (strrchr ($ serverInfo , ": " )) {
94+ $ sender ->sendMessage ("§e>§f Below is the fallback query method: " );
95+
96+ try {
97+ $ IP_Or_Domain_And_Port = explode (": " , $ serverInfo );
98+ $ IP_Or_Domain = $ IP_Or_Domain_And_Port [0 ];
99+ $ Port = $ IP_Or_Domain_And_Port [1 ];
100+ $ query = PMQuery::query ($ IP_Or_Domain , (int )$ Port );
101+ Main::qrs ($ sender , $ query );
102+ } catch (PmQueryException $ e ) {
103+ $ sender ->sendMessage ("§e>§c The server is offline or has blocked queries! " );
104+ $ sender ->sendMessage ("§e>§f Possible error:§c Your IP does not open the port or the device does not match! " );
105+ }
106+ }
107+ } else {
108+ $ sender ->sendMessage ("§e>§c The server is offline or has blocked queries! " );
109+ $ sender ->sendMessage ("§e>§c Try another query method using §b/querys " );
110+ }
111+ }
34112
35113 public function onCommand (CommandSender $ sender , Command $ cmd , string $ label , array $ args ): bool {
36114 if ($ cmd ->getName () == "query " ) {
@@ -40,164 +118,8 @@ public function onCommand(CommandSender $sender, Command $cmd, string $label, ar
40118 return true ;
41119 }
42120 if (!$ sender instanceof Player) {
43- try {
44- $ status = json_decode (file_get_contents ("https://api.mcsrvstat.us/2/ " . $ args [0 ]));
45- } catch (\Exception $ e ) {
46- $ sender ->sendMessage ("§e>§f Error:§c Your IP does not open the port or the device does not match! " );
47- $ sender ->sendMessage ("§e>§c Try another query method using §b/querys " );
48- return true ;
49- }
50- if ($ status ->online == true ) {
51- $ sender ->sendMessage ("§e>§f Domain:§a " . str_replace (": " , "§f:§a " , $ args [0 ]));
52- try {
53- $ sender ->sendMessage ("§e>§f IP/Port:§a " . $ status ->ip . "§f:§a " . $ status ->port );
54- } catch (\Exception $ e ) {
55- $ sender ->sendMessage ("§e>§f IP/Port:§c Error or has blocked queries! " );
56- }
57- try {
58- $ sender ->sendMessage ("§e>§f Ping:§a " . ($ status ->debug ->ping ? "true " : "§cfalse " ));
59- } catch (\Exception $ e ) {
60- $ sender ->sendMessage ("§e>§f Ping:§c Error or has blocked queries! " );
61- }
62- try {
63- $ sender ->sendMessage ("§e>§f Query:§a " . ($ status ->debug ->query ? "true " : "§cfalse " ));
64- } catch (\Exception $ e ) {
65- $ sender ->sendMessage ("§e>§f Query:§c Error or has blocked queries! " );
66- }
67- try {
68- $ sender ->sendMessage ("§e>§f SRV:§a " . ($ status ->debug ->srv ? "true " : "§cfalse " ));
69- } catch (\Exception $ e ) {
70- $ sender ->sendMessage ("§e>§f SRV:§c Error or has blocked queries! " );
71- }
72- try {
73- $ sender ->sendMessage ("§e>§f QueryMisMatch:§a " . ($ status ->debug ->querymismatch ? "true " : "§cfalse " ));
74- } catch (\Exception $ e ) {
75- $ sender ->sendMessage ("§e>§f QueryMisMatch:§c Error or has blocked queries! " );
76- }
77- try {
78- $ sender ->sendMessage ("§e>§f IPInSRV:§a " . ($ status ->debug ->ipinsrv ? "true " : "§cfalse " ));
79- } catch (\Exception $ e ) {
80- $ sender ->sendMessage ("§e>§f IPInSRV:§c Error or has blocked queries! " );
81- }
82- try {
83- $ sender ->sendMessage ("§e>§f CNameInSRV:§a " . ($ status ->debug ->cnameinsrv ? "true " : "§cfalse " ));
84- } catch (\Exception $ e ) {
85- $ sender ->sendMessage ("§e>§f CNameInSRV:§c Error or has blocked queries! " );
86- }
87- try {
88- $ sender ->sendMessage ("§e>§f AnimatedMotd:§a " . ($ status ->debug ->animatedmotd ? "true " : "§cfalse " ));
89- } catch (\Exception $ e ) {
90- $ sender ->sendMessage ("§e>§f AnimatedMotd:§c Error or has blocked queries! " );
91- }
92- try {
93- $ sender ->sendMessage ("§e>§f CacheTime:§a " . $ status ->debug ->cachetime );
94- } catch (\Exception $ e ) {
95- $ sender ->sendMessage ("§e>§f CacheTime:§c Error or has blocked queries! " );
96- }
97- try {
98- foreach ($ status ->motd ->clean as $ clean ) {
99- $ sender ->sendMessage ("§e>§f Motd:§r " . $ clean );
100- }
101- } catch (\Exception $ e ) {
102- $ sender ->sendMessage ("§e>§f Motd:§c Error or has blocked queries! " );
103- }
104- try {
105- $ sender ->sendMessage ("§e>§f Online/Max:§a " . $ status ->players ->online . "§f/§a " . $ status ->players ->max );
106- } catch (\Exception $ e ) {
107- $ sender ->sendMessage ("§e>§f Online/Max:§c Error or has blocked queries! " );
108- }
109- try {
110- $ list = "§e>§f Players ( " . count ($ players ->list ) . "): §a " ;
111- foreach ($ players ->list as $ lists ) {
112- $ list .= $ lists . "§f,§a " ;
113- }
114- $ sender ->sendMessage ($ list );
115- } catch (\Exception $ e ) {
116- $ sender ->sendMessage ("§e>§f Players:§c Error or has blocked queries! " );
117- }
118- try {
119- $ uuid = "§e>§f UUIDS ( " . count ($ players ->uuid ) . "): §a " ;
120- foreach ($ players ->uuid as $ uuids ) {
121- $ uuid .= $ uuids . "§f,§a " ;
122- }
123- $ sender ->sendMessage ($ uuid );
124- } catch (\Exception $ e ) {
125- $ sender ->sendMessage ("§e>§f UUIDS:§c Error or has blocked queries! " );
126- }
127- try {
128- $ sender ->sendMessage ("§e>§f Version:§a " . (($ status ->version == null ) ? "§cNull! " : $ status ->version ));
129- } catch (\Exception $ e ) {
130- $ sender ->sendMessage ("§e>§f Version:§c Error or has blocked queries! " );
131- }
132- try {
133- $ sender ->sendMessage ("§e>§f protocol:§a " . $ status ->protocol );
134- } catch (\Exception $ e ) {
135- $ sender ->sendMessage ("§e>§f Protocol:§c Error or has blocked queries! " );
136- }
137- try {
138- $ sender ->sendMessage ("§e>§f HostName:§a " . $ status ->hostname );
139- } catch (\Exception $ e ) {
140- $ sender ->sendMessage ("§e>§f HostName:§c Error or has blocked queries! " );
141- }
142- try {
143- $ sender ->sendMessage ("§e>§f Icon:§a " . $ status ->icon );
144- } catch (\Exception $ e ) {
145- $ sender ->sendMessage ("§e>§f Icon:§c Error or has blocked queries! " );
146- }
147- try {
148- $ sender ->sendMessage ("§e>§f SoftWare:§a " . $ status ->software );
149- } catch (\Exception $ e ) {
150- $ sender ->sendMessage ("§e>§f SoftWare:§c Error or has blocked queries! " );
151- }
152- try {
153- $ sender ->sendMessage ("§e>§f Map:§a " . $ status ->map );
154- } catch (\Exception $ e ) {
155- $ sender ->sendMessage ("§e>§f Map:§c Error or has blocked queries! " );
156- }
157- try {
158- $ plugin = "§e>§f Plugins ( " . count ($ status ->plugins ->raw ) . "): §a " ;
159- foreach ($ status ->plugins ->raw as $ raw ) {
160- $ plugin .= str_replace (" " , " v " , $ raw ) . "§f,§a " ;
161- }
162- $ sender ->sendMessage ($ plugin );
163- } catch (\Exception $ e ) {
164- $ sender ->sendMessage ("§e>§f Plugins:§c Error or has blocked queries! " );
165- }
166- try {
167- $ mod = "§e>§f Mods ( " . count ($ status ->mods ->raw ) . "): §a " ;
168- foreach ($ status ->mods ->raw as $ raw ) {
169- $ mod .= $ raw . "§f,§a " ;
170- }
171- $ sender ->sendMessage ($ mod );
172- } catch (\Exception $ e ) {
173- $ sender ->sendMessage ("§e>§f Mods:§c Error or has blocked queries! " );
174- }
175- try {
176- $ info = "§e>§f Info ( " . count ($ status ->info ->clean ) . "): §a " ;
177- foreach ($ status ->info ->clean as $ clean ) {
178- $ info .= $ clean . "§f,§a " ;
179- }
180- $ sender ->sendMessage ($ info );
181- } catch (\Exception $ e ) {
182- $ sender ->sendMessage ("§e>§f Info:§c Error or has blocked queries! " );
183- }
184- if (strrchr ($ args [0 ], ": " ) == true ) {
185- $ sender ->sendMessage ("§e>§f Below is the fallback query method: " );
186- try {
187- $ IP_Or_Domain_And_Port = explode (": " , $ args [0 ]);
188- $ IP_Or_Domain = $ IP_Or_Domain_And_Port [0 ];
189- $ Port = $ IP_Or_Domain_And_Port [1 ];
190- $ query = PMQuery::query ($ IP_Or_Domain , (int )$ Port );
191- $ this ->qrs ($ sender , $ query );
192- } catch (PmQueryException $ e ) {
193- $ sender ->sendMessage ("§e>§c The server is offline or has blocked queries! " );
194- $ sender ->sendMessage ("§e>§f Possible error:§c Your IP does not open the port or the device does not match! " );
195- }
196- }
197- } else {
198- $ sender ->sendMessage ("§e>§c The server is offline or has blocked queries! " );
199- $ sender ->sendMessage ("§e>§c Try another query method using §b/querys " );
200- }
121+ $ this ->getServer ()->getAsyncPool ()->submitTask (new QueryTask ($ args [0 ]));
122+
201123 } else {
202124 $ sender ->sendMessage ("§e>§c Please use the command on the console! " );
203125 }
@@ -222,7 +144,7 @@ public function onCommand(CommandSender $sender, Command $cmd, string $label, ar
222144 }
223145 try {
224146 $ query = PMQuery::query ($ args [0 ], (int )$ args [1 ]);
225- $ this -> qrs ($ sender , $ query );
147+ Main:: qrs ($ sender , $ query );
226148 } catch (PmQueryException $ e ) {
227149 $ sender ->sendMessage ("§e>§c The server is offline or has blocked queries! " );
228150 $ sender ->sendMessage ("§e>§f Possible error:§c Your IP does not open the port or the device does not match! " );
0 commit comments