0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Spigot】ItemStack#addEnchantment と ItemMeta#addEnchant の違い

Last updated at Posted at 2023-04-02

何が違うの?

:arrow_right: エンチャントを付与できるアイテムに違いがある

コードを見てみる

Spigot ItemStack#addEnchantment

398 行目で 429 行目 - 434 行目の addUnsafeEnchantment(Enchantment,int) を呼び出している。

398: addUnsafeEnchantment(ench, level);
429: public void addUnsafeEnchantment(@NotNull Enchantment ench, int level) {
430:         ItemMeta itemMeta = (meta == null ? meta = Bukkit.getItemFactory().getItemMeta(type) : meta);
431:         if (itemMeta != null) {
432:             itemMeta.addEnchant(ench, level, true);
433:         }
434:     }

432 行目で itemMeta#addEnchant を呼び出しているので ItemStack#addEnchantmentItemMeta#addEnchant は同じように振舞う......ように見えるが、 394, 395, 396 行目でツール類以外のアイテムであった場合に IllegalArgumentException を出すように書かれているので多少の違いがある。
(.canEnchantItem が true なアイテムはツール類のみ)

394: else if (!ench.canEnchantItem(this)) {
395:             throw new IllegalArgumentException("Specified enchantment cannot be applied to this itemstack");
396:         }

風のうわさ

追加で調査をしたところ

「ItemStack#addEnchantment は将来廃止されるかもしれないので ItemMeta#addEnchant を使うことを推奨する (意訳)」

という文章を見かけたのでここに記す。

Spigot Forum
"Difference between ItemStack.addEnchantment and ItemMeta.addEnchant"

"ItemStack#addEnchantment(...) is just an easy-access method, but internally it just calls the ItemMeta#addEnchant(...) method.
You should stick to the latter one though, as the first one might get removed in the future. Other easy-access methods that modify the meta have been removed in the past."

なお、公式声明ではないため信頼性は0である。本当にただの風の噂でしかない。

まとめ

ItemMeta#addEnchant : どんな状況でもエンチャントを付与できる。ただし、#getItemMeta で呼び出さなければならない。

ItemStack#addEnchantment : ItemStack から直接操作できる。ただし、ツール類以外にはエンチャントを付与できない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?