mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-13 09:19:42 +00:00
clean up gamemode net sync
This commit is contained in:
parent
f0d56f25b6
commit
8e6f21afad
@ -27,7 +27,6 @@ use pocketmine\block\Bed;
|
||||
use pocketmine\block\BlockFactory;
|
||||
use pocketmine\block\BlockLegacyIds;
|
||||
use pocketmine\block\UnknownBlock;
|
||||
use pocketmine\command\Command;
|
||||
use pocketmine\command\CommandSender;
|
||||
use pocketmine\entity\effect\Effect;
|
||||
use pocketmine\entity\effect\EffectInstance;
|
||||
@ -1262,11 +1261,10 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
|
||||
* Sets the gamemode, and if needed, kicks the Player.
|
||||
*
|
||||
* @param GameMode $gm
|
||||
* @param bool $client if the client made this change in their GUI
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function setGamemode(GameMode $gm, bool $client = false) : bool{
|
||||
public function setGamemode(GameMode $gm) : bool{
|
||||
if($this->gamemode === $gm){
|
||||
return false;
|
||||
}
|
||||
@ -1274,9 +1272,6 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
|
||||
$ev = new PlayerGameModeChangeEvent($this, $gm);
|
||||
$ev->call();
|
||||
if($ev->isCancelled()){
|
||||
if($client){ //gamemode change by client in the GUI
|
||||
$this->networkSession->syncGameMode($this->gamemode);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1295,15 +1290,7 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
|
||||
$this->spawnToAll();
|
||||
}
|
||||
|
||||
if(!$client){ //Gamemode changed by server, do not send for client changes
|
||||
$this->networkSession->syncGameMode($this->gamemode);
|
||||
}else{
|
||||
Command::broadcastCommandMessage($this, new TranslationContainer("commands.gamemode.success.self", [$gm->getTranslationKey()]));
|
||||
}
|
||||
|
||||
$this->networkSession->syncAdventureSettings($this);
|
||||
$this->networkSession->syncCreativeInventoryContents();
|
||||
|
||||
$this->networkSession->syncGameMode($this->gamemode);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -610,8 +610,12 @@ class NetworkSession{
|
||||
$this->sendDataPacket(SetSpawnPositionPacket::playerSpawn($newSpawn->getFloorX(), $newSpawn->getFloorY(), $newSpawn->getFloorZ(), false)); //TODO: spawn forced
|
||||
}
|
||||
|
||||
public function syncGameMode(GameMode $mode) : void{
|
||||
public function syncGameMode(GameMode $mode, bool $isRollback = false) : void{
|
||||
$this->sendDataPacket(SetPlayerGameTypePacket::create(self::getClientFriendlyGamemode($mode)));
|
||||
$this->syncAdventureSettings($this->player);
|
||||
if(!$isRollback){
|
||||
$this->syncCreativeInventoryContents();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -534,8 +534,7 @@ class InGameSessionHandler extends SessionHandler{
|
||||
public function handleSetPlayerGameType(SetPlayerGameTypePacket $packet) : bool{
|
||||
if($packet->gamemode !== $this->player->getGamemode()->getMagicNumber()){
|
||||
//Set this back to default. TODO: handle this properly
|
||||
$this->session->syncGameMode($this->player->getGamemode());
|
||||
$this->session->syncAdventureSettings($this->player);
|
||||
$this->session->syncGameMode($this->player->getGamemode(), true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user