AlchemicalArrows icon

AlchemicalArrows -----

Aims to improve the bow vs bow combat experience while staying true to Minecraft's vanilla mechanics




The most recent update had a hard dependency on Alchema. This was a mistake, I apologize.
  • Fixed errors on startup for servers without Alchema installed
  • Added a new configuration option for all arrows, AllowMultishot, default to true. When set to false, the Multishot enchantment of crossbows will not apply
----------, Feb 28, 2021

The most recent update had a hard dependency on Alchema. This was a mistake, I apologize.
  • Fixed errors on startup for servers without Alchema installed
  • Added a new configuration option for all arrows, AllowMultishot, default to true. When set to false, the Multishot enchantment of crossbows will not apply
----------, Feb 28, 2021

WARNING: This update changes every permission node. While the old permission nodes do still work, this is TEMPORARY and support for these nodes will be removed in the future. You should update your permissions as soon as possible.
  • All permission nodes have been renamed
    • The first node of all permissions were changed from arrows to alchemicalarrows
    • Example: arrows.shoot.air -> alchemicalarrows.shoot.air
    • arrows.worldguardoverride was renamed to alchemicalarrows.worldguard.override (note the additional dot)
    • Removed the legacy arrows.killallarrows permission node. This has been legacy for years and serves no purpose
  • Includes support for the Alchema 1.1.1 API. If you use Alchema, you will need to update to at least 1.1.1 as well otherwise you will have errors
  • Update bStats from 1.4 to 2.2.1
  • Make use of ChocoCommons, a set of common libraries for all my plugins
----------, Feb 26, 2021

  • Alchemical arrows may now be directly loaded into crossbows!
    • Click on a crossbow in your inventory with an alchemical arrow on your cursor to load it
    • If the crossbow has multishot, you may load up to 3 arrows! The arrows do not need to be of the same type
    • This feature is disabled while in creative mode due to how the creative mode inventory works. Even if it were enabled, it wouldn't work :( Sorry
    • This feature can be disabled in the configuration file under Inventory.CrossbowLoading
  • Changes to fire arrows
    • Added MinFireTicks and MaxFireTicks to the fire arrow configuration. Changes the time in ticks to burn entities generated randomly between these values
    • Fire arrows are now reignited when passing through fire or lava
    • Fire arrows now melt snow and snow layers in the world
  • Fixed ender arrows not teleporting players when hitting the ground
[​IMG]
----------, Feb 3, 2021

  • New in-world effects for arrows:
    • Fire arrows will melt ice, frosted ice and blue ice after a configurable amount of ticks (default 60) - WorldGuard is respected. The ice_melt and block_break flags must be allowed (context = shooter of the arrow)
    • Fire arrows, when passing through water, will become extinguished and no longer set alight entities or melt blocks (configurable)
    • Explosive arrows now instantly ignite creepers when hit (configurable)
  • Added a configuration option to disable the disorientation of light arrows (looking upwards)
  • Removed the underline format character from the chain arrow's name
  • Fixed earth arrows clipping players through the ground if air is below the block the player is to be buried under
  • Fixed ender arrows not retaining the orientation of the shooter when landing on the ground
  • Fixed arrows spamming players in PvP protected regions. There is now a 2 second cooldown between each message
  • Fixed the "unset" PvP flag state being considered as "deny". Unset flags now assume PvP is enabled
  • Fixed numerous typos in the config.yml and throughout the code
  • Fixed /alchemicalarrows reload not reloading properties or displays for arrows in the config.yml
  • Fixed inventories being shuffled when opened through other plugins such as InvOpen
  • Improve the performance of arrow properties
See the plugin overview/description page for the new default config
----------, Jan 31, 2021

  • Fix accidental hard dependency on Alchema when running /givearrow
----------, Jan 25, 2021

  • Added LaunchStrengthMin and LaunchStrengthMax to the air arrow's effect configuration
    • Adjusting these values will change the force at which the player is launched. Neither should exceed 4.0
  • Remove StrikeLightning from the light arrow's effect configuration
    • Replaced with LightningChance, a value from 0.0 - 100.0, the chance for lightning to strike the hit entity (0.0 = not at all, 100.0 = always)
  • Fix arrows.worldguardoverride not always working properly
  • Fix potential memory leak with Alchema integration
  • Change how some metric charts are calculated (specifically whether or not Alchema is being integrated with)
----------, Jan 8, 2021

  • Removed all cauldron crafting-related functionality native to AlchemicalArrows
    • AlchemicalArrows now optionally integrates with Alchema, a new standalone cauldron crafting plugin made by myself!
    • I encourage you to check out Alchema. If you like AlchemicalArrows, you will like this plugin too. They integrate quite well together.
    • Cauldron crafting is not going away! If you used cauldron crafting, you must now install Alchema to use it.
      • You may delete any of the default recipes provided by Alchema if you wish to use it only for AlchemicalArrows!
    • This is ENTIRELY optional. It is NOT a hard dependency. Alchema only needs to be installed if you wish to continue to use cauldron crafting.
  • Added a new CustomModelData configuration option to all arrows to change the model data
  • Added new configuration options for the aforementioned Alchema integration
    • Vanilla crafting may now be enabled/disabled separately from cauldron crafting as opposed to having to choose one or the other
  • Reduced the default loot drop chance back to 15% (from 40%)
  • Improved the arrow key parsing in commands. Should now be more accurate
  • Fixed arrows not updating/ticking nearly as fast as they should have been (i.e. explosive arrows taking longer to explode)
  • Fixed LootDropChance not working as intended
  • Fixed NullPointerException when running /alchemicalarrows version with the update checker disabled
