From 1c0b49343c82c833dff08fe40256b495be8ce3e6 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sat, 23 Jun 2018 11:44:35 +0100 Subject: [PATCH] Implemented Infinity enchantment (#2259) --- src/pocketmine/item/Bow.php | 9 ++++++++- src/pocketmine/item/enchantment/Enchantment.php | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/pocketmine/item/Bow.php b/src/pocketmine/item/Bow.php index 75ea0334d..39e11a4c1 100644 --- a/src/pocketmine/item/Bow.php +++ b/src/pocketmine/item/Bow.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\item; use pocketmine\entity\Entity; +use pocketmine\entity\projectile\Arrow as ArrowEntity; use pocketmine\entity\projectile\Projectile; use pocketmine\event\entity\EntityShootBowEvent; use pocketmine\event\entity\ProjectileLaunchEvent; @@ -65,6 +66,10 @@ class Bow extends Tool{ $entity = Entity::createEntity("Arrow", $player->getLevel(), $nbt, $player, $force == 2); if($entity instanceof Projectile){ + $infinity = $this->hasEnchantment(Enchantment::INFINITY); + if($infinity and $entity instanceof ArrowEntity){ + $entity->setPickupMode(ArrowEntity::PICKUP_CREATIVE); + } if(($powerLevel = $this->getEnchantmentLevel(Enchantment::POWER)) > 0){ $entity->setBaseDamage($entity->getBaseDamage() + (($powerLevel + 1) / 2)); } @@ -84,7 +89,9 @@ class Bow extends Tool{ }else{ $entity->setMotion($entity->getMotion()->multiply($ev->getForce())); if($player->isSurvival()){ - $player->getInventory()->removeItem(ItemFactory::get(Item::ARROW, 0, 1)); + if(!$infinity){ //TODO: tipped arrows are still consumed when Infinity is applied + $player->getInventory()->removeItem(ItemFactory::get(Item::ARROW, 0, 1)); + } $this->applyDamage(1); } diff --git a/src/pocketmine/item/enchantment/Enchantment.php b/src/pocketmine/item/enchantment/Enchantment.php index 35fa10c2c..9d40e7758 100644 --- a/src/pocketmine/item/enchantment/Enchantment.php +++ b/src/pocketmine/item/enchantment/Enchantment.php @@ -123,6 +123,8 @@ class Enchantment{ self::registerEnchantment(new Enchantment(self::POWER, "%enchantment.arrowDamage", self::RARITY_COMMON, self::SLOT_BOW, self::SLOT_NONE, 5)); + self::registerEnchantment(new Enchantment(self::INFINITY, "%enchantment.arrowInfinite", self::RARITY_MYTHIC, self::SLOT_BOW, self::SLOT_NONE, 1)); + self::registerEnchantment(new Enchantment(self::VANISHING, "%enchantment.curse.vanishing", self::RARITY_MYTHIC, self::SLOT_NONE, self::SLOT_ALL, 1)); }