diff --git a/build.gradle b/build.gradle index 71ef879..328c10c 100644 --- a/build.gradle +++ b/build.gradle @@ -26,6 +26,7 @@ repositories { */ maven { url = 'https://oss.sonatype.org/content/repositories/snapshots' } maven { url = 'https://oss.sonatype.org/content/repositories/central' } + maven { url 'https://hub.spigotmc.org/nexus/content/repositories/public/' } // Repo for MockBukkit mavenLocal() // This is needed for CraftBukkit and Spigot. } @@ -33,6 +34,8 @@ repositories { dependencies { implementation 'org.spigotmc:spigot-api:1.16.5-R0.1-SNAPSHOT' // The Spigot API with no shadowing. Requires the OSS repo. testImplementation 'junit:junit:4.12' + testImplementation 'com.github.seeseemelk:MockBukkit-v1.16:1.0.0' // MockBukkit server required for Unit Testing + testImplementation "org.mockito:mockito-core:3.+" // Used for Unit Testing } jar { diff --git a/src/main/java/io/github/jhale1805/torcharrow/TorchArrowListener.java b/src/main/java/io/github/jhale1805/torcharrow/TorchArrowListener.java index 15b3c1f..b03ded8 100644 --- a/src/main/java/io/github/jhale1805/torcharrow/TorchArrowListener.java +++ b/src/main/java/io/github/jhale1805/torcharrow/TorchArrowListener.java @@ -21,7 +21,7 @@ import org.bukkit.plugin.java.JavaPlugin; public class TorchArrowListener implements Listener { private JavaPlugin plugin; - private MetadataValue torchArrowMetadata; + final MetadataValue torchArrowMetadata; public TorchArrowListener(JavaPlugin plugin) { this.plugin = plugin; @@ -54,7 +54,7 @@ public class TorchArrowListener implements Listener { @EventHandler public void onEntityShootBow(EntityShootBowEvent event) { - if (event.getConsumable().getItemMeta().equals(new TorchArrow().getItemMeta())) { + if (event.getConsumable().getItemMeta().equals(new TorchArrowStack().getItemMeta())) { event.getProjectile().setMetadata("effect", torchArrowMetadata); event.setConsumeItem(true); // Ignore the effects of Infinity } diff --git a/src/main/java/io/github/jhale1805/torcharrow/TorchArrowPlugin.java b/src/main/java/io/github/jhale1805/torcharrow/TorchArrowPlugin.java index 1e5c689..f09fe9c 100644 --- a/src/main/java/io/github/jhale1805/torcharrow/TorchArrowPlugin.java +++ b/src/main/java/io/github/jhale1805/torcharrow/TorchArrowPlugin.java @@ -1,10 +1,32 @@ package io.github.jhale1805.torcharrow; +import java.io.File; + import org.bukkit.Bukkit; +import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.plugin.java.JavaPluginLoader; public class TorchArrowPlugin extends JavaPlugin { + /** + * Default constructor. + * + *

Used solely by MockBukkit during unit tests. + */ + public TorchArrowPlugin() { + super(); + } + + /** + * Parameterized constructor. + * + *

Used solely by MockBukkit during unit tests. + */ + protected TorchArrowPlugin(JavaPluginLoader loader, PluginDescriptionFile description, File dataFolder, File file) { + super(loader, description, dataFolder, file); + } + @Override public void onEnable() { getLogger().info("Copyright 2021 by Joseph Hale (jhale1805). All Rights Reserved."); diff --git a/src/main/java/io/github/jhale1805/torcharrow/TorchArrowRecipe.java b/src/main/java/io/github/jhale1805/torcharrow/TorchArrowRecipe.java index 54ff2bb..b463aa1 100644 --- a/src/main/java/io/github/jhale1805/torcharrow/TorchArrowRecipe.java +++ b/src/main/java/io/github/jhale1805/torcharrow/TorchArrowRecipe.java @@ -30,7 +30,7 @@ public class TorchArrowRecipe extends ShapedRecipe { * recipe with the plugin. */ public TorchArrowRecipe(Plugin plugin) { - super(new NamespacedKey(plugin, NAMESPACED_KEY), new TorchArrow()); + super(new NamespacedKey(plugin, NAMESPACED_KEY), new TorchArrowStack()); shape(" A ", "ACA", " A "); setIngredient('C', new MaterialChoice(Tag.ITEMS_COALS)); setIngredient('A', Material.ARROW); @@ -38,7 +38,7 @@ public class TorchArrowRecipe extends ShapedRecipe { @Override public ItemStack getResult() { - return new TorchArrow(4); + return new TorchArrowStack(4); } } diff --git a/src/main/java/io/github/jhale1805/torcharrow/TorchArrow.java b/src/main/java/io/github/jhale1805/torcharrow/TorchArrowStack.java similarity index 81% rename from src/main/java/io/github/jhale1805/torcharrow/TorchArrow.java rename to src/main/java/io/github/jhale1805/torcharrow/TorchArrowStack.java index bb07cb0..b9eacaa 100644 --- a/src/main/java/io/github/jhale1805/torcharrow/TorchArrow.java +++ b/src/main/java/io/github/jhale1805/torcharrow/TorchArrowStack.java @@ -7,16 +7,16 @@ import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -public class TorchArrow extends ItemStack { +public class TorchArrowStack extends ItemStack { private final static String DISPLAY_NAME = ChatColor.RED + "Torch Arrow"; - public TorchArrow() { + public TorchArrowStack() { super(Material.ARROW); setMetadata(); } - public TorchArrow(int count) { + public TorchArrowStack(int count) { this(); this.setAmount(count); } @@ -40,11 +40,11 @@ public class TorchArrow extends ItemStack { @Override public boolean equals(Object obj) { - if (!(obj instanceof TorchArrow)) { + if (!(obj instanceof TorchArrowStack)) { return false; } - if (((TorchArrow) obj).getAmount() == this.getAmount()) { + if (((TorchArrowStack) obj).getAmount() == this.getAmount()) { return true; } else { return false; diff --git a/src/test/java/io/github/jhale1805/torcharrow/TorchArrowListenerTest.java b/src/test/java/io/github/jhale1805/torcharrow/TorchArrowListenerTest.java new file mode 100644 index 0000000..738085d --- /dev/null +++ b/src/test/java/io/github/jhale1805/torcharrow/TorchArrowListenerTest.java @@ -0,0 +1,105 @@ +package io.github.jhale1805.torcharrow; + +import org.junit.*; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.WorldMock; + +import static org.junit.Assert.*; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.World; +import org.bukkit.advancement.Advancement; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityBreedEvent; +import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import static org.mockito.Mockito.*; + +public class TorchArrowListenerTest { + + private ServerMock server; + private World world; + private TorchArrowPlugin plugin; + private TorchArrowListener taListener; + + @BeforeClass + public static void setUpClass() { + + } + + @Before + public void setUp() { + server = MockBukkit.mock(); + plugin = MockBukkit.load(TorchArrowPlugin.class); + taListener = new TorchArrowListener(plugin); + world = new WorldMock(Material.DIRT, 3); + } + + @After + public void tearDown() { + MockBukkit.unmock(); + } + + @AfterClass + public static void tearDownClass() { + + } + + // @Test + // public void test_onProjectileHit() { + // // Arrow arrow = + + // } + + // // These tests are not supported by the current version of MockBukkit + // @Test + // public void test_onEntityShootBow() { + // Player player = server.addPlayer(); + // TorchArrowStack tArrows = new TorchArrowStack(4); + // Arrow arrow = mock(Arrow.class); + // EntityShootBowEvent event = new EntityShootBowEvent( + // player, + // new ItemStack(Material.BOW), + // tArrows, + // arrow, + // EquipmentSlot.HAND, + // 10.0f, + // false // Simulate the effect of an Infinity bow + // ); + // taListener.onEntityShootBow(event); + // verify(arrow).getMetadata("effect").contains(taListener.torchArrowMetadata); + // assertTrue(event.shouldConsumeItem()); + // } + + // @Test + // public void test_onPlayerJoin_newPlayer() { + // Player player = server.addPlayer(); + // PlayerJoinEvent event = new PlayerJoinEvent(player, ""); + // taListener.onPlayerJoin(event); + // assertFalse(player.getDiscoveredRecipes().contains(new TorchArrowRecipe(plugin).getKey())); + // } + + // @Test + // public void test_onPlayerJoin_experiencedPlayer() { + // Player player = server.addPlayer(); + // Advancement enchanter = Bukkit.getAdvancement(NamespacedKey.minecraft("story/enchant_item")); + // for (String criteria : enchanter.getCriteria()) + // player.getAdvancementProgress(enchanter).awardCriteria(criteria); + // PlayerJoinEvent event = new PlayerJoinEvent(player, ""); + // taListener.onPlayerJoin(event); + // assertTrue(player.getDiscoveredRecipes().contains(new TorchArrowRecipe(plugin).getKey())); + // } + +} \ No newline at end of file diff --git a/src/test/java/io/github/jhale1805/torcharrow/TorchArrowPluginTest.java b/src/test/java/io/github/jhale1805/torcharrow/TorchArrowPluginTest.java deleted file mode 100644 index eaba80c..0000000 --- a/src/test/java/io/github/jhale1805/torcharrow/TorchArrowPluginTest.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.jhale1805.torcharrow; - -import org.junit.Test; -import static org.junit.Assert.*; - -public class TorchArrowPluginTest { - @Test - public void testSomeLibraryMethod() { - assertTrue("someLibraryMethod should return 'true'", true); - } -} diff --git a/src/test/java/io/github/jhale1805/torcharrow/TorchArrowStackTest.java b/src/test/java/io/github/jhale1805/torcharrow/TorchArrowStackTest.java new file mode 100644 index 0000000..76fb93a --- /dev/null +++ b/src/test/java/io/github/jhale1805/torcharrow/TorchArrowStackTest.java @@ -0,0 +1,60 @@ + +package io.github.jhale1805.torcharrow; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; + +import org.junit.*; +import static org.junit.Assert.*; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +public class TorchArrowStackTest { + + private ServerMock server; + private TorchArrowPlugin plugin; + + @BeforeClass + public static void setUpClass() { + + } + + @Before + public void setUp() { + server = MockBukkit.mock(); + plugin = MockBukkit.load(TorchArrowPlugin.class); + } + + @After + public void tearDown() { + MockBukkit.unmock(); + } + + @AfterClass + public static void tearDownClass() { + + } + + @Test + public void test_isSimilar() { + TorchArrowStack test = new TorchArrowStack(4); + TorchArrowStack test2 = new TorchArrowStack(8); + ItemStack arrow = new ItemStack(Material.ARROW, 4); + + assertTrue(test.isSimilar(test2)); + assertFalse(test.isSimilar(arrow)); + } + + @Test + public void test_equals() { + TorchArrowStack test = new TorchArrowStack(4); + TorchArrowStack test2 = new TorchArrowStack(8); + ItemStack arrow = new ItemStack(Material.ARROW, 4); + + assertTrue(test.equals(test)); + assertFalse(test.equals(test2)); + assertFalse(test.isSimilar(arrow)); + } + +} \ No newline at end of file