Fixed #311 Check for Liquids, ladders and cobweb for flying

This commit is contained in:
Shoghi Cervantes 2013-06-02 11:20:16 +02:00
parent 0ca18864f3
commit b72d4ac407

View File

@ -353,6 +353,7 @@ class Entity extends Position{
$endX = $startX + 2; $endX = $startX + 2;
$endZ = $startZ + 2; $endZ = $startZ + 2;
$support = false; $support = false;
$isFlying = true;
for($z = $startZ; $z <= $endZ; ++$z){ for($z = $startZ; $z <= $endZ; ++$z){
for($x = $startX; $x <= $endX; ++$x){ for($x = $startX; $x <= $endX; ++$x){
$v = new Vector3($x, $y, $z); $v = new Vector3($x, $y, $z);
@ -360,7 +361,10 @@ class Entity extends Position{
$b = $this->level->getBlock($v); $b = $this->level->getBlock($v);
if($b->isSolid === true){ if($b->isSolid === true){
$support = true; $support = true;
$isFlying = false;
break; break;
}elseif(($b instanceof LiquidBlock) or $b->getID() === COBWEB or $b->getID() === LADDER){
$isFlying = false;
} }
} }
} }
@ -431,12 +435,12 @@ class Entity extends Position{
} }
}elseif($this->class === ENTITY_PLAYER and ($this->player instanceof Player)){ }elseif($this->class === ENTITY_PLAYER and ($this->player instanceof Player)){
if($support === false and ($this->player->gamemode & 0x01) === 0x00){ if($isFlying === true and ($this->player->gamemode & 0x01) === 0x00){
if($this->fallY === false or $this->fallStart === false){ if($this->fallY === false or $this->fallStart === false){
$this->fallY = $y; $this->fallY = $y;
$this->fallStart = microtime(true); $this->fallStart = microtime(true);
}elseif($this->class === ENTITY_PLAYER and ($this->fallStart + 5) < microtime(true)){ }elseif($this->class === ENTITY_PLAYER and ($this->fallStart + 5) < microtime(true)){
if($this->server->api->getProperty("allow-flight") !== true and $this->server->handle("player.flying", $this->player) !== true and $this->level->getBlock(new Vector3($x, $y - 1, $z)) !== WATER){ if($this->server->api->getProperty("allow-flight") !== true and $this->server->handle("player.flying", $this->player) !== true){
$this->player->close("flying"); $this->player->close("flying");
return; return;
} }
@ -448,7 +452,7 @@ class Entity extends Position{
$d = $this->level->getBlock(new Vector3($x, $y + 1, $z)); $d = $this->level->getBlock(new Vector3($x, $y + 1, $z));
$d2 = $this->level->getBlock(new Vector3($x, $y + 2, $z)); $d2 = $this->level->getBlock(new Vector3($x, $y + 2, $z));
$dmg = ($this->fallY - $y) - 3; $dmg = ($this->fallY - $y) - 3;
if($dmg > 0 and !($d instanceof LiquidBlock) and $d->getID() !== LADDER and !($d2 instanceof LiquidBlock) and $d2->getID() !== LADDER){ if($dmg > 0 and !($d instanceof LiquidBlock) and $d->getID() !== LADDER and $d->getID() !== COBWEB and !($d2 instanceof LiquidBlock) and $d2->getID() !== LADDER and $d2->getID() !== COBWEB){
$this->harm($dmg, "fall"); $this->harm($dmg, "fall");
} }
} }