Added getRescuer()
CraftHostage implements Hostage

Hostage is the interface.
mc.euro.extraction.nms.{version}.CraftHostage.java

Those are the implementations for each version of minecraft.
Deleted HostageListener.

The purpose of this class was to add behavior to hostages spawned outside
of arenas with the '/vips spawn' command.

The original idea was to have a Listener for each hostage that would be
registered on '/vips spawn' and unregistered when the hostage died.

Was supposed to be used for testing purposes.

Alternatively, we could have had ONE Listener that detected the entity
type, and conditional reacted to Hostages only. However, I didn't want to
run into the problem of having this listener cause problems in the Arena:
i.e. Cause double dmg to hostages (because the arena listener would be one
source of dmg, and the HostageListener would be the second source of dmg).
Added modules/{version}/HostageFactory.java for

other versions of Minecraft.
Formatted PathfinderGoalFollowPlayer.java

made it look nicer.
Formatted CustomEntityType.java

made it look nicer.
Implemented ExtractionTimer.java

It's job is to
1. keep track of the counter, this.duration (counts down).
2. Fire the ExtractionTimerEvent
3. Fire the HostageExtractedEvent

Note:
ExtractionTimer used to have an implementation (placeholder really) per
version of Minecraft. With the addition of the abstraction layer, this was
changed to 1 implementation.
Moved HostageExecutor.java

With the addition of the abstraction layer, I was able to delete all other
HostageExecutors (that used to exist for each version of Minecraft):

mc.euro.extraction.nms.{version}.HostageExecutor.java

And combine them into one executor:

mc.euro.extraction.commands.HostageExecutor.java

Updated the '/vips spawn' command
Removed unused import
Added ExtractionTimerEvent.java

information available to event listeners:

getTime()
Added HostageExtractedEvent

information available to event listeners:
getHostage()
getRescuer()

public Hostage getHostage() {
will return a reference to the Hostage that was rescued.
}

public Player getRescuer() {
will return the player who rescued the Hostage.
}
Deleted NpcListener.java

Could potentially cause conflicts with HostageArena.
Added ExtractionZone for future use.

The ExtractionZone class will be a different implementation for detecting
if hostages are at the rescue point.

The first implementation is a distance calculation from the Hostage to the
ExtractionPoint along with a comparison of that distance to the radius of
the extraction zone. However, the distance calculation requires an
expensive square root calculation.

That's why I want to prepare for other, more efficient implementations.

The ExtractionZone class will merely be a bounding box implementation. So
that the conditional check for (is a Hostage in the zone ?) will merely be
a comparison of the Hostage's X, Y, Z with that of the bounding box.

Similar to how Alkarin does it for ArenaParkour.
Refactored HostageTracker

HostageTracker now asks for most of what it needs in its constructor:
What match ?
What Set of Hostages ?
What are the Extraction Points ?

However, it supplies the plugin field statically from thin air:
Bukkit.getPluginManager().getPlugin("HostageArena");

It also instantiates its own ExtractionTimer() object rather than asking
for one. (In the future, i might make a different ExtractionTimer for each
ExtractionPoint... this is probably how it should be).

The job of HostageTracker:

HostageTracker is run once per second.

It's job is to ask:
'Are there any hostages in the extraction zone ?'
- if the timer hasn't started yet, then start it.
- if the timer has started, then tell the timer which hostages are in the
  extraction zone.
Not used: possible future use.

HostageRoom is not currently used, but it might be used in the future to
pass things around.
Added HostageExtractedEvent.

This event is the implementation of the other win condition (that the
match should end if the Hostages are rescued).

Made other minor changes also.
Added modules/pre

This module supports Minecraft v1.2.5 to v1.4.2

Altho, the major problem is that BattleArena and a lot of other plugins do
not support these Minecraft versions because they're so old.

So, BattleArena will have to be made compatibile for this to eventually
work.

Also, there exists bug for Minecraft 1.2.5 to 1.5.2 where Hostages will
spawn momentarily and then immediately disappear. This bug has to be fixed
for HostageArena to work for older versions of Minecraft.

Will add more modules in the future (to support both older and newer
versions):

modules/v1_4_5
modules/v1_4_6
modules/v1_4_R1
modules/v1_5_R1
modules/v1_7_R4
modules/v1_8_R1
Added support for v1_7_R4 aka 1.7.10
Bumped MAX supported version to 1.7.10

public static final String MAX = "1.7.10-R9.9-SNAPSHOT";

Without bumping this number, HostageArena would automatically disable
itself on startup (to prevent console errors, and because HostageArena is
contains volatile version dependent code that breaks on each Minecraft
update).
This is HostageArena version 1.1.1 first release !

This is the first release of HostageArena: kinda an alpha or beta version
for testing purposes. So that I can get feedback from users, so that I
know what changes to make.

Find any bugs ? Create a New Ticket on github.

Thanks for evaluating HostageArena. Have fun !