Merge branch 'master' into api3/network

This commit is contained in:
Dylan K. Taylor 2017-03-28 12:27:40 +01:00
commit 52f2596dc5
4 changed files with 15 additions and 21 deletions

View File

@ -3487,6 +3487,9 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
foreach($this->usedChunks as $index => $d){ foreach($this->usedChunks as $index => $d){
Level::getXZ($index, $chunkX, $chunkZ); Level::getXZ($index, $chunkX, $chunkZ);
$this->level->unregisterChunkLoader($this, $chunkX, $chunkZ); $this->level->unregisterChunkLoader($this, $chunkX, $chunkZ);
foreach($this->level->getChunkEntities($chunkX, $chunkZ) as $entity){
$entity->despawnFrom($this, false);
}
unset($this->usedChunks[$index]); unset($this->usedChunks[$index]);
} }

View File

@ -704,11 +704,13 @@ abstract class Entity extends Location implements Metadatable{
/** /**
* @param Player $player * @param Player $player
*/ */
public function despawnFrom(Player $player){ public function despawnFrom(Player $player, bool $send = true){
if(isset($this->hasSpawned[$player->getLoaderId()])){ if(isset($this->hasSpawned[$player->getLoaderId()])){
$pk = new RemoveEntityPacket(); if($send){
$pk->eid = $this->id; $pk = new RemoveEntityPacket();
$player->dataPacket($pk); $pk->eid = $this->id;
$player->dataPacket($pk);
}
unset($this->hasSpawned[$player->getLoaderId()]); unset($this->hasSpawned[$player->getLoaderId()]);
} }
} }

View File

@ -503,17 +503,6 @@ class Human extends Creature implements ProjectileSource, InventoryHolder{
} }
} }
public function despawnFrom(Player $player){
if(isset($this->hasSpawned[$player->getLoaderId()])){
$pk = new RemoveEntityPacket();
$pk->eid = $this->getId();
$player->dataPacket($pk);
unset($this->hasSpawned[$player->getLoaderId()]);
}
}
public function close(){ public function close(){
if(!$this->closed){ if(!$this->closed){
if(!($this instanceof Player) or $this->loggedIn){ if(!($this instanceof Player) or $this->loggedIn){

View File

@ -1522,10 +1522,10 @@ class Level implements ChunkManager, Metadatable{
return false; return false;
} }
$breakTime = $target->getBreakTime($item); $breakTime = ceil($target->getBreakTime($item) * 20);
if($player->isCreative() and $breakTime > 0.15){ if($player->isCreative() and $breakTime > 3){
$breakTime = 0.15; $breakTime = 3;
} }
if($player->hasEffect(Effect::HASTE)){ if($player->hasEffect(Effect::HASTE)){
@ -1536,13 +1536,13 @@ class Level implements ChunkManager, Metadatable{
$breakTime *= 1 + (0.3 * ($player->getEffect(Effect::MINING_FATIGUE)->getAmplifier() + 1)); $breakTime *= 1 + (0.3 * ($player->getEffect(Effect::MINING_FATIGUE)->getAmplifier() + 1));
} }
$breakTime -= 0.05; //1 tick compensation $breakTime -= 1; //1 tick compensation
if(!$ev->getInstaBreak() and ($player->lastBreak + $breakTime) > microtime(true)){ if(!$ev->getInstaBreak() and ((ceil($player->lastBreak * 20)) + $breakTime) > ceil(microtime(true) * 20)){
return false; return false;
} }
$player->lastBreak = microtime(true); $player->lastBreak = PHP_INT_MAX;
$drops = $ev->getDrops(); $drops = $ev->getDrops();