From 79720eaf855abed532c80275486a97c50f207253 Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Wed, 10 Feb 2021 15:06:34 -0800 Subject: [PATCH] Merchant#getRecipes should return an immutable list (#5183) This fixes a confusing issue where doing 'merchant.setRecipes(merchant.getRecipes());' would clear the merchants recipes, as the implementation of getRecipes is guavas Lists.transform wrapped in Collections.unmodifiableList, and the implementation of setRecipes clears the backing list before adding the elements of the provided list to the backing list. The javadoc for the getRecipes method says 'an immutable list of trades', so this patch makes the javadoc correct. --- ...ipes-should-return-an-immutable-list.patch | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Spigot-Server-Patches/Merchant-getRecipes-should-return-an-immutable-list.patch diff --git a/Spigot-Server-Patches/Merchant-getRecipes-should-return-an-immutable-list.patch b/Spigot-Server-Patches/Merchant-getRecipes-should-return-an-immutable-list.patch new file mode 100644 index 0000000000..583a1b0f59 --- /dev/null +++ b/Spigot-Server-Patches/Merchant-getRecipes-should-return-an-immutable-list.patch @@ -0,0 +1,19 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> +Date: Wed, 10 Feb 2021 14:53:36 -0800 +Subject: [PATCH] Merchant#getRecipes should return an immutable list + + +diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchant.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchant.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchant.java ++++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchant.java +@@ -0,0 +0,0 @@ public class CraftMerchant implements Merchant { + + @Override + public List<MerchantRecipe> getRecipes() { +- return Collections.unmodifiableList(Lists.transform(merchant.getOffers(), new Function<net.minecraft.server.MerchantRecipe, MerchantRecipe>() { ++ return com.google.common.collect.ImmutableList.copyOf(Lists.transform(merchant.getOffers(), new Function<net.minecraft.server.MerchantRecipe, MerchantRecipe>() { // Paper - javadoc says 'an immutable list of trades' - not 'an unmodifiable view of a list of trades'. fixes issue with setRecipes(getRecipes()) + @Override + public MerchantRecipe apply(net.minecraft.server.MerchantRecipe recipe) { + return recipe.asBukkit();