Releases: 2008Choco/DragonEggDrop
Minor fixes for the previous release
Overview
Thank you to those using DragonEggDrop in Minecraft 1.13, I appreciate the feedback I've received so far. It's been mostly positive which means I've done a decent enough job. With that being said, there were still some issues that arose and this release aims to address common concerns. Please be aware that these fixes are only available to those who have updated their server to 1.13.1. No 1.9.x - 1.12.x build has been made for this version as the changes were not much significant to lower versions of DragonEggDrop.
! IMPORTANT
This version will not support Minecraft 1.9.x - 1.12.x. If you are looking for the 1.9.x - 1.12.x version, please see release 1.5.0-legacy. Upon the coming of 2019, the legacy
branch and builds will be unsupported entirely. At which point I ask you to please consider updating your server.
Do also be aware that this build will only work on Spigot 1.13.1. It does not support Spigot 1.13. Please consider updating your server before running this build.
Changelog
- 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
Small Fixes & Command Rewards
Overview
First and foremost, I'd like to apologize for the lack of updates on DragonEggDrop recently despite the number of bug reports I've received. The long and short of it is due to the fact that I'm in university studying as a Software Engineer and have found little time to build a proper release. That being said, this is a small release that addresses some of the concerns that were brought to my attention and adds a feature that was long requested. I hope this satisfies the requests and resolves the issues from the previous release that prevented some of you from running the latest version.
I will be going on Christmas break this Friday and may be unable to release any updates if required. For those of you that celebrate, Merry Christmas, Happy Hanukkah, or whatever you celebrate, I hope you have happy holidays. Spend some time with your family. Expect a release when Minecraft 1.13 has been completely released 😄
Changelog
- 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
Fixes & Template Attributes
Overview
Changelog
- 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
Final Fixes & 1.4.0 Release
Overview
After about a whole month of development, 1.4.0 is finally ready for a proper release. It's been a long time update with TONS of changes in the backend of the code to further structure the project and veer away from loads of spaghetti code. Before the betas, the code for this project was pretty much hanging on by a thread. As of this release, most of the backend code has changed to accommodate for more complex and unique features that the plugin would not have been able to previously support.
Unfortunately, for those that trusted me to run the 1.4.0-BETA3, there were numerous bugs that essentially rendered the plugin unusable due to some changes to the server code after 1.12.1. This release should fix many of the concerns that were brought to my attention and be stable enough for production-ready servers :) I appreciate the support from everyone coming to me with issues over the past month. If there are any other issues that arise in this version, do not hesitate to create a ticket or contact me on the discussion thread if you do not have access to a GitHub account.
Changelog
- 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.
Various Fixes & API Changes
Overview
Yet another beta release is in our midsts and it contains some juicy fixes / features that were missed in previous versions. Unfortunately, this release does contain a few known issues, but it's a beta, this is to be expected. This update comes with mostly a few fixes for issues presented in previous versions of the plugin, but a few large and notable API changes were made that needed to be released as soon as possible.
For any developers accessing this plugin's API, please see the Javadocs for information on methods, constructors, fields or any other features that may be of concern.
Changelog
- 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()
Known Issues
- Unfortunately, issue #4 is still alive and unfixable. Seems to only happen to some users. If you have yet to experience this issue, please comment on the ticket and let me know.
Generic Bug Fixes
Overview
Thank you to all of you that decided to participate in the BETA1 test for DragonEggDrop. The test was extremely successful due to the number of users that reported issues. Once again, I would like to thank those risking stability to help improve this resource! This update brings fixes to various issues brought upon in BETA1. Unfortunately, there are still numerous issues that need to be tended to and this will also be another beta until everything is as stable as I would like them to be. However, this version is certainly significantly more stable than the previous beta version, therefore I would much appreciate your assistance once again in informing me of issues. If you experience ANY issues, please create an issue in the Issue Tracker so I may see it
Also, as of this release, I have been working on this project's official wiki page! There are so many advanced yet undocumented features in the resource that a centralized wiki page was desperately needed. As of drafting this release, not all pages have been completed. There are still a couple left to do, but a lot of the important ones have been updated to reflect changes in the most recent version of this resource. You may view the wiki by clicking the button at the top of the page titled "Wiki", or by clicking here
DISCLAIMER: Use this version at your own risk! Please report bugs as soon as possible so they may be fixed
Changelog
- 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
Custom Dragon Templates!
Overview
This update has been a while in the working and even at this point, I'm not certain if everything is up-to-par and fully functional. Due to such uncertainty, this release will be labeled as "BETA" and bugs should be expected. A lot of the code base has changed from 1.3.2 to 1.4.0 so things may not work properly. Now is worth noting that if you experience ANY issues, please create an issue in the Issue Tracker so I may see it. The next few versions may be beta builds to fix bugs over time and add a few more new features.
DISCLAIMER: Use this version at your own risk! Please report bugs as soon as possible so they may be fixed
Changelog
- 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) - Suggested by KnifeKat over on SpigotMC
- 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
Creating a Dragon
The main goal for this update was to allow for custom dragons and spawning customizable loot for each and every individual dragon. By default, there are 12 dragons with a few preset values. The loot for some of the dragons only contains sticks with examples on how you may configure the items and in what format they should be. To create your own dragon you may copy and paste or edit an existing dragon file (note that file names must not contain spaces):
When you open the copied file, you should see some configuration options similar to those below (evidently they will vary depending on which file was copied):
These options should seem rather familiar because they were originally in the config.yml and used as global configuration options for all dragons. These are now per-dragon and will be used individually. The only difference is the "loot" section which is a slight modification of the loot.yml. Here is a brief overview of each option:
dragon-name: The name of the dragon above the boss bar. Colour codes are supported
bar-style: The boss bar style. A list of all possible values may be found here
bar-color: The boss bar colour. A list of all possible values may be found here
egg-spawn-chance: The chance that a dragon egg will spawn on the portal
egg-name: The name to display on the egg. "%dragon%" is a placeholder that will be replaced with the "dragon-name" configuration option
egg-lore: The lore to display on the egg. "%dragon%" is a placeholder that will be replaced with the "dragon-name" configuration option
chest-spawn-chance: The chance that a loot chest will spawn in place of an egg. If an egg chance is also provided and both are successful, the chest will spawn loot as well as a dragon egg within the chest
chest-name: The name of the chest
min-loot: The minimum amount of loot capable of being generated
max-loot: The maximum amount of loot capable of being generated
announce-respawn: Whether to announce in chat that the dragon has respawned
spawn-weight: The weight that this dragon may spawn. Supports decimal values
loot: A list of all the loot. Each loot must be categorized with an arbitrary tag (i.e. '1', '2', '3', 'potato'). This is due to the limitation of YAML syntax
Once everything has been properly configured, start the server and the file will be parsed and loaded. If your server is already running, running "/ded reload" will also re-parse and load all templates from file. That's it! A new dragon was made!
Code Cleanup & Major Bug Fix
Overview
As of recently, people have been coming to me and bringing to my attention a long-standing bug in the project. After working with a couple of these users including @darth123321 and XxDawnsusxX on the Spigot forums, I concluded that this issue was due to a bug in the vanilla server code. Unfortunately, this is unfixable as I cannot patch with a mere plugin. However, although it may not be patchable, it certainly is something that does not happen frequently, therefore I may instead create a sort of "auto-correct" feature in the respawn process. While this bug has been rather longstanding, I'm glad to have gotten it removed.
I'd also like to take this opportunity to note that I have a few ideas brewing in my mind for another version sometime in the future. This all depends on how much time comes available to me as I've been extremely busy with university preparation. If I have time, expect a more aesthetic-based update in the near future 😉
Changelog
- 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)
Minecraft 1.12 Support and Bug Fixes!
Overview
As of late, many of you have been asking me when support for Minecraft 1.12 would be available. Well, the answer is now! I apologize for the delay in the update. I've been working extremely hard with school and various other projects and this one, unfortunately, fell to the bottom of my todo list. However, the time has come available to me after my high school graduation and I have updated everything and made things a little cleaner! This update's been a little bit in the works, so bear with me, I may have forgotten a few things in the changelog.
Do keep in mind, if there are any plugins that are using DragonEggDrop's API, it is extremely likely that you will need to update some code. There are no API breaks, (as far as I can recall), but there are a bunch of changes that resulted in various deprecated methods. You will see all newly deprecated methods and alternatives listed in the changelog below.
This version was not thoroughly tested. It was very lightly tested, so if there are any issues, please feel free to use the Ticket Tracker which will always be available to you. This is the preferred method of reporting bugs/issues or suggesting new features, but if you do not have a GitHub account, you're more than welcome to also post a reply on the discussion thread of the DragonEggDrop Revival resource page
Changelog
- 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
So many new features!
Overview
Yes, yes I know! It's been quite some time! Well over a month overdue on this update, but better late than never am I right? No? Alright I'm sorry. I've been rather busy with other projects, but I finally found time to finish up the update that's been in progress for about a month now. Trust, me there's some content in here that some of you have been asking me about for quite some time now. This update is so amazing that I decided to jump all the way to 1.3.0! I cannot guarantee that the feature you requested was implemented, and if that is the case, please feel free to create a ticket or send me a private message on SpigotMC, and I will be more than happy to see what I can do!
Anyways, let's get right into the changelog because trust me... it's a bit of a doozey. Just be aware, I may have missed something in the changelog! This update has been in progress for over a month now, so I most likely forgot something
Changelog
- 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