DragonEggDrop Revival icon

DragonEggDrop Revival -----

Ender Dragon loot tables and death effects. (Active Fork of PixelStix's DragonEggDrop)




Changelog
  • The dragon respawn counter is now calculated relative to an absolute point in time
    • This means that if you started a 10 day respawn timer but your server was offline for 4 days, the respawn timer will be accurate as though it was counting while your server was offline (rather than the timer then being 14 days).
  • Added disabled-worlds option to the config.yml which allows you to state in which worlds DragonEggDrop will not perform any functionality
  • Removed the former deprecation on /kill. This command is now properly supported and need not be confirmed
    • It is still ill-advised to use this command to get rid of the dragon, but it at least won't break things now
  • Update bStats from 1.7 -> 2.2.1
  • Compile and make use of ChocoCommons, a collection of common features for Choco's plugins
  • Fixed open_ended_helix not being used as a default particle definition despite the console saying otherwise
  • Fixed potential NullPointerException a dragon template failed to load
  • Fixed NullPointerException when picking up eggs without a set loot table
  • Fixed various other possible NullPointerExceptions in areas otherwise uncertain
  • Fixed the %dragon% placeholder not being injected into reward commands
  • Fixed the %dragoneggdrop_respawn_time% placeholder occasionally not being injected properly
  • Fixed particle equations not being properly centered
  • Fixed being unable to start a respawn process if a dragon was removed by /kill (or some other 3rd party means)
API Changelog
  • Added nullability annotations throughout the entire project
  • A lot of utilities were moved from wtf.choco.dragoneggdrop.utils to wtf.choco.commons
----------, Mar 7, 2021

Changelog
  • Added /dragonparticle command to test particle equations without having to kill a dragon
    • Syntax: /dragonparticle <particle> [x y z] [world] [startY]
    • Permission: dragoneggdrop.command.particle, default op
  • Dragons with no particles defined will now just immediately spawn loot (as they have no particle animation to wait for)
  • Adjust the size, distribution and count of the ball particle shape. Now more of a ball than a line
  • The %dragoneggdrop_dragon% placeholder (and its world override) will now display the template to be respawned during a countdown if no template is active in the end
  • Fixed NullPointerException on dragon death if particles is not set in the template
  • Fixed the default ball particle effect playing at the incorrect coordinates when not played at (0, 0)
  • Fixed the %dragoneggdrop_slain_dragon[_world]% placeholder not working as intended
  • Fixed slain dragon placeholders not working after a server restart
  • Fixed %dragon% placeholder not being applied to dragon eggs collected in the end (i.e. with a torch and gravity, or a piston)
----------, Feb 7, 2021

BE SURE TO UPDATE YOUR CONFIGURATION FILE
Some options were relocated and will use plugin-defined defaults if you do not update your config.yml

Default config file: https://github.com/2008Choco/DragonEggDrop/blob/master/src/main/resources/config.yml

Changelog
  • Completely overhaul the death particle system! Death particles may now be defined by piecewise functions in JSON files under the particles directory
    • Removed the Particles section from the config.yml
    • Added a new particles option to every dragon template. The value is the name of the json file (without the .json extension) of the particle effect to use. Example: particles: "helix"
    • Each JSON file defines an array of equations which will be selected under a set of conditions, as well as arguments provided to the particles themselves
    • Default particle equations for ball, helix and open_ended_helix are generated by default, as well as possible_conditions.json to demonstrate all the possible conditions
  • Restructured the announcement messages for dragons in the config.yml:
    • Added a new configuration section, respawn-messages
    • Removed announce-messages and announce-message-radius. Replaced with respawn-messages.messages and respawn-messages.radius
    • Added respawn-messages.condensed to change the format of the %dragoneggdrop_respawn_time% placeholder to use single-letter suffixes (i.e. 1w instead of 1 week)
    • Added respawn-messages.omit-time-units, a list of time units to omit from the %dragoneggdrop_respawn_time% placeholder
  • Removed lightning-amount, replaced with new category, lightning.amount
  • Add lightning.damage-entities configuration option to determine whether the spawned lightning will inflict damage to nearby entities
  • Update Placeholder API 2.10.8. If you have not yet updated, consider doing so
  • Smarter tab completion for time units in /dragonrespawn
  • A warning will now be displaying when attempting to kill the dragon with the /kill command. Confirmation is required. This is not a supported way to kill the dragon...
  • Fixed tab completion displaying subcommands to which players do not have access
  • (#35) Fixed error tracking player damage
  • Fixed malformatted JSON in default loot tables
  • Fixed potions not loading correctly from loot tables
  • Fixed custom_model_data not being loaded from loot tables
API Changelog
  • DragonTemplate is now immutable. Added DragonTemplateBuilder instead to construct instances
  • Renamed the root package from com.ninjaguild to wtf.choco
----------, Feb 3, 2021

As I am writing this release, I am away for personal, mental-health reasons. I apologize for not responding to those seeking support, though this time to myself is much required. In such time, I have focused a lot of my time into updating my resources, DragonEggDrop included. Another major release is in the works, but until such time, changes in this minor release are as follows:
  • Clicking one of the templates in chat from /dragontemplates will now suggest a /dragonrespawn start command for that template (if the player has permission to do so)
  • Added a dragoneggdrop.overridecrystals permission node. Players with this permission will be able to respawn the ender dragon using end crystals regardless of whether it's been disabled in the configuration file.
    • This permission node is NOT given by default, even to players with operator status. It MUST be explicitly set with a permission plugin
  • Re-add the %dragon% placeholder for loot tables as a means of more specific context
    • It is advised that you update your loot tables to use this placeholder instead of %dragoneggdrop_slain_dragon% where possible
    • Default loot tables have been updated to use it instead of the PAPI placeholder
  • Loot tables may now define damage and enchantment levels as objects to set a min and max value (much like you can with amount)
    • The example loot table has been updated accordingly
  • Improve performance of particle animations after the dragon has been killed
  • Improve the comments in the default config.yml. They are now more descriptive of the available default options
  • Fix item loot generation preferring lower (minimum) amounts more than upper (maximum) amounts
  • Fix /dragontemplate <template> generateloot using placeholders for previous dragons (see above, use %dragon% instead)
  • Fix dragoneggdrop.commands.* not being properly defined
  • Fix dragoneggdrop.command.reload not being recognized by permission plugins
  • Fix development versions of DragonEggDrop not being clearly labeled (most won't notice this change - you will be using a release. This is mostly for testing purposes)
  • Fix NullPointerException when generating a loot table that can generate air
  • Fix Photon not being listed as a contributor to DragonEggDrop (Sorry!)
  • Other miscellaneous internal changes and relocations
    • API: PortalCrystal has been moved from com.ninjaguild.dragoneggdrop.api to com.ninjaguild.dragoneggdrop.world
    • API: A DEDConstants class was added containing useful String constants for permission nodes, configuration paths and template configuration paths
----------, Aug 3, 2020

  • Add a /dragontemplate <template> generateloot argument to generate the loot table of the specified template. A chest will be placed at the feet of the player running the command.
    • Permission: dragoneggdrop.command.template.generateloot, default to op players
  • CAUTION: Changed permission nodes for commands
    • dragoneggdrop.reload -> dragoneggdrop.command.reload
    • dragoneggdrop.respawn -> dragoneggdrop.command.respawn
    • dragoneggdrop.respawn.stop -> dragoneggdrop.command.respawn.stop
    • dragoneggdrop.respawn.start -> dragoneggdrop.command.respawn.start
    • dragoneggdrop.respawn.template -> dragoneggdrop.command.respawn.template
    • dragoneggdrop.template.list -> dragoneggdrop.command.template.list
    • dragoneggdrop.template.info -> dragoneggdrop.command.template.info
  • Update to Placeholder API 2.10.7 (versions before this will no longer work)
  • Players that do not have permission for a command will no longer see them suggested
  • /dragonrespawn template get argument has been removed. /dragonrespawn template [world] will suffice (where world is optional)
  • Fix NullPointerException under rare conditions where a 1.15.2 world was converted to 1.16.1
  • Fix loot table item lores and names not translating colour codes
  • Fix enchanted books not properly applying the "enchantments" tag in loot tables
  • Fix use of deprecated hover text component API
  • Fix NinjaStix not being listed as a project contributor in the plugin's description file
  • (#33) Fix various placeholders not working if PAPI was not installed, despite being a soft dependency
----------, Jul 30, 2020

NOTE: YOU MUST UPDATE YOUR SERVER IN ORDER TO USE THIS VERSION OF DragonEggDrop!!! IT USES NEW API ADDED RECENTLY AND WILL NOT WORK ON SERVERS VERSION 1.15.2 RELEASED BEFORE March 24th 2020!!!

Changelog
Because the changelog is as large as it is, changes have been broken up into individual categories

Core Changes
  • Depend on Spigot API instead of Bukkit. This plugin will no longer work on CraftBukkit servers. Sorry.
  • After I have made a successful change to Bukkit, DragonEggDrop should now be mostly future-proof! 1.15.2+ support from this point forth. Therefore, YOU MUST UPDATE YOUR SERVER IN ORDER TO USE THIS UPDATE!!!!!
  • Restructured and cleaned up the entire project. Codebase has changed significantly. Developers, any plugins depending on DragonEggDrop will break! Please review the Javadocs
  • Replaced all instances of "2008Choco" to "Choco"
New Features & Removals
  • Added bStats Metrics. These can be disabled in the configuration file by setting "metrics" to false
  • Overhaul the loot system. Dragon templates now pool their loot from loot tables.
    • Default loot tables can be found in the DragonEggDrop/loot_tables directory
    • Proper loot tables have been created by default which hopefully make sense. Of course you may change these or create your own templates. No more sticks!
      • These loot tables take inspiration from Minecraft's vanilla loot table system (with changes to accommodate for DragonEggDrop's specific needs). The default loot tables should give you an idea of how they work. Copy/paste does wonders! See the DragonEggDrop Wiki for information on how they work.
    • Dragon templates have changed significantly (mostly to accommodate for changes in the new loot system):
      • Removed egg-spawn-chance, egg-name and egg-lore
      • Removed chest-spawn-chance, chest-name, min-loot and max-loot
      • Removed death-commands
      • Removed announce-respawn
    • loot has been changed to value as a string rather than a configuration section. This value should be the name of the loot table to use (as found in the DragonEggDrop/loot_tables directory - without the file extension)
    • Dragons that do not specify a loot table (or if the loot table is invalid) will generate a dragon egg as per vanilla behaviour
  • Added spawn-announcement, a list of strings to send to players when the template has been spawned. If not set or empty, no message will be sent
  • Added an additional (optional) argument to the /dragonrespawn command to specify which loot table to use when respawning the next dragon
    • /dragonrespawn start [time] [world] [template] [loot_table]
  • Added a damage history framework. Damage history for the dragon may be queried by developers, though for server owners this may be used with placeholders!
  • Added support for PlaceholderAPI. The following placeholders are supported:
    • %dragoneggdrop_dragon%: The formatted name of the dragon currently being faught
    • %dragoneggdrop_dragon_<world>%: The formatted name of the dragon currently being faught in the specified world
    • %dragoneggdrop_slain_dragon%: The formatted name of the dragon that was most recently slain
    • %dragoneggdrop_slain_dragon_<world>%: The formatted name of the dragon that was most recently slain in the specified world
    • %dragoneggdrop_respawn_time%: The formatted time remaining for the dragon to respawn
    • %dragoneggdrop_respawn_time_<world>%: The formatted time remaining for the dragon to respawn in the specified world
    • %dragoneggdrop_top_damager%: The name of the player that's done the most damage to the current dragon
    • %dragoneggdrop_top_damager_<position>%: The name of the player that's done the x most amount of damage to the current dragon (i.e. position 1 = top damage, position 2 = second most damage, etc.)
    • %dragoneggdrop_top_damager_<position>_<world>%: The name of the player that's done x most amount of damage to the current dragon in the specified world
    • %dragoneggdrop_top_damage%: The damage done by the top damager to the current dragon
    • %dragoneggdrop_top_damage_<position>%: The damage done by the player that's done x most amount of damage to the current dragon
    • %dragoneggdrop_top_damage_<position>_<world>%: The damage done by the player that's done x most amount of damage to the current dragon in the specified world
    • All the above may be used in any configurable message in DragonEggDrop's config.
  • Added a announce-message-radius config option to set the radius of action bar announcement messages. This may be used to prevent players on end isles from receiving the message. All players in the end will receive the message by default (-1)
  • Removed the /dragontemplate [template] edit command. Due to the nature of loot pools, this would have been difficult to implement
Quality Of Life Changes
  • End crystals may now be destroyed by creative mode players while they are being created in an automatic respawn process. In such a situation, the respawn will cancel.
  • A fizz sound will now be played when a player attempts to manually respawn the dragon if allow-crystal-respawn is set to false
  • End crystal items are now given an outwards velocity when a player attempts to manually respawn the dragon if allow-crystal-respawn is set to false. This to prevent the items from falling into the portal
  • The /dragontemplate <template> info command will now show the exact % chance to spawn a dragon using the specified template (rounded to two decimal places)
  • /dragontemplates and /templates may now be used as short forms for /dragontemplate list and /template list. The former two commands still function as expected (i.e. you can still do /dragontemplates <template> info)
  • /dragontemplates now uses hoverable messages to show per-template information when its name is hovered over in chat
  • Command feedback is now more detailed and consistent (as such, removed /dragoneggdrop help - Bukkit's /help dragoneggdrop will do the same)
  • More information is logged to the console on startup for debug & administrative purposes
Bug Fixes
  • Fixed non templated dragons remaining non templated (#21 on GitHub)
  • Fixed dragons respawned using end crystals not being templated
  • Fixed right clicking the portal not functioning as intended. It will now show the player the time remaining for the dragon to spawn
  • Fixed the time not being formatted properly in the message sent when right clicking the portal
  • Fixed the time parsing message not properly pluralizing. "1 minute" (& similar units) will no longer be plural
  • Fixed the respawn action bar message not listing "weeks" or "days". Previously only "hours" were shown resulting in hundreds of hours
  • Fixed the error message not showing the correct argument if an invalid template was specified when executing /dragonrespawn
  • Fixed the /dragontemplate command tab completion suggesting view as the second argument despite /dragontemplate list being typed
  • Fixed a warning message being sent in the console on first generation of dragon templates
  • Fixed instances of allow-crystal-respawn not working as intended
  • Fixed infinite lightning spawning on the portal when loot is generated (hopefully...)
----------, Jun 1, 2020

  • Update to Minecraft 1.15.x (#26 by @OliPulse - Thank you very much!)
  • Drop support for Minecraft 1.14.x
  • Fix a NullPointerException when running /dragoneggdrop due to the updater not being initialized
  • Increase the update check timer from 30 minutes to 6 hours in order to be less intrusive
----------, Mar 5, 2020

  • Update to Minecraft 1.14
  • Drop support for Minecraft 1.13.0
  • Fix an IllegalStateException when running /dragoneggdrop due to the updater not being initialized
----------, Apr 30, 2019

  • Fix a NullPointerException on startup if dragon templates contained any loot without enchantments
  • Fix a rare NullPointerException thrown when generating dragon loot if, somehow, a dragon's name was invalid
  • Fix file-based template identifiers allowing the use of spaces rendering them inaccessible by command. Dragon template identifiers now use underscores in place of spaces
Thank you to SmallSansSerif for bringing these issues to my attention on my support Discord
----------, Dec 4, 2018

  • Added a /dragonrespawn command to better control how the respawn process works
    • /dragonrespawn <stop|interrupt|cancel> [world] will cancel any current respawn countdown either in the world in which the command is executed, or the specified world
    • /dragonrespawn <start> [time] [template] [world] will start a new respawn countdown for x amount of time (defaults to 5m) with the specified template (defaults to a random template) in the given world (defaults to the world in which the command is executed)
    • /dragonrespawn template get [world] will check which template will be spawned for the current respawn countdown
    • /dragonrespawn template set <template> [world] will set the next dragon to be spawned for the current respawn countdown
    • All of these commands have tab completion to make better sense of it all if you are confused
  • Command tab completion will now remove any suggestions that no longer make sense (i.e. /dragontemplate stwill now only suggest stop instead of all 5 options)
  • Item loot parsing is now MUCH more featureful. Far more options are available. See below for an example of all possible options (#14)
  • Update the version checker to that used in VeinMiner. More information is now provided
  • Dragon templates are now determined when the respawn countdown starts rather than when it finishes
  • Dragon egg loot should now be more consistent in the end (it will be properly named)
  • If the Particles.type configuration option is unknown, the plugin will now default to FLAME instead of shutting down entirely
  • Dropped support for any Minecraft version lower than 1.13.2
  • Miscellaneous formatting and code cleanup throughout the entire project
New Item Parsing Options:
Code (YAML):
loot:
  '1'
:
    weight
: 1.0
    type
: stick
    damage
: 1
    amount
: 1
    display-name
: '&bExample Item'
    lore
:
   - '&6Configure me'
    - '&6to any item'
    enchantments
:
      unbreaking
: 1
    banner-patterns
:
      bricks
: red
      bri
: purple
    book-data
:
      author
: 2008Choco
      title
: The Best Book Ever!
      generation
: original
      pages
:
     - "This is the first page of the book. Turn the page for an awesome surprise!"
      - "SURPRISE!"
    knowledge-book-recipes
:
   - "minecraft:crafting_table"
    leather-color
:
      r
: 255
      g
: 0
      b
: 255
    potion
:
      color
:
        r
: 255
        g
: 255
        b
: 255
      base
:
        potion-type
: speed
        extended
: true
        upgraded
: false
      custom-effects
:
        '1'
:
          effect
: speed
          duration
: 600
          amplifier
: 1
          ambient
: true
          particles
: false
          icon
: false
        '2'
:
          effect
: strength
          duration
: 300
          amplifier
: 2
          ambient
: false
          particles
: true
          icon
: true
    skull-owner
: 2008Choco
    fish-bucket-data
:
      pattern
: spotty
      pattern-color
: red
      body-color
: black
----------, Nov 23, 2018

  • Fixed a NullPointerException when throwing a dragon egg in the end before a dragon has been spawned since the last reset
  • Fixed some missing whitespace in default dragon templates
  • Fixed particles not showing from a distance, ruining the overall death effect of the dragon. Particles are now forcibly spawned for the death animation
  • Fixed a pseudorandom player being chosen as the target for dragon reward commands. The killer will now be selected as the feature implies
----------, Oct 11, 2018

! IMPORTANT
While this is a 1.5.0 release, it should be noted that there are two 1.5.0 versions; regular and legacy. Between the two versions, changelogs are identical aside from the fact that the legacy version supports 1.9.x - 1.12.x (will be housed on the legacy branch) and the regular version supports Minecraft 1.13.x which will remain on the master branch and be supported for the foreseeable future. Below are the common patch notes between the two versions.

The download button for this update will direct you to the regular 1.5.0 release (for Minecraft 1.13.x), but if you would like a version for Minecraft 1.9.x - 1.12.x, please see this release instead. These builds will also be linked on the main page at the top of the resource's description.

Alternatively, if you'd rather click a fancy link for the 1.13.x release of DragonEggDrop... knock yourself out I guess! https://github.com/2008Choco/DragonEggDrop/releases/tag/1.5.0

Changelog:
  • Fix an IllegalArgumentException thrown in the console when dragons are spawned outside of the end
  • Fixed issue #10. Malformed JSON in the default dragon templates
  • (#8) Added time suffixes for all time-related configuration options. For example, 2w3d12h10m15s = 2 weeks, 3 days, 12 hours, 10 minutes and 15 seconds. Default configuration values have been updated accordingly
----------, Oct 2, 2018

  • Fixed issue #5. NullPointerException when starting the plugin and "tempData.json" was empty
  • Fixed issue #7. NullPointerException if attempting to apply unsupported/unknown attributes to the dragon
  • Added a "death-commands" configuration option to execute commands as a reward for killing the dragon
    • %player% is a placeholder which gets replaced by the name of a player that killed the dragon
    • %dragon% is a placeholder which gets replaced by the name of the dragon that was killed
  • API: Added methods in DragonLoot to reflect the addition of death commands
----------, Dec 13, 2017

  • All commands now have argument tab completion:
    • "/dragoneggdrop" will now tab-complete "help" and "reload"
    • "/dragontemplate" will now tab-complete all loaded templates as well as their subsequent command arguments
  • Dragon templates now support attributes! For a list of supported attributes, see Spigot's Attribute List and Minecraft's Attribute Wiki for a detailed description. More information on how to implement them can be found on the wiki, though default templates will come with attributes as well
    • NOTE: Not all attributes are supported. This is due to limitations put in place by Mojang
  • Fixed a NoSuchMethodException when loot chests are spawned after a dragon's death
  • Fixed "/dragontemplate" not properly searching for templates, rendering the command useless
  • Fixed a bit of outdated information in the "/dragoneggdrop help" command
----------, Sep 1, 2017

  • Added an "allow-crystal-respawns" configuration option (true or false) to toggle whether players can spawn a dragon using crystals or not. If set to false, any placed crystals will be dropped as items
  • Added a "strict-countdown" configuration option (true or false) which if set to true will stop any running respawn countdown if a dragon is manually spawned in the end
  • Fixed issue #4. Reset any crystal states upon entering the end
  • Fixed the end occasionally thinking that a respawn was in progress when one was not
  • Fixed infinite lightning strikes and no chest loot generating due to a change in the server code on August 5th. See this post for more details
  • Fixed template identifiers not being registered properly for files. Listed and registered templates with the ID "yml"
  • Fixed respawn countdowns starting when joining the end even if a dragon had already been spawned
  • Fixed pink and solid boss bars not updating and instead using the previously spawned Dragon's boss bar
  • Fixed dragon loot not spawning properly if the server was reloaded (This was added in BETA3, I just forgot to mention it in the changelog)
  • API: Removed the (unused) "prevKilled" boolean from the DragonDeathRunnable constructor
  • API: Added a PortalCrystal enum to assist in the management of crystals around a portal
  • API: Added a RandomCollection#contains(Object) method
  • API: Added a DEDManager#registerTemplate(DragonTemplate) method to add custom dragon templates programmatically. Apparently, I had forgotten to add one of these previously.
----------, Aug 31, 2017

  • DragonEggDrop's data is a lot more encapsulated and secure from external modification (developers, see API changes)
  • Dragon loot should now spawn properly per-world. There was a chance that the wrong loot would be spawned
  • Dragon templates are now identified using a unique identifier. This should not change much in game, though this further supports templates added programmatically :)
  • Action bar messages will no longer be displayed if the "announce-messages" configuration option is empty (i.e. announce-messages: [])
  • API: Removed EndWorldWrapper#setRespawnInProgress(boolean). This is now handled internally
  • API: Removed DEDManager#setDragonBossBarTitle(). This method was unused
  • API: DEDManager#setCurrentBattle() and DEDManager#getCurrentBattle() have been removed
  • API: Added EndWorldWrapper#setActiveBattle() and EndWorldWrapper#getActiveBattle(). Replaces the aforementioned removed methods
  • API: EndWorldWrapper and DragonLoot constructors are now protected. Should not be instantiatable
  • API: DEDManager#getWorldWrappers() now returns an immutable Collection
  • API: DragonTemplates now require a String identifier (for those that do not specify a file)
  • API: Made stricter requirements on null or invalid parameters for most methods and constructors
  • API: Fixed a typo in DragonTemplate#setSpawnWeight(). Was #setSoawnWeight()
----------, Aug 25, 2017

  • Added various permission nodes for the /dragontemplate command (I may have forgotten these...)
  • Added a "data" option in the dragon templates loot configuration to allow for items with data values (damage was not working properly, but should work for items such as damaged weapons). "data" will represent numerical data values on items (i.e. skull with a data value of 4 will result in a dragon skull).
  • Removed the dragoneggdrop.addloot permission node (as it is now unused)
  • Removed the "countdown-across-world" configuration option. It was causing too many issues. This value is now indefinitely set to true
  • Restructured existing permission nodes to include parent permissions! See the BRAND NEW Permissions Wiki for more detail
  • Fixed the "enchantments" configuration value for dragon template loot not working properly
  • Fixed countdown timers occasionally bugging out and not working at all resulting in the dragon not spawning until the server was reset (possibly? This may still arise. Let me know if it does)
  • Fixed the plugin always claiming that a new update was available even when there was not
----------, Aug 18, 2017

  • Dragons may now be created by making a YAML file in the "dragons" folder. They will be parsed, loaded and used when a dragon is spawned in the end! (Examples are provided by default)
  • Added a "/template" command containing a few useful features for the new dragon templates
  • Reorganized the package structure a lot, and removed a few unnecessary classes
  • Fixed potential NullPointerExceptions if no loot was loaded
  • Removed a bit of debugging code to do with particle shapes (i.e. "Now Using Open-Ended Helix")
  • Removed unnecessary runnables and handled them elsewhere. May improve efficiency
  • Removed the use of the "loot.yml". You may delete this from the file system as it will not be used
  • Removed the "/dragoneggdrop addloot" subcommand in place of "/template edit addloot"
  • API: Added a new DragonLoot class to manage loot for all dragon templates
  • API: Removed all methods / classes related to LootManager and LootEntry. Central loot management was not needed anymore
  • API: All DragonTemplate fields contain setters that may optionally update the template files
  • API: Added a bunch of methods to various different classes:
    • static RandomCollection#copyOf(RandomCollection) - Copy a random collection
    • RandomCollection#stream() - Create a Stream on the values of the collection
    • RandomCollection#size() - Get the amount of values in the collection
    • RandomCollection#toCollection() - Return a Collection containing all values in the RandomCollection
    • DragonTemplate#getLoot() - Get the loot handler for the template
    • DEDManager#clearTemplates() - Clear all loaded templates from the manager
----------, Aug 16, 2017

  • Fixed #4. The respawn process no longer randomly stops. The plugin will now attempt to autocorrect this mishap
  • Cleaned up and further improved a little bit of outdated code
  • Note to all developers! Javadocs are now available! You may find them here!
  • API: BattleStateChangeEvent now correctly uses the DragonBattle wrapper rather than Object
  • API: Potentially broke many plugins that use the versions package for DED... sorry about that. Moved many packages!
  • API: Removed deprecated methods from the NMSAbstract class (those mentioned in 1.3.1)
----------, Jul 28, 2017

  • Added support for Minecraft 1.12! Do not worry, versions 1.9+ still do work as per usual
  • Fixed issue #3: Infinite loop that causes the server to crash when loot chests are set as the reward
  • Fixed a few exceptions that were left over from previous versions
  • Fixed a longstanding bug that prevented the dragon from respawning when joining the world
  • Fixed action bar broadcasts being off by 1 and displaying ghost times (i.e. "Dragon respawns in blank")
  • Fixed potential memory leaks due to storing World instances in the EndWorldWrapper
  • API: Added a bit more documentation to places that were previously lacking; (ParticleShapeDefinition, EndWorldWrapper)
  • API: Removed all instances of "Object" from the NMSAbstract and replaced it instead with a wrapper, DragonBattle.
  • API: Deprecated a bunch of methods including:
    • NMSAbstract#setDragonBossBarTitle(String, Object) -> DragonBattle#setBossBarTitle(String)
    • NMSAbstract#setBattleBossBarStyle(BarStyle, BarColor) -> DragonBattle#setBossBarStyle(BarStyle, BarColor)
    • NMSAbstract#getEnderDragonFromBattle(Object) -> DragonBattle#getEnderDragon()
    • NMSAbstract#respawnEnderDragon(Object) -> DragonBattle#respawnEnderDragon()
    • NMSAbstract#getEndPortalLocation(Object) -> DragonBattle#getEndPortalLocation()
  • API: All methods that previous passed / returned Object methods now pass / return DragonBattle instances
----------, Jun 29, 2017

  • Everything about DragonEggDrop is now separated per End world (i.e. multiple world support!)
  • End portal locations are now relative to their location specified in their NBT tag
  • Shift-clicking on the End portal now displays how much time is left until the dragon respawns (If at all)
  • The "egg-name" and "egg-lore" configuration options now have a placeholder, "%dragon%", which will be replaced with the previous dragon's name
  • The "announce-messages" configuration option now have a placeholder, "%formatted-time%", which will be replaced with a formatted timestamp (i.e. "10 minutes, 3 seconds") - "%time%" still exists for those that prefer seconds
  • Added a "countdown-across-world" configuration option to set whether countdowns will persist across world-changes (They will run in the background whilst no one is in the world / online) - The dragon will not respawn until a Player is in the world, even if the timer hits 0
  • Fixed invulnerable end crystals randomly staying on the portal after respawning the dragon
  • Removed unnecessary code that was left from previous versions
  • API: EndWorldWrapper classes are now used to hold End world instances
  • API: Added a DEDManager#getWorldWrapper(World) method to get an EndWorldWrapper object from an end world
  • API: Added an NMSAbstract#getEndPortalLocation(Object) to get the location of the portal. "Object" being an instance of EnderDragonBattle
  • API: Added a RespawnRunnable#getTimeUntilRespawn() method to get how much time remains until a dragon respawns
----------, Mar 11, 2017

  • Rewrote the dragon respawn code to be much more efficient (Only a single runnable, compared to the 5 created previously)
  • Fixed the bar colour/style defaulting to red and segmented_12. They now default to pink and solid as per usual
  • Fixed awkward data parsing in the "dragon-names" configuration option. Whitespace between the "=" shouldn't be much of an issue anymore
  • Fixed the dragon's name displaying "name=Dragon Name" if that was the only value present (Such as the case of "Endy"). See here for example
  • Fixed dragon names not reloading properly when executing /ded reload
  • Fixed the "Particles.type" option not being checked upon startup
  • Fixed #2: If a dragon is present in the world when the countdown finishes, players will be warned. See here for example
  • Changed the author name in the plugin.yml to my name (It's my fork :p). PixelStix is still credited in the "/ded" command execution as "Original Author"
----------, Feb 7, 2017

  • Added a "perform-update-checks" configuration option to toggle the update checker
  • Replaced the "announce-color-one" and "announce-color-two" options with a fancier, and more configurable, "announce-messages" option! See below for updated usage
  • Fixed "join-respawn-delay" and "death-respawn-delay" configuration options not updating with /ded reload
----------, Feb 5, 2017

  • Changed the way "dragon-names" parses its data, and it now permits the ability to set the boss bar style and colour
  • Changed the default configured values to be more colourful and stylish :D
  • Fixed the Ender Dragon not respawning after death even if configured to do so
  • API: Removed a bunch of methods from DEDManager including #setDragonBossBarTitle(String, Object), #getEnderDragonBattleFromWorld(World) and #getEnderDragonBattleFromDragon(EnderDragon). Use NMSAbstract instead
  • API: Added a DragonTemplate class to allow developers to add their own dragon templates
----------, Feb 5, 2017

  • The predefined "OPEN_END_HELIX" particle shape no longer forces 6 particle streams. You may use however many streams you would like
  • Fixed a bunch of NullPointerExceptions being thrown and breaking the plugin entirely
  • API: Noted in the Javadocs for BattleStateChangeEvent#getDragon() and #getDragonBattle() that they can return null
----------, Feb 2, 2017

  • Separated the "respawn" configuration value into "respawn-on-join" and "respawn-on-death" (You will have to add these to your configuration file manually). See below for the new configuration file
  • Fixed the "chest-spawn-chance" configuration value having 1 / 100th of its configured value
  • API: Added a new "BattleState" enum containing the various states of the Ender Dragon battle
  • API: Added a new BattleStateChangeEvent to allow developers to listen for various state changes during the Ender Dragon battle
  • API: Added a #getEnderDragonBattle(Object) method to the NMSAbstract interface to get the Ender Dragon associated with a specific EnderDragonBattle object.
----------, Feb 1, 2017

  • Updates are now automatically checked asynchronously (your server performance shall not suffer :D) every 30 minutes rather than only once when the server starts up. Online OP'd players will be notified
  • Added a little reminder to the /ded command if there is a new version available
  • Removed the neg function, as you could accomplish the exact same thing with "-3" (for example)
  • Added a bunch of new equation functions including:
    • abs: Get the absolute value of its operand (i.e. abs(-2) results in 2)
    • log: Get the log base 10 value of its operand (i.e. log(10) results in 1)
    • csc: The reciprocal of sinus, cosecant. (i.e. csc(180) results in -1.2482)
    • sec: The reciprocal of cosine, secant. (i.e. sec(180) results in -1.6709)
    • cot: The reciprocal of tangent, cotangent. (i.e. cot(180) results in -0.7469)
  • Cleaned up a bunch of the particle code to be more organized in a fancy little ParticleShapeDefinition class
  • Fixed potential NullPointerExceptions when using variables that are not supported
  • Fixed the "Particles.type" configuration option not changing the particles from FLAME
  • Fixed a couple memory leaks that were not maintained in previous versions
----------, Jan 31, 2017

For a more in-depth description of Particle Equations, please see the GitHub Release
  • Completely rewrote the Particle system for Ender Dragon death (configuration file changed for this)
  • Redid the particle portion of the configuration file (thus requiring a configuration version bump from 1 -> 2) - Please backup your configuration files JUST IN CASE
  • Allowed the ability to write your own custom particle equations! Variables and placeholders are available in the equations, which will be explained down below. Please see this section if you plan on writing your own equations)
  • Wrote a couple pre-defined particle effect equations if you're not super mathematical, (can be specified in configuration file), including "ball", "helix", and "open_end_helix" (default), which can be seen in the above gif
  • Added an update checker which will tell operators if a new version is available on join
  • Added more default names for Ender Dragons (I thought I would get creative)
  • Fixed dead Ender Dragon's not respawning if a player leaves an end world and enters another.
----------, Jan 30, 2017

Resource Information
Author:
----------
Total Downloads: 8,799
First Release: Jan 29, 2017
Last Update: Mar 7, 2021
Category: ---------------
All-Time Rating:
60 ratings
Find more info at choco.wtf...
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings