From f594d3655d1e7c5ed7c091a2573a66dfa44d8cd9 Mon Sep 17 00:00:00 2001 From: DaPigGuy Date: Sat, 17 Feb 2018 12:43:04 -0800 Subject: [PATCH] Support for NBT changes --- plugin.yml | 2 +- src/PiggyCustomEnchants/Main.php | 35 ++++++++++++++------------------ 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/plugin.yml b/plugin.yml index b9a5dd71..073226e1 100644 --- a/plugin.yml +++ b/plugin.yml @@ -1,6 +1,6 @@ name: PiggyCustomEnchants main: PiggyCustomEnchants\Main -version: 1.1.1 +version: 1.1.2 api: 3.0.0-ALPHA11 load: POSTWORLD author: DaPigGuy diff --git a/src/PiggyCustomEnchants/Main.php b/src/PiggyCustomEnchants/Main.php index d8720fc1..743f7395 100644 --- a/src/PiggyCustomEnchants/Main.php +++ b/src/PiggyCustomEnchants/Main.php @@ -481,26 +481,17 @@ public function addEnchantment(Item $item, $enchants, $levels, $check = true, Co if ($item->getId() == Item::BOOK) { $item = Item::get(Item::ENCHANTED_BOOK, $level); } - if (!$item->hasCompoundTag()) { - $tag = new CompoundTag("", []); - } else { - $tag = $item->getNamedTag(); - } - if (!isset($tag->ench)) { - $tag->ench = new ListTag("ench", []); - $tag->ench->setTagType(NBT::TAG_Compound); - } - $found = false; $ench = $item->getNamedTagEntry(Item::TAG_ENCH); + $found = false; if (!($ench instanceof ListTag)) { $ench = new ListTag(Item::TAG_ENCH, [], NBT::TAG_Compound); } else { foreach ($ench as $k => $entry) { if ($entry->getShort("id") === $enchant->getId()) { - $ench[$k] = new CompoundTag("", [ + $ench->set($k, new CompoundTag("", [ new ShortTag("id", $enchant->getId()), new ShortTag("lvl", $level) - ]); + ])); $item->setCustomName(str_replace($this->getRarityColor($enchant->getRarity()) . $enchant->getName() . " " . $this->getRomanNumber($entry["lvl"]), $this->getRarityColor($enchant->getRarity()) . $enchant->getName() . " " . $this->getRomanNumber($level), $item->getName())); $found = true; break; @@ -508,13 +499,12 @@ public function addEnchantment(Item $item, $enchants, $levels, $check = true, Co } } if (!$found) { - $ench[count($ench)] = new CompoundTag("", [ + $ench->push(new CompoundTag("", [ new ShortTag("id", $enchant->getId()), new ShortTag("lvl", $level) - ]); + ])); $item->setCustomName($item->getName() . "\n" . $this->getRarityColor($enchant->getRarity()) . $enchant->getName() . " " . $this->getRomanNumber($level)); } - $item->setNamedTagEntry($ench); if ($sender !== null) { $sender->sendMessage(TextFormat::GREEN . "Enchanting succeeded."); } @@ -558,13 +548,18 @@ public function removeEnchantment(Item $item, $enchant, $level = -1) if ($enchant instanceof EnchantmentInstance) { $enchant = $enchant->getType(); } - $tag = $item->getNamedTag(); - $item = Item::get($item->getId(), $item->getDamage(), $item->getCount()); - foreach ($tag->ench as $k => $enchantment) { - if (($enchantment["id"] == $enchant->getId() && ($enchantment["lvl"] == $level || $level == -1)) !== true) { - $item = $this->addEnchantment($item, $enchantment["id"], $enchantment["lvl"], true); + $ench = $item->getNamedTagEntry(Item::TAG_ENCH); + if (!($ench instanceof ListTag)) { + return false; + } + foreach ($ench as $k => $entry) { + if ($entry->getShort("id") === $enchant->getId() and ($level === -1 or $entry->getShort("lvl") === $level)) { + $ench->remove($k); + $item->setCustomName(str_replace("\n" . $this->getRarityColor($enchant->getRarity()) . $enchant->getName() . " " . $this->getRomanNumber($entry->getShort("lvl")), "", $item->getCustomName())); + break; } } + $item->setNamedTagEntry($ench); return $item; }