mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-11 12:27:51 +00:00
Enchantment: Implemented Unbreaking
This commit is contained in:
parent
45b02d92d4
commit
94feecd44b
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\item;
|
namespace pocketmine\item;
|
||||||
|
|
||||||
|
use pocketmine\item\enchantment\Enchantment;
|
||||||
use pocketmine\nbt\tag\ByteTag;
|
use pocketmine\nbt\tag\ByteTag;
|
||||||
|
|
||||||
abstract class Durable extends Item{
|
abstract class Durable extends Item{
|
||||||
@ -54,7 +55,7 @@ abstract class Durable extends Item{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Unbreaking enchantment
|
$amount -= $this->getUnbreakingDamageReduction($amount);
|
||||||
|
|
||||||
$this->meta += $amount;
|
$this->meta += $amount;
|
||||||
if($this->isBroken()){
|
if($this->isBroken()){
|
||||||
@ -64,6 +65,23 @@ abstract class Durable extends Item{
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getUnbreakingDamageReduction(int $amount) : int{
|
||||||
|
if(($unbreakingLevel = $this->getEnchantmentLevel(Enchantment::UNBREAKING)) > 0){
|
||||||
|
$negated = 0;
|
||||||
|
|
||||||
|
$chance = 1 / ($unbreakingLevel + 1);
|
||||||
|
for($i = 0; $i < $amount; ++$i){
|
||||||
|
if(lcg_value() > $chance){
|
||||||
|
$negated++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $negated;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether the item is broken.
|
* Returns whether the item is broken.
|
||||||
* @return bool
|
* @return bool
|
||||||
|
@ -95,6 +95,8 @@ class Enchantment{
|
|||||||
self::registerEnchantment(new Enchantment(self::RESPIRATION, "%enchantment.oxygen", self::RARITY_RARE, self::SLOT_HEAD, 3));
|
self::registerEnchantment(new Enchantment(self::RESPIRATION, "%enchantment.oxygen", self::RARITY_RARE, self::SLOT_HEAD, 3));
|
||||||
|
|
||||||
self::registerEnchantment(new Enchantment(self::EFFICIENCY, "%enchantment.digging", self::RARITY_COMMON, self::SLOT_DIG | self::SLOT_SHEARS, 5));
|
self::registerEnchantment(new Enchantment(self::EFFICIENCY, "%enchantment.digging", self::RARITY_COMMON, self::SLOT_DIG | self::SLOT_SHEARS, 5));
|
||||||
|
|
||||||
|
self::registerEnchantment(new Enchantment(self::UNBREAKING, "%enchantment.durability", self::RARITY_UNCOMMON, self::SLOT_ALL, 3)); //TODO: item type flags need to be split up
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user