From 7d8b733cc7aa53217332fa544d89c6b568e1c35c Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Wed, 6 Nov 2024 13:15:29 +0100 Subject: [PATCH] Add level limit bypass --- .../delilaheve/util/EnchantmentUtilTests.java | 91 ++++++++++++++++++- .../cuanvil/mock/EnchantedItemMetaMock.java | 4 +- 2 files changed, 90 insertions(+), 5 deletions(-) diff --git a/src/test/java/io/delilaheve/util/EnchantmentUtilTests.java b/src/test/java/io/delilaheve/util/EnchantmentUtilTests.java index 213f04f..a5d8a79 100644 --- a/src/test/java/io/delilaheve/util/EnchantmentUtilTests.java +++ b/src/test/java/io/delilaheve/util/EnchantmentUtilTests.java @@ -12,14 +12,15 @@ import org.bukkit.permissions.PermissionAttachment; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import xyz.alexcrea.cuanvil.api.EnchantmentApi; import xyz.alexcrea.cuanvil.config.ConfigHolder; -import xyz.alexcrea.cuanvil.tests.DefaultCustomAnvilTest; +import xyz.alexcrea.cuanvil.tests.ConfigResetCustomAnvilTest; import xyz.alexcrea.cuanvil.util.AnvilFuseTestData; import xyz.alexcrea.cuanvil.util.AnvilFuseTestUtil; import java.util.List; -public class EnchantmentUtilTests extends DefaultCustomAnvilTest { +public class EnchantmentUtilTests extends ConfigResetCustomAnvilTest { private AnvilInventory anvil; private PlayerMock player; @@ -47,7 +48,7 @@ public class EnchantmentUtilTests extends DefaultCustomAnvilTest { Assertions.assertEquals("ca.bypass.fuse", permission, "bypass fuse permission changed. " + "Caution with that as it will break some server CustomAnvil setup."); - // Create item + // Create ingredient item ItemStack normalStick = new ItemStackMock(Material.STICK); ItemStack sharpnessBook = AnvilFuseTestUtil.prepareItem( Material.ENCHANTED_BOOK, @@ -57,6 +58,7 @@ public class EnchantmentUtilTests extends DefaultCustomAnvilTest { Material.STICK, List.of("sharpness"), 1); + // Create result item ItemStack sharpnessResultStick = AnvilFuseTestUtil.prepareItem( Material.STICK, 1, List.of("sharpness"), 1); @@ -64,7 +66,7 @@ public class EnchantmentUtilTests extends DefaultCustomAnvilTest { Material.STICK, 1, List.of("sharpness"), 2); - // Create anvil fuse data + // Create failing anvil fuse data AnvilFuseTestData nullResultData = new AnvilFuseTestData( normalStick, sharpnessBook, null @@ -74,6 +76,7 @@ public class EnchantmentUtilTests extends DefaultCustomAnvilTest { null ); + // Create successful anvil fuse data AnvilFuseTestData legalResultData = new AnvilFuseTestData( normalStick, sharpnessBook, sharpnessResultStick @@ -98,5 +101,85 @@ public class EnchantmentUtilTests extends DefaultCustomAnvilTest { AnvilFuseTestUtil.executeAnvilTest(anvil, player, legalResultData2); } + @Test + public void testLeveLimitFuse(){ + String permission = CustomAnvil.bypassLevelPermission; + Assertions.assertEquals("ca.bypass.level", permission, "level fuse permission changed. " + + "Caution with that as it will break some server CustomAnvil setup."); + + // Create ingredient item + ItemStack sharpness5Sword = AnvilFuseTestUtil.prepareItem( + Material.DIAMOND_SWORD, + List.of("sharpness"), 5); + + ItemStack sharpnessBook = AnvilFuseTestUtil.prepareItem( + Material.ENCHANTED_BOOK, + List.of("sharpness"), 1); + ItemStack sharpness5Book = AnvilFuseTestUtil.prepareItem( + Material.ENCHANTED_BOOK, + List.of("sharpness"), 5); + ItemStack sharpness6Book = AnvilFuseTestUtil.prepareItem( + Material.ENCHANTED_BOOK, + List.of("sharpness"), 6); + + // Create result item + ItemStack sharpness2BookResult = AnvilFuseTestUtil.prepareItem( + Material.ENCHANTED_BOOK, 1, + List.of("sharpness"), 2); + ItemStack sharpness6SwordResult = AnvilFuseTestUtil.prepareItem( + Material.DIAMOND_SWORD, 1, + List.of("sharpness"), 6); + + // Create failing anvil fuse data + AnvilFuseTestData nullResultData = new AnvilFuseTestData( + sharpnessBook, sharpnessBook, + null + ); + AnvilFuseTestData nullResultData2 = new AnvilFuseTestData( + sharpness5Sword, sharpness6Book, + null + ); + AnvilFuseTestData nullResultData3 = new AnvilFuseTestData( + sharpness5Sword, sharpness5Book, + null + ); + + // Create successful anvil fuse data + AnvilFuseTestData legalResultData = new AnvilFuseTestData( + sharpnessBook, sharpnessBook, + sharpness2BookResult + // TODO add expected price + ); + AnvilFuseTestData legalResultData2 = new AnvilFuseTestData( + sharpness5Sword, sharpness6Book, + sharpness6SwordResult + // TODO add expected price + ); + AnvilFuseTestData legalResultData3 = new AnvilFuseTestData( + sharpness5Sword, sharpness5Book, + sharpness6SwordResult + // TODO add expected price + ); + + // Test failing result first + AnvilFuseTestUtil.executeAnvilTest(anvil, player, nullResultData2); + AnvilFuseTestUtil.executeAnvilTest(anvil, player, nullResultData3); + + // Test working sharpness 2 + AnvilFuseTestUtil.executeAnvilTest(anvil, player, legalResultData); + + // Set merge limit to 2 & test + ConfigHolder.DEFAULT_CONFIG.getConfig().set("disable-merge-over.minecraft:sharpness", 1); + AnvilFuseTestUtil.executeAnvilTest(anvil, player, nullResultData); + + // Add permission + PermissionAttachment attachment = player.addAttachment(plugin); + attachment.setPermission(permission, true); + + // Test working sharpness 2 + AnvilFuseTestUtil.executeAnvilTest(anvil, player, legalResultData); + AnvilFuseTestUtil.executeAnvilTest(anvil, player, legalResultData2); + AnvilFuseTestUtil.executeAnvilTest(anvil, player, legalResultData3); + } } diff --git a/src/test/java/xyz/alexcrea/cuanvil/mock/EnchantedItemMetaMock.java b/src/test/java/xyz/alexcrea/cuanvil/mock/EnchantedItemMetaMock.java index edf3a5d..3825f6a 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/mock/EnchantedItemMetaMock.java +++ b/src/test/java/xyz/alexcrea/cuanvil/mock/EnchantedItemMetaMock.java @@ -1,6 +1,7 @@ package xyz.alexcrea.cuanvil.mock; import be.seeseemelk.mockbukkit.inventory.meta.ItemMetaMock; +import com.google.common.collect.ImmutableMap; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.meta.EnchantmentStorageMeta; import org.bukkit.inventory.meta.ItemMeta; @@ -35,9 +36,10 @@ public class EnchantedItemMetaMock extends ItemMetaMock implements EnchantmentSt return super.getEnchantLevel(ench); } + // badly imitate paper (and I hope spigot) behavior and avoid concurrent modification exception @Override public @NotNull Map getStoredEnchants() { - return super.getEnchants(); + return ImmutableMap.copyOf(super.getEnchants()); } @Override