----------, Dec 25, 2020

Changes:
  • Dropped support for Minecraft 1.14.x - 1.15.x. Only 1.16.2 and above is supported
  • Added a new Chain arrow (#10 - ZizzyZizzy)
    • After hitting an entity, will bounce to the next nearby entity
    • Crafted using a slime ball
    • Custom model data is 148
  • Alchemical arrows may now be shot from dispensers!
  • Added a new update checker (can be disabled in the config.yml)
  • Increase the default skeleton alchemical arrow loot drop chance to 40% (from 25%)
  • Alchemical arrows are now compared based on an NBT tag rather than the item itself
    • This allows server owners to customize the item to their liking without fearing that arrows crafted before the change be invalidated
    • Any legacy arrows still in the world will be automatically updated. This update is safely compatible with 3.1.1
  • /alchemicalarrows killallarrows has been renamed to /alchemicalarrows clear
    • Permission was updated to arrows.command.clear, though the former permission node will still work for the sake of legacy. This will be removed at a later date
  • Cauldron crafting is now fetched as disabled by default
  • Tab completion has been improved in all commands. It should now be more akin to vanilla tab completion (especially /summonarrow)
  • Fixed SkeletonsCanShoot using inverted values (#9)
  • Fixed skeletons not dropping alchemical arrows at all
  • Fixed commands displaying to the client despite not having permission to use them (/givearrow and /summonarrow)
  • Fixed /summonarrow not working for some arrows
  • Fixed explosive arrows not having coloured lore by default
  • Numerous bits of code cleanup throughout the project. May improve performance in various areas

API Changes:

  • ArrowRegistry now implements Iterable<AlchemicalArrow>
  • ArrowRegistry has had deprecated methods removed
  • Added various new methods to create ItemStack representations of AlchemicalArrow instances (these should be used instead of getItem() in most situations)
    • AlchemicalArrow#createItemStack(amount)
    • AlchemicalArrow#createItemStack()
    • AlchemicalArrow#matchesItem(ItemStack)
----------, Dec 19, 2020

  • Added support for crossbows (and its enchantments; multi-shot will shoot 3 of an alchemical arrow)
  • Added support for tipped arrows and spectral arrows
  • All default alchemical arrows have a designated texture in the inventory by taking advantage of tipped arrows. i.e. water arrows are blue, fire arrows are red, air arrows are white, life arrows are green, etc.
    • These colours are configurable using the new "Colour" option under every arrow. RGB format, separated by ,
    • If no colour is desired, removal of this option from the configuration file will return the item to a regular arrow (as it was before this update)
  • Added custom model data to all default alchemical arrows (for resource pack makers, this is to create models / textures for each individual arrow)
    • Starting with the air arrow, model data 132 is used
    • Ending with the water arrow, model data 147 is used
    • Model data is assigned incrementally according to registration order (alphabetical). For example, frost arrows use model data 140 because it is the 9th registered arrow. (132, 133, 134, 135, 136, 137, 138, 139, 140)
  • Fixed the /summonarrow command not respecting relative y and z coordinates if x was explicit
  • Fixed a NoSuchMethodException due to more recent versions of Bukkit
  • Fixed AllowInfinity not being respected properly (Issue #6 on GitHub)
  • (Developers) Fixed AlchemicalArrowShootEvent not being called when AllowInfinity was enabled for an arrow
  • API Changes:
    • Arrow properties now allow for nullable default values
    • New methods were added to the PropertyMap, #getProperty(), which return Optional<T> instead of a value T
----------, May 2, 2019

  • Add support for Minecraft 1.14.0. Note that this build supports THE VERY LATEST VERSION OF BUKKIT as of April 30th, 2019. If you have not built a version since that date, please re-build using BuildTools, else AlchemicalArrows will not function as intended.
  • Drop support for Minecraft 1.13.x
  • The /givearrow command now supports entity selectors (i.e. @p, @a, @r, @s and its selector arguments... @a[gamemode=creative]), though only players are targeted for obvious reasons
  • Added a /summonarrow command to summon arrows from (optional) specified coordinates at a (optionally) specified velocity
    • This command is /execute friendly
    • Syntax is as follows: /summonarrow <arrow> [x] [y] [z] [world] [velocityX] [velocityY] [velocityZ]
    • The permission node, by default "false", is arrows.command.summonarrow
  • Massive codebase refactor to cutdown on duplicated code, inefficient code, unnecessary code and whitespace inconsistencies
  • Update tasks for the cauldron and arrow state handling are now called at 1/10th the speed they were previously which may improve performance for some lower-end servers without jeopardizing functionality
  • Picking up alchemical arrows is now less hacky. Before 1.9 this was required, but it has since been changed and I've neglected to update it. It should now be less finicky and more accurate with regards to how arrows are added to the inventory on pickup
  • Due to changes in 1.14, alchemical arrow items now support colouring in the inventory and world. While AlchemicalArrows does not take advantage of this, developers may. AlchemicalArrows will take advantage of this in the near future.
  • Fix edge-case IndexOutOfBoundsException by assuming a crafting window is open while crafting arrows
  • Fixed the wrong message being sent when /givearrows provided an invalid arrow ID
  • Updated all dependencies:
    • Removed WorldEdit Core & WorldEdit-Bukkit as they were redundant
    • WorldGuard-Legacy 6.2 -> 7.0.0-SNAPSHOT
    • bStats 1.2 -> 1.4
  • API Changes:
    • Added nullability annotations to all methods and arguments
    • The ArrowRegistry has had an entire overhaul, but still maintains support for legacy registration and arrow handling
      • All former static methods to register arrows are now instance methods... #register(), #unregister(), #get(), etc.
      • All former member methods to handle the state of an in-world arrow have been moved to a new class, ArrowStateManager, obtainable with VeinMiner#getArrowStateManager(). This is to ensure a single-responsibility principle
    • All internal AlchemicalArrow implementations hold configured values as constant properties which may be modified programmatically
      • AlchemicalArrowMagnet.PROPERTY_MAGNETISM_RADIUS : double
      • AlchemicalArrowLight.PROPERTY_STRIKE_LIGHTNING : boolean
      • AlchemicalArrowLife.PROPERTY_FLORAL_RADIUS : int
      • AlchemicalArrowGrapple.PROPERTY_GRAPLE_FORCE : double
      • AlchemicalArrowFrost.PROPERTY_WATER_FREEZE_RADIUS : double
      • AlchemicalArrowExplosive.PROPERTY_EXPLOSION_STRENGTH : int
      • AlchemicalArrowExplosive.PROPERTY_FUSE_TICKS : int
      • AlchemicalArrowEnder.PROPERTY_TELEPORT_ON_HIT_BLOCK : boolean
      • AlchemicalArrowDeath.PROPERTY_INSTANT_DEATH_POSSIBLE : boolean
      • AlchemicalArrowDeath.PROPERTY_INSTANT_DEATH_CHANCE : double
      • AlchemicalArrowAir.PROPERTY_BREATHE_RADIUS : double
    • Add AlchemicalCauldron#addIngredient(ItemStack) as a utility method
    • Document all previously non-documented classes and methods (primarily cauldron-related)
    • Due to massive changes in the API, it's recommended to read the Javadocs if you are a developer planning on writing add-ons
----------, Apr 30, 2019

WARNING!!! Before downloading and using this update, please update to the latest version of CraftBukkit / Spigot. This build uses features added in some of the more recent versions of CraftBukkit thus you MUST be up-to-date, else AlchemicalArrows WILL spew errors in the console. This build will only work on 1.13.1. Please do not come to request support if you are not on the most recent version of CraftBukkit.

Changelog:
  • Frost arrows will now freeze nearby water after hitting the ground or coming in contact with water
  • Grapple arrows are now removed from the ground after they have pulled the player. This is to prevent them from being overpowered by being reusable
  • Arrow recipes that use more than one type of ingredient (i.e. darkness arrow with coal or charcoal) will now be displayed as the same recipe in the vanilla recipe book much like how chests can be crafted with any type of wood but are displayed as a single recipe
  • All default AlchemicalArrow recipes will be granted to the player in their recipe book after the recipe for an arrow has been discovered (this is mostly for new players on your server)
  • Change AlchemicalArrows' messaging system to match that of VeinMiner. This is more of a test. Please let me know what you think, I am open to changing the format
  • Change how recipes are handled internally. They now search for "catalysts" which can be any type of material. For all default arrows provided by AlchemicalArrow, the catalyst is a regular arrow. This should make things a little more stable with regards to cauldron crafting (WHICH STILL NEEDS MORE TESTERS. Please enable this and help me in testing, it helps a lot)
  • Fix darkness arrows not being craftable in the cauldron without both charcoal and coal. They may now be used interchangeably as expected
  • Fix tab completion not properly removing suggestions that do not match your currently typed argument (for example, writing "/givearrow ma" will now only suggest "alchemicalarrows:magic" and "alchemicalarrows:magnetic", as well as any other registered arrow that starts with "ma" (assuming there are add-on plugins on the server)
----------, Oct 3, 2018

Welcome to AlchemicalArrows 3! Before resuming to the changelog, there are a few things I want to note. For one, this version IS NOT MEANT FOR PRODUCTION SERVERS. It is very likely that the plugin will break. This is a Beta version, use with caution.

With that out of the way, I'd like to officially announce that there are now two new things worth noting.
  1. My website. Over the past month or so, I've been reworking my website to look a little nicer and contain all my projects. It's still a work in progress, but you may find it at https://choco.gg/
  2. Support will now be handled over on my official support Discord. Of course, tickets are preferred on the GitHub page, but for general support, please head to http://discord.choco.gg/ and ask around. I'll be available to respond during most hours of the day.
Alright, here is the long-awaited changelog :) Please, please report issues. This is NOT the final version for Minecraft 1.13(.1).

Changelog:
  • Added support for Minecraft 1.13 and 1.13.1
  • Dropped support for Minecraft 1.11.x and 1.12.x
  • Cleaned up the codebase substantially and improved overall code quality/performance
  • Restructured the codebase to make just a little bit more sense. Less "utils", more proper packaging and package naming
  • Changed statistic tracking service from McStats to bStats
  • Changed the /givearrow command to require a namespace and a key. Much like how Minecraft 1.13's blocks are "minecraft:stone", arrows are now "alchemicalarrows:air"
    • This is to separate arrows added from add-on plugins. i.e. if a resource titled "foo" added a "bar" arrow, the ID would be "foo:bar"
    • If no namespace is provided, it will default to "alchemicalarrows". i.e. "/givearrow air" will function as though "/givearrow alchemicalarrows:air" was typed
    • Tab completion for this command will work as intended and display all registered & giveable arrows, including those from add-ons (automatically!)
  • Added lore to all arrows! This means that arrows created before this update will no longer work, but trust me, the arrows look cooler!
  • Introducing the new Explosive Arrow! This was requested a lot over the years, and it's finally here!
    • Upon hitting the ground, the arrow's fuse will ignite
    • A fuse-like sound will play, increasing in pitch as its fuse continues to burn, after which it will explode
  • Added a bit of in-world functionality to some of the existing arrows
    • Air arrows will now replenish the air of nearby underwater entities if the arrow is in-world and underwater
    • Ender arrows will now teleport the shooter to a block above wherever the arrow lands
    • Life arrows will apply a bonemeal-like effect and grow flowers nearby in a configurable radius wherever it lands
    • Magnetic arrows will attract nearby items towards it after landing on the ground
  • Balanced some of the arrow's effects
    • Water arrows will have less of a drag underwater. They will propel much further
    • Reduced the effects of certain arrows to be fairer for the receiver of the effect
  • Introduced a new (optional) crafting system to do with cauldrons!
    • Placing a cauldron in the world and providing it with a source of heat (fire) underneath will cause the cauldron to boil such that the water level is full
    • To craft an alchemical arrow, throw into the boiling cauldron the required ingredients. The ingredients match that of the crafting table recipe (i.e. air arrows require 1 feather)
    • After ingredients are in the cauldron, throw in a regular arrow and the arrow associated with the brewed recipe will be ejected from the cauldron
    • If you prefer the crafting table system, you may disable the cauldron system in the configuration file. CAULDRON CRAFTING IS DISABLED BY DEFAULT!!! Please enable this and help me test it... it would be greatly appreciated, but be aware that there may be issues including the loss of items. Use at your own risk!
  • Restructured the configuration file. It is now much more readable and featureful
    • Added a "DeathMessages" category
      • Added an "Enabled" configuration option. Toggles whether or not custom death messages will be displayed
      • Added 3 new configuration options to change the death messages for players, skeletons and block sources
    • Renamed the "Arrows" category to "Arrow", and renamed all subcategories for the arrows from "XArrow" to simply "X" (i.e. Arrows.WaterArrow -> Arrow.Water)
      • Renamed "Crafts" configuration option to "RecipeYield"
      • Renamed "SkeletonsCanShoot" and "SkeletonsLootWeight" to "CanShoot" and "LootDropWeight" and moved them to their own "Skeleton" category under each arrow
      • Added a new subcategory to all arrows, "Item". It is from here where you may modify the arrow's display name AND LORE!
      • Added a new "Effect" subcategory to the majority of arrows. For features related to the arrow's effect, their options will reside here...
        • Added new "Effect.BreatheRadius" configuration option to "Arrow.Air" to specify the radius in which air is replenished when in-world. Max value of 4. Setting to 0 will cancel the effect
        • Added new "Effect.TeleportOnHitBlock" configuration option to "Arrow.Ender" to set whether the arrow should teleport players or not when hitting the ground
        • Added new "Effect.FloralRadius" configuration option to "Arrow.Life" to specify the radius in which flowers will grow. Max value of 5. Setting to 0 will cancel the effect
        • Added new "Effect.MagnetismRadius" configuration option to "Arrow.Magnetic" to specify the radius in which items are attracted. Max value of 4. Setting to 0 will cancel the effect
  • Completely overhauled the AlchemicalArrows API to a new, permanent system that I'm happy with. (Developers, if you have any add-ons, they will be broken)
    • Removed the mandatory single-parameter (Arrow) constructor. You may now add whichever constructor you'd like
    • Added 4 new methods to the AlchemicalArrow class
      • #getKey() - Returns a unique NamespacedKey representing the registration id of the arrow
      • #getDisplayName() - Returns a String representing the name to be displayed to players in chat
      • #getItem() - Returns the representing ItemStack for the arrow. The returned ItemStack should be a new instance every time (or a clone of a constant - recommended)
      • #createNewArrow(Arrow) - Replaces the previously static method. A default method that now returns a new class, AlchemicalArrowEntity! See below for details
    • Removed #skeletonsCanShoot(), #allowInfinity() and #skeletonLootWeight() methods to make way for a new ArrowProperty API
      • The above methods were replaced with corresponding properties, "alchemicalarrows:skeletons_can_shoot", "alchemicalarrows:allow_infinity" and "alchemicalarrows:skeleton_loot_weight"
        • Constants may be found in the ArrowProperty class itself (i.e. ArrowProperty#SKELETONS_CAN_SHOOT, etc.)
      • A protected (final) field, "properties", of type PropertyMap was added to the AlchemicalArrow class in which properties may be modified for arrows
      • For external modification, a #getProperties() method was added to the AlchemicalArrow class
      • Custom properties may be created by creating a new instance of the ArrowProperty<T> class (must be handled / checked for externally)
    • Added an AlchemicalArrowEntity class
      • This is a class which may be extended to hold custom data, but essentially acts as an Arrow wrapper object
      • For an example on how to create custom AlchemicalArrowEntity implementations, see the wiki (or the AlchemicalArrowWater implementation)
    • Renamed AlchemicalArrow#displayParticle(Player) to AlchemicalArrow#tick(), a method called every tick
    • Refactored many of the methods to pass instances of AlchemicalArrowEntity, the wrapper class returned by #createNewArrow() for that arrow instance
    • To accomodate for the new API, the ArrowRegistry was shifted around a little bit. It's quite easy to navigate. Previously static methods are still static, etc.
      • Registration of arrows is slightly different. You should register a new instance of your AlchemicalArrow implementation to the registry... ONLY ONCE!
    • Added new events for AlchemicalArrows-related actions
      • AlchemicalArrowShootEvent: Called when an alchemical arrow has been shot. This event is cancellable
      • CauldronCraftEvent: Called when an arrow is crafting through the use of a cauldron. This event is cancellable
  • Alphabetized the majority of the codebase. Arrows should maintain an alphabetical order for the sake of clean code and readability
  • Update the project's build system to Maven. Dependencies are now better managed for developers wanting to compile the plugin for themselves
  • Fixed a few inconsistencies with being able to shoot players protected by WorldGuard
  • Fixed a debug message being spammed in the console when using the Earth Arrow
  • Fixed Earth Arrows often times teleporting damaged entities to seemingly random coordinates
  • Fixed Earth Arrows causing a server crash under very specific conditions
  • Fixed the crafting recipe for death arrows functioning even if a wither skull were not placed in the middle of the recipe
  • Fixed colour codes not being respected in configured arrow names
  • Fixed players in creative being unable to shoot alchemical arrows
  • Fixed alchemical arrows shot with infinity being able to be picked up
Alongside the release of AlchemicalArrows 3.0.0-BETA1, for developers, an extensive wiki page for how to use the API as well as Javadocs are made available to use if you're interested in creating your own arrows or working with the API at all.

As for this project's page, yes, I am aware it is out of date and that images are not displaying correct. Over the course of the next few days while I am preparing releases for my two remaining plugins, I will be updating AlchemicalArrow's page with more in-depth information matching the format of VeinMiner's page. I thank you for your patience as I'm sure you can imagine that this update took far too long.
----------, Sep 28, 2018

* Restructured and further solidified the ItemRecipes class
* Fixed local arrow registration being printed to console
* Fixed skeleton loot occasionally dropping alchemical arrows even when "SkeletonLootPercentage" is set to 0
* Added official support for Minecraft 1.12. In doing so, all previous versions are no longer supported. Please update your server in order to use this version. You will not receive any support from AlchemicalArrows 2 if you are on any version other than 1.12.0+
----------, Aug 19, 2017

* Fixed an invalid permission issue with /givearrow
* Fixed the /givearrow command always printing "invalid arrow type x given" for valid arrows
* Fixed air arrows rarely applying its effect. It should now apply 100% of the time
* The particle loop is now slightly more efficient; Will only kill arrows when necessary and runs less operations
* Documented a bunch of methods in the main class and fixed older documentation (More clear & cleaner)
----------, Mar 5, 2017

* Commands can now be run through console
* Modified some of the command code (It was rather old and poorly written)
----------, Jan 29, 2017

* Added some safeguards for those using Paper (Fixes excessive velocity exceptions for Grapple, Magic, and Magnetic arrows)
Those that do not use PaperSpigot will not be affected. You do not need to update, but why not stay on the latest version :)
----------, Jan 22, 2017

* Fixed an UnsupportedOperationException that occurred when an alchemical arrow was picked up
* API: Undeprecated the ArrowRegistry#unregisterAlchemicalArrow() methods
* API: Added a #purgeArrows() method to kill all arrows that were prepared for unregistration
----------, Jan 8, 2017

* Fixed a NullPointerException when regular arrows hit the ground
* Switched the update checker from using BukGet to SpiGet. (Rest in peace, BukGet project :c)
* Now compiled with Java 8 rather than Java 7
* Skeletons now have a 25% chance to drop alchemical arrows (configuration options added per arrow)
* Rewrote a little bit of the internal workings of the API to ease development
* Renamed all listener classes to include "Listener" at the end
* API: Added an AlchemicalArrow#skeletonLootWeight() method, obviously, indicating the chance that the arrow will get dropped
* API: Changed the arrow registry Map to a BiMap
* API: Added an ArrowRegistry#getInformationalInstance() method to retrieve data from arrows
* API: Methods in the arrow registry that return Maps / Sets are now immutable
----------, Jan 4, 2017

* Rewrote a lot of individual arrow code for efficiency purposes
* Loads of general efficiency improvements throughout the code
* Some arrows now only affect LivingEntities whereas previous they would affect ALL entities
* API: Added a new abstract getName() method to get the name of arrow (e.g. "Air" for AirArrow)
* API: Added a static AlchemicalArrow#createAlchemicalArrow(Class<? extends AlchemicalArrow>, Arrow) method to create a new Alchemical Arrow of any specified type
* API: Added an AlchemicalArrows#isNewVersionAvailable() method to check if a new version is present on BukkitDev
* Added a ConfigOption class to manage configuration options a bit better and more efficiently throughout the plugin
* Encapsulated and externalized plenty of variables that required it
* The "/alchemicalarrows version" command will now display if there is a new version available or not
* Fixed a few "off-by-one" randomization patterns
* Further improved the way arrows are created and registered upon being launched
* Moved a few classes into new different packages to be more organized

An in-depth explanation (code-wise) of the changelog can be found on AlchemicalArrows BitBucket's commit history. Yes, AlchemicalArrows's repository is now public on the main page under the AlchemicalArrows API category! (Or Click Here)
----------, Nov 5, 2016

* Magnetic arrow now has its own particle effect! That means all arrow now have particle effects, which is nice

NOTE: You MUST upgrade your server to version 1.10 of Minecraft or higher in order to use this build. You will receive errors otherwise
----------, Jun 23, 2016

* Fixed a bit of a CPU overhaul in the particle loop - Should be a bit more efficient and less CPU-intensive to display particles
* Fixed constant usage of similar methods to get the same value
* Fixed a few bugs here and there. Mainly efficiency improvements
----------, Jun 17, 2016

* Fixed alchemical arrows not being registered if your bow is in the off hand and you're holding a non-arrow item
* Added private modifiers to a few variables that were not previously private
----------, Jun 12, 2016

* Compiled with Bukkit/Spigot version 1.10
* Added better support for 1.9 combat mechanics
** Shooting in the off hand now allows you to select which arrow you would like to shoot.
** To select an arrow, have the arrow you want to shoot selected (/highlighted) in your inventory, and it will take priority
** If an arrow is not in hand, similar to shooting in the main hand, it will shoot the closest arrow to the first slot in your inventory
* Cleaned up and organized the shooting code a bit more (Though I believe it can be optimized a bit more if I wanted to)
* Fixed some issues with the Infinity enchantment nerf not always working if in the off-hand
* API: Added a " isAlchemicalArrow(ItemStack)" method in the ArrowRegistry
----------, Jun 9, 2016

* Fixed occasional NullPointerException when crafting any items
----------, Jun 5, 2016

* Fixed arrows being picked up, even if another plugin prevents arrows from being picked up
* Hid an annoying public boolean field in the main class; instead created a boolean-return method
----------, May 5, 2016

* Attempt to fix "ghost particles" when a chunk is unloaded and the arrow despawns
* Fixed not being able to pick up AlchemicalArrows from the ground after being shot

PLEASE NOTE THAT YOU MUST UPDATE YOUR SPIGOT TO THE LATEST VERSION IN ORDER TO USE BETA-9 OF ALCHEMICAL ARROWS!!! IT WILL NOT WORK OTHERWISE!!! UPDATE TO AT LEAST VERSION git-Spigot-90839e6-ace06bd (Uploaded on 3/23/2016 at around 10am)
----------, Mar 23, 2016

* Added a vampiric (life-steal) effect to the necrotic arrow. Whatever damage dealt to an entity, half of that will be healed to the shooter
* Added a high priority to the custom death messages
* Added a configuration option to toggle custom death messages (In case you want to hide them with another plugin)
* Fixed Earth Arrows not burrowing the player in the ground
* Fixed Earth Arrows often times shooting players into the ground in a sort of glitchy way
* Fixed Necrotic Arrows spamming the console whilst active
* Readded blindness effect to Darkness Arrow when hitting players
* Decreased the particle count for Darkness Arrows (Much less... spammy)
----------, Mar 14, 2016

* Changed the protected AlchemicalArrow constructor to public once again (It caused an IllegalAccessException)
* Added white particle effects to confusion arrows
* Added rotten flesh item particles for necrotic arrows
* Added grapple arrow (recipe can be found on the main page). Previous permission nodes apply
* Added new configuration option to determine percentage of skeletons shooting arrows
* Optimized a couple of arrows to prevent creation of new objects 20 times per second in the particle loop
----------, Mar 13, 2016

* Removed the inability to shoot arrows whilst in a WorldGuarded area with PvP denied
* |-> Instead, the arrow will deflect against the opposing player if PvP is denied
* Added custom death messages when being shot and killed directly with any alchemical arrows
* |-> This message varies depending on what or who kills you
----------, Mar 11, 2016

* Changed AlchemicalArrows constructor to protected rather than public, to prevent creation of "new AlchemicalArrow"
* Added "DisplayName" configuration option for each arrow to change the names of the arrows
* |-> Note: This does not change code-based names. (i.e. Earth Arrows renamed as "Terra Arrows" still requires /givearrow earth)
----------, Mar 9, 2016

DOWNLOAD LOCATION: http://dev.bukkit.org/bukkit-plugins/alchemical-arrows/files/34-alchemical-arrows-v2-0-beta-4/
(I messed up the links, and unfortunately cannot change it after it has been posted)

* Removed deprecated WorldGuard methods in attempt to fix a default __global__ PvP flag state bug
* Attempt to fix ArrowRegistry setting ItemStack parameter arrow count to 1
* Using the same fix as above, attempted to make the code the slightest bit more efficient when registering on shot
* Added a "getAlchemicalArrow()" method which requires a UUID parameter in the ArrowRegistry class for API developers
(As a side note, the AlchemicalArrows Wiki has been updated to explain the ArrowRegistry class in detail)
----------, Mar 8, 2016

* Added an automatic version checker to determine whether there's a new version or not (It runs asynchronously so it does not slow down startup process. Note: This does not download the latest version. It will just link you to it)
* Added a configuration option to disable the version checker (BukkitDev ToU forces me to ;P)
* Added "AllowInfinity" configuration option for each arrow to determine whether infinity is allowed for that arrow or not
* Added "SkeletonsCanShoot" configuration option for each arrow to determine whether skeletons are able to shoot that arrow or not
* Fixed ConfusionArrow recipe returning 0 arrows (typo in the code)
* Changed all arrow recipes to be 8 arrows surrounding the respective material (materials are still the same). It made more sense in my opinion
* Changed the default "Crafts" configuration option for Death Arrows to be set to 8 and respect the crafting recipe
----------, Mar 7, 2016

* Updated WorldEdit soft dependancy to WorldEdit-bukkit-6.1.1-SNAPSHOT-dist
* Updated WorldGuard soft dependancy to WorldGuard-Legacy-6.1.2-SNAPSHOT-dist
* Readded permission nodes for shooting arrows (Same as legacy 1.2.3 permission nodes, arrows.shoot.*)
* Readded permission nodes for crafting arrows (Same as legacy 1.2.3 permission nodes, arrows.craft.*)
* Added permission node to override WorldGuard protection ("arrows.worldguardoverride", default: false)
* Added a particle effect to the Darkness arrow (Thanks to melliebean (From RoyalRebels: 162.255.214.77:25565))

KNOWN ISSUES:
* Picking up alchemical arrows turns them into regular arrows (Spigot bug. Waiting for Spigot to accept my pull request. You can vote for it [[ https://hub.spigotmc.org/jira/browse/SPIGOT-1733|here]])
----------, Mar 6, 2016

Welcome to AlchemicalArrows 2! After 7 months of not updating, this plugin needed some heavy-duty rewriting. This update has been a week in development. I literally created a new project and started completely from scratch. Although I'm glad I did this because the API is much more extensive and actually allows add-on developers to create their own arrows. This has been fully documented on the BitBucket page if you are a developer interested in creating your own custom arrow.

Which brings me to my next point. AlchemicalArrows 2 is now OPEN SOURCE! That's right! You heard me! Open source! Rather than being under the All Rights Reserved license, it is now licensed under the General Public License v3, and free for you to view. Developers are now allowed to view source code on the public BitBucket repository, and if they would like to, create a pull request to further improve the project. I would be more than happy for you guys to help me out and make this project even more better. I had a plan for a couple of new arrows, and I may work on those now. If you'd like to help me, please drop by the repository and feel free to make your own arrows. I may add it into the full version if I think it's good enough. (If you make an add-on, please link it to me! I would be extremely happy to see some add-ons for this plugin. Trust me, it's much easier now)

You should note that this version is in the Beta phase! This is AlchemicalArrows 2 BETA-1. ALPHA versions have already been distributed to other people throughout the past week (Thank you to TripleEz and Dingmamon and friends for being my testers), but I thought that it was ready to be public for a little bit. You have to remember that since it's BETA, that means it's not completed and still missing some features. Please read the "known caveats" down below before creating a ticket!!! Now on to the changelog! I hope you enjoy AlchemicalArrows 2

* Completely rewrote AlchemicalArrows from scratch!
* New API (Old add-ons will be broken, sorry)
* |-> Removed fixed arrow API
* |-> Added ArrowRegistry class to handle external arrows and arrow tracking
* |-> Added abstract AlchemicalArrow class to create specific arrows with specific methods
* |-> Added classes for every arrow available
* |-> Added ArrowRegistry class to handle external arrows and arrow tracking
* Added support for 1.9
* |-> Shields now prevent arrows from executing their effects
* |-> Allowed alchemical arrows to be shot from either hands
* |-> Used 1.9-specific methods (1.8 servers will not be able to run AlchemicalArrows 2)
* Decreased file size by 30KiB
* Fixed WorldGuard support (Tested, and works)
* Cleaned up a lot of old legacy code (Mainly command-related)
* Added support for add-on plugins in the commands (parameters, and killallarrows)
* Added tab completion for some command parameters including /givearrow <arrow>, and /alchemicalarrows <killallarrows|version|reload>
* Config changes (Delete your config)
* |-> Removed a lot of configuration options (This will be expanded soon, as there are more API possibilities)
* |-> Added a new "InstantDeathPercentChance" configuration option under the DeathArrow section
* |-> Changed the default arrow crafting returns to 8, rather than varying amounts (Excluding Death, which still crafts 4)
* Changed a couple particle effects to be cleaner, and look a little nicer than before
* Optimized most of the arrow effects to be more CPU-friendly
* Fixed many many many many many bugs, and created a few more
* |-> NOTE: Picking up arrows is broken, I am aware of this
* |-> Temporarily removed arrows.shoot.<arrow> and arrows.craft.<arrow> permission nodes (These will be readded before release 2.0)
* Removed DarkBlade's Open Source Particle Library
* Added a more reliable way to handle living alchemical arrows

KNOWN BUGS:
* Picking up alchemical arrows turns them into regular arrows (Spigot bug. Waiting for Spigot to accept my event request. You can vote for it here)
* arrows.shoot.* and arrows.craft.* permission nodes have been temporarily removed
----------, Mar 6, 2016

* Fixed an incompatability bug with many griefing prevention / generic plugins (GriefPrevention, WorldGuard, ExtraHardMode, etc.)
* Played a ding sound when you hit a mob to notify you that you hit the mob (just like a regular arrow would)
* Potentially fixed not receiving the kill when killing a mob with a specialized arrow
* Fixed ArrayIndexOutOfBoundsException spamming the console when a crafting recipe with 1 item is being used (sorry ;- ;)
----------, Oct 15, 2015

* Fixed data values in recipes not working properly (wither skulls, charcoal, etc.)
* Added a new general configuration option, AllowInfinity (default: false), to toggle whether infinity bows can be used with alchemical arrows or not
* Added a check in the onEnable method to filter through all Crafts configuratino options. If less than 0, it will automatically set it to 1 (Can't have 0 or less (infinite) arrows as a result anymore)
* |-> If you want to allow infinite arrows, use the new AllowInfinity configuration option
----------, Oct 12, 2015

* Changed the way blocked recipes are handled. They will no longer appear as a valid recipe if an alchemical arrow is used or if you don't have permission to craft it
* Fixed the permission nodes for recipes not working properly
* Fixed the recipes still accepting alchemical arrows
* Fixed not being able to use named arrows, arrows with lore, or enchanted arrows in AlchemicalArrow crafting recipes
* Changed the way specialized arrows are checked when used in a crafting recipe
----------, Oct 12, 2015

* Added a new permission nodes (and 14 child permission nodes)
* Similar to the arrows.shoot.* permission node, there is now a arrows.craft.* permission node to allow crafting recipes. Default: true (for all children nodes)
* Changed the parameters for many of the recipe methods
* Removed the "notification" method from the API's Methods class
* Removed many static references and replaced them with constructors w/ parameters to an instance of the plugin
* Created a Messages class to send a message to a player
* Added the generation of a messages.yml file to change all messages in the plugin (language /customization support)
* Added a ConfigAccessor class in the utils package for easy access to the messages.yml file (or other configs ;D)
* Fixed the /givearrow command giving the sender of the command arrows if an offline player is specified
----------, Oct 10, 2015

* Added an instance of "Recipes" in the main class
* Fixed alchemical arrows being craftable with alchemical arrows in the recipe
* Moved all item objects outside of the Recipes class
* Removed the static modifier on the enable() method in the Recipes class
----------, Oct 8, 2015

* Changed the way the configuration is handled when enabling (more efficient)
* Removed unnecessary variables in the onEnable method
----------, Oct 6, 2015

* Removed declarations of unnecessary integers in Earth and Fire Arrows
* Removed multiple declarations of the Random class for a couple of the arrows
* Fixed particle declarations for the Darkness Arrow to run on less decisions
* Added an aesthetic trim method to the string for disabled arrows on startup and fixed listings not using commas
* Changed the display of "Disabled Arrows" to "Disabled Crafting Recipes" to clear any confusion. (When disabled, arrows are still usable, just not craftable)
* Increased particle range on the arrows from 10 blocks, to 20 blocks
----------, Sep 8, 2015

* Fixed a lot about the /givearrow command
* |-> Fixed NumberFormatException when using a non-integer value for the arrow count to give
* |-> Fixed the arrow count not being applied when giving arrows to another player (only giving 1 no matter what)
* Changed the behaviour of the water arrow very very slightly
----------, Sep 4, 2015

Resource Information
Author:
----------
Total Downloads: 14,482
First Release: Aug 31, 2015
Last Update: Feb 28, 2021
Category: ---------------
All-Time Rating:
28 ratings
Find more info at github.com...
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings