Fixed tool metadata [partial]

This commit is contained in:
Shoghi Cervantes 2013-06-07 19:14:09 +02:00
parent e9683ff5d2
commit 3463db04a6
4 changed files with 50 additions and 3 deletions

View File

@ -1171,7 +1171,7 @@ class Player{
$this->entity->updateMetadata();
}
if($this->blocked === true or Utils::distance($this->entity->position, $data) > 10){
}elseif($this->getSlot($this->slot)->getID() !== $data["block"] or $this->getSlot($this->slot)->getMetadata() !== $data["meta"]){
}elseif($this->getSlot($this->slot)->getID() !== $data["block"] or ($this->getSlot($this->slot)->isTool() === false and $this->getSlot($this->slot)->getMetadata() !== $data["meta"])){
$this->sendInventorySlot($this->slot);
}else{
$this->server->api->block->playerBlockAction($this, new Vector3($data["x"], $data["y"], $data["z"]), $data["face"], $data["fx"], $data["fy"], $data["fz"]);
@ -1287,7 +1287,8 @@ class Player{
}elseif($target->class === ENTITY_PLAYER and ($this->server->api->getProperty("pvp") == false or $this->server->difficulty <= 0 or ($target->player->gamemode & 0x01) === 0x01)){
break;
}elseif($this->server->handle("player.interact", $data) !== false){
switch($this->getSlot($this->slot)->getID()){
$slot = $this->getSlot($this->slot);
switch($slot->getID()){
case WOODEN_SWORD:
case GOLD_SWORD:
$damage = 4;
@ -1348,6 +1349,11 @@ class Player{
$damage = 1;//$this->server->difficulty;
}
$this->server->api->entity->harm($data["target"], $damage, $this->eid);
if($slot->isSword() !== false){
$slot->meta++;
}elseif($slot->isTool() === true){
$slot->meta += 2;
}
}
}
break;
@ -1407,7 +1413,8 @@ class Player{
RAW_FISH => 2,
);
if($this->entity->getHealth() < 20 and isset($items[($slot = $this->getSlot($this->slot))->getID()])){
$slot = $this->getSlot($this->slot);
if($this->entity->getHealth() < 20 and isset($items[$slot->getID()])){
$this->dataPacket(MC_ENTITY_EVENT, array(
"eid" => 0,
"event" => 9,

View File

@ -131,6 +131,10 @@ class Item{
}
final public function isTool(){
return ($this->isPickaxe !== false or $this->isAxe !== false or $this->isShovel !== false or $this->isSword !== false or $this->isHoe !== false);
}
final public function isPickaxe(){ //Returns false or level of the pickaxe
switch($this->id){
case IRON_PICKAXE:
@ -148,6 +152,40 @@ class Item{
}
}
final public function isAxe(){
switch($this->id){
case IRON_AXE:
return 4;
case WOODEN_AXE:
return 1;
case STONE_AXE:
return 3;
case DIAMOND_AXE:
return 5;
case GOLD_AXE:
return 2;
default:
return false;
}
}
final public function isSword(){
switch($this->id){
case IRON_SWORD:
return 4;
case WOODEN_SWORD:
return 1;
case STONE_SWORD:
return 3;
case DIAMOND_SWORD:
return 5;
case GOLD_SWORD:
return 2;
default:
return false;
}
}
final public function isShovel(){
switch($this->id){
case IRON_SHOVEL:

View File

@ -33,6 +33,7 @@ class DirtBlock extends SolidBlock{
public function onActivate(Item $item, Player $player){
if($item->isHoe()){
$item->meta++;
$this->level->setBlock($this, BlockAPI::get(FARMLAND, 0));
return true;
}

View File

@ -41,6 +41,7 @@ class GrassBlock extends SolidBlock{
TallGrassObject::growGrass($this->level, $this, new Random());
return true;
}elseif($item->isHoe()){
$item->meta++;
$this->level->setBlock($this, new FarmlandBlock());
return true;
}