Skip to content

Commit

Permalink
Add level limit bypass
Browse files Browse the repository at this point in the history
  • Loading branch information
alexcrea committed Nov 6, 2024
1 parent 304abd8 commit 7d8b733
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 5 deletions.
91 changes: 87 additions & 4 deletions src/test/java/io/delilaheve/util/EnchantmentUtilTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,15 @@
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;
Expand Down Expand Up @@ -47,7 +48,7 @@ public void testBypassFuse(){
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,
Expand All @@ -57,14 +58,15 @@ public void testBypassFuse(){
Material.STICK,
List.of("sharpness"), 1);

// Create result item
ItemStack sharpnessResultStick = AnvilFuseTestUtil.prepareItem(
Material.STICK, 1,
List.of("sharpness"), 1);
ItemStack sharpness2ResultStick = AnvilFuseTestUtil.prepareItem(
Material.STICK, 1,
List.of("sharpness"), 2);

// Create anvil fuse data
// Create failing anvil fuse data
AnvilFuseTestData nullResultData = new AnvilFuseTestData(
normalStick, sharpnessBook,
null
Expand All @@ -74,6 +76,7 @@ public void testBypassFuse(){
null
);

// Create successful anvil fuse data
AnvilFuseTestData legalResultData = new AnvilFuseTestData(
normalStick, sharpnessBook,
sharpnessResultStick
Expand All @@ -98,5 +101,85 @@ public void testBypassFuse(){
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);
}

}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -35,9 +36,10 @@ public int getStoredEnchantLevel(@NotNull Enchantment ench) {
return super.getEnchantLevel(ench);
}

// badly imitate paper (and I hope spigot) behavior and avoid concurrent modification exception
@Override
public @NotNull Map<Enchantment, Integer> getStoredEnchants() {
return super.getEnchants();
return ImmutableMap.copyOf(super.getEnchants());
}

@Override
Expand Down

0 comments on commit 7d8b733

Please sign in to comment.