diff --git a/build.gradle b/build.gradle index f1d2491..dc189e3 100644 --- a/build.gradle +++ b/build.gradle @@ -39,5 +39,5 @@ dependencies { } jar { - archiveVersion = '1.2.0' + archiveVersion = '1.3.0' } \ No newline at end of file diff --git a/src/main/java/io/github/jhale1805/powerarrow/ForestFireArrow.java b/src/main/java/io/github/jhale1805/powerarrow/ForestFireArrow.java new file mode 100644 index 0000000..780f5c3 --- /dev/null +++ b/src/main/java/io/github/jhale1805/powerarrow/ForestFireArrow.java @@ -0,0 +1,79 @@ +package io.github.jhale1805.powerarrow; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.inventory.ShapedRecipe; + +public class ForestFireArrow extends PowerArrow { + + public ForestFireArrow() { + super(); + } + + public ForestFireArrow(int count) { + super(count); + } + + @Override + public String getName() { + return "forest_fire_arrow"; + } + + @Override + public String[] getUsageInstructions() { + return new String[]{"Starts a fire", "where it lands."}; + } + + @Override + public ShapedRecipe getRecipe() { + ShapedRecipe recipe = new ShapedRecipe( + this.getRecipeKey(), + new ForestFireArrow() + ); + recipe.shape("F", "B", "R"); + recipe.setIngredient('F', Material.FLINT); + recipe.setIngredient('B', Material.BLAZE_ROD); + recipe.setIngredient('R', Material.FEATHER); + return recipe; + } + + @EventHandler + public void onProjectileHit(ProjectileHitEvent event) { + // Check preconditions for explosion + if ( !this.isSimilar(event.getEntity()) ) + return; + // Get the impact site + Location impactSite = null; + if (event.getHitBlock() != null) { + impactSite = event.getHitBlock().getLocation(); + } else if (event.getHitEntity() != null) { + impactSite = event.getHitEntity().getLocation(); + event.getHitEntity().setFireTicks(20); // ignite a hit entity + } + // Start the forest fire around the impact site + if (impactSite != null) { + for (double x = -1; x <= 1; x++) { + for (double y = 0; y <= 2; y++) { + for (double z = -1; z <= 1; z++) { + Location toCheck = new Location( + event.getEntity().getWorld(), + impactSite.getX() + x, + impactSite.getY() + y, + impactSite.getZ() + z + ); + Block toIgnite = event.getEntity().getWorld() + .getBlockAt(toCheck); + if (toIgnite.getType() == Material.AIR) { + toIgnite.setType(Material.FIRE); + } + } + } + } + } + event.getEntity().remove(); + } + +} diff --git a/src/main/java/io/github/jhale1805/powerarrow/PowerArrowRegistry.java b/src/main/java/io/github/jhale1805/powerarrow/PowerArrowRegistry.java index ddb145c..f91f441 100644 --- a/src/main/java/io/github/jhale1805/powerarrow/PowerArrowRegistry.java +++ b/src/main/java/io/github/jhale1805/powerarrow/PowerArrowRegistry.java @@ -5,8 +5,9 @@ import java.util.Arrays; public class PowerArrowRegistry { private static PowerArrow[] powerArrows = { + new ExplosiveArrow(), + new ForestFireArrow(), new TorchArrow(), - new ExplosiveArrow() }; public static PowerArrow[] getPowerArrows() { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 0151835..7687973 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,4 +1,4 @@ name: PowerProjectile main: io.github.jhale1805.PowerProjectilePlugin -version: 1.2.0 +version: 1.3.0 api-version: 1.16 \ No newline at end of file