@@ -414,16 +414,17 @@ OnlinePlayer* ServerSideNetworkHandler::getPlayerByGUID(const RakNet::RakNetGUID
414414
415415void ServerSideNetworkHandler::setupCommands ()
416416{
417- m_commands[" ?" ] = &ServerSideNetworkHandler::commandHelp;
418- m_commands[" help" ] = &ServerSideNetworkHandler::commandHelp;
419- m_commands[" stats" ] = &ServerSideNetworkHandler::commandStats;
420- m_commands[" time" ] = &ServerSideNetworkHandler::commandTime;
421- m_commands[" seed" ] = &ServerSideNetworkHandler::commandSeed;
422- m_commands[" tp" ] = &ServerSideNetworkHandler::commandTP;
423- m_commands[" summon" ] = &ServerSideNetworkHandler::commandSummon;
417+ m_commands[" ?" ] = &ServerSideNetworkHandler::commandHelp;
418+ m_commands[" help" ] = &ServerSideNetworkHandler::commandHelp;
419+ m_commands[" stats" ] = &ServerSideNetworkHandler::commandStats;
420+ m_commands[" time" ] = &ServerSideNetworkHandler::commandTime;
421+ m_commands[" seed" ] = &ServerSideNetworkHandler::commandSeed;
422+ m_commands[" tp" ] = &ServerSideNetworkHandler::commandTP;
423+ m_commands[" summon" ] = &ServerSideNetworkHandler::commandSummon;
424+ m_commands[" gamemode" ] = &ServerSideNetworkHandler::commandGamemode;
424425}
425426
426- bool ServerSideNetworkHandler::checkPermissions (OnlinePlayer* player)
427+ bool ServerSideNetworkHandler::_checkPermissions (OnlinePlayer* player)
427428{
428429 if (player->m_pPlayer != m_pMinecraft->m_pLocalPlayer )
429430 {
@@ -434,6 +435,22 @@ bool ServerSideNetworkHandler::checkPermissions(OnlinePlayer* player)
434435 return true ;
435436}
436437
438+ bool ServerSideNetworkHandler::_validateNum (OnlinePlayer* player, int value, int min, int max)
439+ {
440+ if (value < min)
441+ {
442+ sendMessage (player, Util::format (" The number you have entered (%d) is too small, it must be at least %d" , value, min));
443+ return false ;
444+ }
445+ else if (value > max)
446+ {
447+ sendMessage (player, Util::format (" The number you have entered (%d) is too big, it must be at most %d" , value, max));
448+ return false ;
449+ }
450+
451+ return true ;
452+ }
453+
437454void ServerSideNetworkHandler::commandHelp (OnlinePlayer* player, const std::vector<std::string>& parms)
438455{
439456 std::stringstream ss;
@@ -479,7 +496,7 @@ void ServerSideNetworkHandler::commandTime(OnlinePlayer* player, const std::vect
479496 return ;
480497 }
481498
482- if (!checkPermissions (player)) return ;
499+ if (!_checkPermissions (player)) return ;
483500
484501 m_pLevel->setTime (t);
485502
@@ -517,7 +534,7 @@ void ServerSideNetworkHandler::commandTP(OnlinePlayer* player, const std::vector
517534 return ;
518535 }
519536
520- if (!checkPermissions (player)) return ;
537+ if (!_checkPermissions (player)) return ;
521538
522539 Vec3 pos = player->m_pPlayer ->getPos (1 .0f );
523540
@@ -564,7 +581,7 @@ void ServerSideNetworkHandler::commandSummon(OnlinePlayer* player, const std::ve
564581 return ;
565582 }
566583
567- if (!checkPermissions (player)) return ;
584+ if (!_checkPermissions (player)) return ;
568585
569586 std::string entityName;
570587 std::stringstream ss;
@@ -643,3 +660,36 @@ void ServerSideNetworkHandler::commandSummon(OnlinePlayer* player, const std::ve
643660
644661 sendMessage (player, ss.str ());
645662}
663+
664+ void ServerSideNetworkHandler::commandGamemode (OnlinePlayer* player, const std::vector<std::string>& parms)
665+ {
666+ if (!m_pLevel)
667+ return ;
668+
669+ if (parms.size () != 1 )
670+ {
671+ sendMessage (player, " Usage: /gamemode <mode>" );
672+ return ;
673+ }
674+ /* if (parms.size() < 1 || parms.size() > 2)
675+ {
676+ sendMessage(player, "Usage: /gamemode <mode> [player]");
677+ return;
678+ }*/
679+
680+ if (!_checkPermissions (player)) return ;
681+
682+ Vec3 pos = player->m_pPlayer ->getPos (1 .0f );
683+
684+ GameType gameMode;
685+ std::stringstream ss;
686+ ss.str (parms[0 ]);
687+ ss >> (int &)gameMode;
688+
689+ if (!_validateNum (player, gameMode, GAME_TYPES_MIN, GAME_TYPES_MAX))
690+ return ;
691+
692+ player->m_pPlayer ->setPlayerGameType (gameMode);
693+
694+ sendMessage (player, " Your game mode has been updated" );
695+ }
0 commit comments