Merge master into mcpe-1.1

This commit is contained in:
Dylan K. Taylor 2017-05-14 16:42:42 +01:00
commit b9ad0b99a5
3 changed files with 30 additions and 20 deletions

View File

@ -1923,15 +1923,6 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
return false; return false;
} }
$this->username = TextFormat::clean($packet->username);
$this->displayName = $this->username;
$this->iusername = strtolower($this->username);
$this->setDataProperty(self::DATA_NAMETAG, self::DATA_TYPE_STRING, $this->username, false);
if(count($this->server->getOnlinePlayers()) >= $this->server->getMaxPlayers() and $this->kick("disconnectionScreen.serverFull", false)){
return true;
}
if($packet->protocol !== ProtocolInfo::CURRENT_PROTOCOL){ if($packet->protocol !== ProtocolInfo::CURRENT_PROTOCOL){
if($packet->protocol < ProtocolInfo::CURRENT_PROTOCOL){ if($packet->protocol < ProtocolInfo::CURRENT_PROTOCOL){
$message = "disconnectionScreen.outdatedClient"; $message = "disconnectionScreen.outdatedClient";
@ -1945,6 +1936,19 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
return true; return true;
} }
$packet->decodeAdditional();
//TODO: check MCEE
$this->username = TextFormat::clean($packet->username);
$this->displayName = $this->username;
$this->iusername = strtolower($this->username);
$this->setDataProperty(self::DATA_NAMETAG, self::DATA_TYPE_STRING, $this->username, false);
if(count($this->server->getOnlinePlayers()) >= $this->server->getMaxPlayers() and $this->kick("disconnectionScreen.serverFull", false)){
return true;
}
$this->randomClientId = $packet->clientId; $this->randomClientId = $packet->clientId;
$this->uuid = UUID::fromString($packet->clientUUID); $this->uuid = UUID::fromString($packet->clientUUID);
@ -2800,7 +2804,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
} }
public function handleEntityFall(EntityFallPacket $packet) : bool{ public function handleEntityFall(EntityFallPacket $packet) : bool{
return false; return true; //not used
} }
public function handleHurtArmor(HurtArmorPacket $packet) : bool{ public function handleHurtArmor(HurtArmorPacket $packet) : bool{
@ -3404,14 +3408,16 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
$timings->startTiming(); $timings->startTiming();
$packet->decode(); $packet->decode();
if(!$packet->feof()){
$this->server->getLogger()->debug("Still " . strlen(substr($packet->buffer, $packet->offset)) . " bytes unread in " . get_class($packet) . " from " . $this->getName() . ": " . bin2hex($packet->get(true)));
}
$this->server->getPluginManager()->callEvent($ev = new DataPacketReceiveEvent($this, $packet)); $this->server->getPluginManager()->callEvent($ev = new DataPacketReceiveEvent($this, $packet));
if(!$ev->isCancelled() and !$packet->handle($this)){ if(!$ev->isCancelled() and !$packet->handle($this)){
$this->server->getLogger()->debug("Unhandled " . $packet->getName() . " received from " . $this->getName() . ": 0x" . bin2hex($packet->buffer)); $this->server->getLogger()->debug("Unhandled " . $packet->getName() . " received from " . $this->getName() . ": 0x" . bin2hex($packet->buffer));
} }
if(!$packet->feof()){
$this->server->getLogger()->debug("Still " . strlen(substr($packet->buffer, $packet->offset)) . " bytes unread in " . get_class($packet) . " from " . $this->getName() . ": " . bin2hex($packet->get(true)));
}
$timings->stopTiming(); $timings->stopTiming();
} }

View File

@ -50,12 +50,9 @@ class LoginPacket extends DataPacket{
public function decode(){ public function decode(){
$this->protocol = $this->getInt(); $this->protocol = $this->getInt();
if($this->protocol !== ProtocolInfo::CURRENT_PROTOCOL){
$this->buffer = null;
return; //Do not attempt to decode for non-accepted protocols
} }
public function decodeAdditional(){
$this->gameEdition = $this->getByte(); $this->gameEdition = $this->getByte();
$this->setBuffer($this->getString(), 0); $this->setBuffer($this->getString(), 0);

View File

@ -754,8 +754,15 @@ class PluginManager{
if($class->isAbstract()){ if($class->isAbstract()){
throw new PluginException($event . " is an abstract Event"); throw new PluginException($event . " is an abstract Event");
} }
if($class->getProperty("handlerList")->getDeclaringClass()->getName() !== $event){
throw new PluginException($event . " does not have a handler list"); if(!$class->hasProperty("handlerList") or ($property = $class->getProperty("handlerList"))->getDeclaringClass()->getName() !== $event){
throw new PluginException($event . " does not have a valid handler list");
}
if(!$property->isStatic()){
throw new PluginException($event . " handlerList property is not static");
}
if(!$property->isPublic()){
throw new PluginException($event . " handlerList property is not public");
} }
if(!$plugin->isEnabled()){ if(!$plugin->isEnabled()){