Fixed #287 Items dropped will be deleted if picked up in creative mode [gh#287]

This commit is contained in:
Shoghi Cervantes 2013-05-25 19:27:29 +02:00
parent 5e1dddaba0
commit a538543e4c
2 changed files with 39 additions and 11 deletions

View File

@ -266,6 +266,32 @@ class Player{
} }
} }
public function hasSpace($type, $damage, $count){
$inv = $this->inventory;
while($count > 0){
$add = 0;
foreach($inv as $s => $data){
if($data[0] === AIR){
$add = min(64, $count);
$inv[$s] = array($type, $damage, $add);
break;
}elseif($data[0] === $type and $data[1] === $damage){
$add = min(64 - $data[2], $count);
if($add <= 0){
continue;
}
$inv[$s] = array($type, $damage, $data[2] + $add);
break;
}
}
if($add === 0){
return false;
}
$count -= $add;
}
return true;
}
public function addItem($type, $damage, $count){ public function addItem($type, $damage, $count){
while($count > 0){ while($count > 0){
$add = 0; $add = 0;

View File

@ -183,8 +183,9 @@ class Entity extends Position{
}else{ }else{
return false; return false;
} }
if(($player instanceof Player) and ($player->gamemode & 0x01) === 0x00 and $player->spawned === true){ if(($player instanceof Player) and $player->spawned === true){
if($this->server->api->dhandle("player.pickup", array( if(($player->gamemode & 0x01) === 0x00){
if($player->hasSpace($this->type, $this->meta, $this->stack) === true and $this->server->api->dhandle("player.pickup", array(
"eid" => $player->eid, "eid" => $player->eid,
"player" => $player, "player" => $player,
"entity" => $this, "entity" => $this,
@ -195,6 +196,7 @@ class Entity extends Position{
$this->close(); $this->close();
return false; return false;
} }
}
return true; return true;
} }
} }