don't break bows, stupid

This commit is contained in:
Dylan K. Taylor 2017-09-26 12:20:40 +01:00
parent 5b191327bc
commit 13d50aff62

View File

@ -2473,66 +2473,68 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{
break; break;
case InventoryTransactionPacket::TYPE_RELEASE_ITEM: case InventoryTransactionPacket::TYPE_RELEASE_ITEM:
$this->setUsingItem(false); try{
$type = $packet->trData->actionType;
$type = $packet->trData->actionType; switch($type){
switch($type){ case InventoryTransactionPacket::RELEASE_ITEM_ACTION_RELEASE:
case InventoryTransactionPacket::RELEASE_ITEM_ACTION_RELEASE: if($this->isUsingItem()){
if($this->isUsingItem()){ $item = $this->inventory->getItemInHand();
$item = $this->inventory->getItemInHand(); if($item->onReleaseUsing($this)){
if($item->onReleaseUsing($this)){ $this->inventory->setItemInHand($item);
$this->inventory->setItemInHand($item); }
}
}else{
$this->inventory->sendContents($this);
}
return true;
case InventoryTransactionPacket::RELEASE_ITEM_ACTION_CONSUME:
$slot = $this->inventory->getItemInHand();
if($slot->canBeConsumed()){
$ev = new PlayerItemConsumeEvent($this, $slot);
if(!$slot->canBeConsumedBy($this)){
$ev->setCancelled();
}
$this->server->getPluginManager()->callEvent($ev);
if(!$ev->isCancelled()){
$slot->onConsume($this);
}else{ }else{
$this->inventory->sendContents($this); $this->inventory->sendContents($this);
} }
return true; return true;
}elseif($this->inventory->getItemInHand()->getId() === Item::BUCKET and $this->inventory->getItemInHand()->getDamage() === 1){ //Milk! case InventoryTransactionPacket::RELEASE_ITEM_ACTION_CONSUME:
$this->server->getPluginManager()->callEvent($ev = new PlayerItemConsumeEvent($this, $this->inventory->getItemInHand())); $slot = $this->inventory->getItemInHand();
if($ev->isCancelled()){
$this->inventory->sendContents($this); if($slot->canBeConsumed()){
$ev = new PlayerItemConsumeEvent($this, $slot);
if(!$slot->canBeConsumedBy($this)){
$ev->setCancelled();
}
$this->server->getPluginManager()->callEvent($ev);
if(!$ev->isCancelled()){
$slot->onConsume($this);
}else{
$this->inventory->sendContents($this);
}
return true;
}elseif($this->inventory->getItemInHand()->getId() === Item::BUCKET and $this->inventory->getItemInHand()->getDamage() === 1){ //Milk!
$this->server->getPluginManager()->callEvent($ev = new PlayerItemConsumeEvent($this, $this->inventory->getItemInHand()));
if($ev->isCancelled()){
$this->inventory->sendContents($this);
return true;
}
$pk = new EntityEventPacket();
$pk->entityRuntimeId = $this->getId();
$pk->event = EntityEventPacket::USE_ITEM;
$this->dataPacket($pk);
$this->server->broadcastPacket($this->getViewers(), $pk);
if($this->isSurvival()){
$slot = $this->inventory->getItemInHand();
--$slot->count;
$this->inventory->setItemInHand($slot);
$this->inventory->addItem(ItemFactory::get(Item::BUCKET, 0, 1));
}
$this->removeAllEffects();
return true; return true;
} }
$pk = new EntityEventPacket(); return false;
$pk->entityRuntimeId = $this->getId(); default:
$pk->event = EntityEventPacket::USE_ITEM; break;
$this->dataPacket($pk); }
$this->server->broadcastPacket($this->getViewers(), $pk); }finally{
$this->setUsingItem(false);
if($this->isSurvival()){
$slot = $this->inventory->getItemInHand();
--$slot->count;
$this->inventory->setItemInHand($slot);
$this->inventory->addItem(ItemFactory::get(Item::BUCKET, 0, 1));
}
$this->removeAllEffects();
return true;
}
return false;
default:
break;
} }
break; break;
default: default: