From 54e60aee756da1ca483fd1bd043276c526360c8a Mon Sep 17 00:00:00 2001 From: CraftBukkit/Spigot Date: Tue, 13 Dec 2016 08:44:50 +1100 Subject: [PATCH] SPIGOT-2913: Only one enchantment applied to items By: md_5 --- .../nms-patches/ContainerEnchantTable.patch | 27 +++++-------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/paper-server/nms-patches/ContainerEnchantTable.patch b/paper-server/nms-patches/ContainerEnchantTable.patch index 95f4e2a7c1..71e79dd77a 100644 --- a/paper-server/nms-patches/ContainerEnchantTable.patch +++ b/paper-server/nms-patches/ContainerEnchantTable.patch @@ -106,26 +106,13 @@ this.b(); } } else { -@@ -174,27 +236,59 @@ - return false; - } else if (this.costs[i] > 0 && !itemstack.isEmpty() && (entityhuman.expLevel >= j && entityhuman.expLevel >= this.costs[i] || entityhuman.abilities.canInstantlyBuild)) { - if (!this.world.isClientSide) { -- List list = this.a(itemstack, i, this.costs[i]); -+ // CraftBukkit start - Use the data generated by the PostPrepareItemEnchantEvent -+ List list; -+ if (this.h[i] < 0) { -+ list = this.a(itemstack, i, this.costs[i]); -+ } else { -+ list = Collections.singletonList(new WeightedRandomEnchant(Enchantment.c(this.h[i]), this.i[i])); -+ } -+ // CraftBukkit end -+ boolean flag = itemstack.getItem() == Items.BOOK; +@@ -177,24 +239,49 @@ + List list = this.a(itemstack, i, this.costs[i]); -- if (!list.isEmpty()) { + if (!list.isEmpty()) { - entityhuman.enchantDone(j); -- boolean flag = itemstack.getItem() == Items.BOOK; -+ if (list != null) { + // CraftBukkit start + boolean flag = itemstack.getItem() == Items.BOOK; + Map enchants = new java.util.HashMap(); + for (Object obj : list) { + WeightedRandomEnchant instance = (WeightedRandomEnchant) obj; @@ -176,7 +163,7 @@ if (!entityhuman.abilities.canInstantlyBuild) { itemstack1.subtract(j); if (itemstack1.isEmpty()) { -@@ -229,6 +323,11 @@ +@@ -229,6 +316,11 @@ public void b(EntityHuman entityhuman) { super.b(entityhuman); @@ -188,7 +175,7 @@ if (!this.world.isClientSide) { for (int i = 0; i < this.enchantSlots.getSize(); ++i) { ItemStack itemstack = this.enchantSlots.splitWithoutUpdate(i); -@@ -242,6 +341,7 @@ +@@ -242,6 +334,7 @@ } public boolean a(EntityHuman entityhuman) { @@ -196,7 +183,7 @@ return this.world.getType(this.position).getBlock() != Blocks.ENCHANTING_TABLE ? false : entityhuman.d((double) this.position.getX() + 0.5D, (double) this.position.getY() + 0.5D, (double) this.position.getZ() + 0.5D) <= 64.0D; } -@@ -294,4 +394,17 @@ +@@ -294,4 +387,17 @@ return itemstack; }