There was a bug in the GUIs on version 1.20.6 and later. The method I used to check the item being clicked was no longer valid. This has been resolved.
Changelog:
- added check for duplicate world UUIDs to import command (by MeltsLars)
- added check for players in unload command to prevent an unloading world from destroying the player instance (by MeltsLars)
- fixed PlaceholderAPI dependency implementation (by MeltsLars)
- updated plugin to API version 1.20.6
Return to Development
Hello all! First, I want to apologize for disappearing without any sort of notice. Long story short: I finished college and a lot of stuff has been changing in my life that has taken my focus. I'm finally getting back into my programming groove and am picking things back up.
So, here's what my future sorta roadmap looks like:
- remote economy system from Universes. Current implementation is terribly written, and it feels unnecessary.
- refactor and document Universes code
- finish Universe-Portals addon plugin
- start Whisp's TimTheEnchanter plugin rewrite
- finish Discord implementation plugin
Hello everyone!
This is a quick patch update that fixes an issue where inventories could get overwritten and mixed up when the plugin is used on BungeeCord connected servers. This issue mostly occurred when a player would switch servers and then would be sent to a different world upon return.
Inventories are now saved when a player leaves the game and are loaded when a player joins.
Other known issues:
- currently there is a bug with Universe-Nethers where portal nether and overworld portal coordinates are sometimes not correctly synced.
This is a small update. The UniversesPlaceholders.jar file created some confusion. This update simply edits the notes in the config for the prefix-chat option to explain how the feature works with PlaceholderAPI installed. The following paragraph was also hadded to the 5.0 update description;
Special Note for World Prefixes:
The UniversePlaceholders.jar is not a plugin. It should not go in the plugins folder. You only need it if you are using Placeholder API. If you are, put it in the PlaceholderAPI extensions folder. It may not work otherwise. If you are not using PlaceholderAPI this should not be an issue.
Hello everyone! This is a pretty major update to the Universes plugin that has been in the process of development for almost two years. (You can thank school for some of the delays). There is a lot, so I encourage you all to reread the overview page and watch the new update video after reviewing the changelog. If you have any questions, please come to my discord and ask:
https://discord.gg/pSBKafQ.
Feature Additions:
Universes:
- added per world and group economy
- added administrative economy commands and balance command
- added toggle to config to disable the Universes economy
- added economy-config.yml
- added the ability to use custom generators
- added the ability to provide a seed for a world to generate with
- added the ability to provide a group to add a world to on creation or import
- added the ability for Universes to register worlds created by other plugins
- added an option in config to disable Spawnify's respawn system to allow usage of other plugins or sources (i.e. Essentials)
- added support for Placeholder API, for world prefixes
- added the ability to grant players permission to use /ut and /us for only specific worlds
- added the ability to require users have permissions to enter specific worlds
- added config toggle and permission checks for the changes to /ut and /us
- added tab completion for all relevant commands
- added special tab completion for /ut and /us so only worlds a player has access to will appear in the list
- /universereload (/ur) now updates everything related to the plugin--all config options, groups, etc.
- added the ability to turn the player limit on and off per world (it is off by default)
Universe-Spawnify:
- added the ability to set respawn points per world or group
- added per world and per group bed spawns
- added a command to go to any world or group spawn (previous you could only go to the spawn for the world or group you were in)
Universe-Ends:
- updated the end portal handler to behave like vanilla Minecraft
- updated U-Ends to use the new data storage system
- added new config option to control end exit behavior
- U-Ends now also handles entities
Universe-Nethers:
- updated U-Nethers to use the new data storage system
Bugs fixed:
Universes:
- implemented the fix for the full world bug
Universe-Spawnify:
- Fixed a bug that allowed any player to use /universemodify
- fixed several bugs that caused respawning and teleporting errors
Universe-Nethers:
- fixed a bug in the nether portal handler that caused incorrect final calculations for destination when entering or exiting
the nether. Specifically, it would not find any pre-existing portals on the Y axis
- fixed erroneous handling of entities
- updated U-Nethers to use the new data storage system
Other Important Changes:
- completely overhauled the data storage system to move away from Databases, which are slow and ill suited to the file usage of Universes
- rewrote roughly 50-60% of the plugin code
- added comments to the config.yml
- completely restructured the groups.yml
- rewrote the plugin initialization process for the new storage system
- rewrote conversion command to make the storage transition easier
- added a permissions system to the changes to /ut and /us, and the new world entry permissions option
Special Note for World Prefixes:
The UniversePlaceholders.jar is not a plugin. It should not go in the plugins folder. You only need it if you are using Placeholder API. If you are, put it in the PlaceholderAPI extensions folder. It may not work otherwise. If you are not using PlaceholderAPI this should not be an issue.
No actual update. Simply a notice. PLEASE READ!
I don't know how many times I've asked at this point, but it's more than a few. If you encounter this bug where the plugin says a world is full when it is empty, as I asked before, run the /uinfo command and send me the details, send me logs as far back as the most recent start up, and then run the /urpc command.
Every single person that has reported this bug to me has done none of these things, only showing me the message in game. I have known of the bug since August. That message is also something I wrote to respond to normal situations, so it tells me nothing. I end up having to ask for all the information every time.
The logs. I AM FED UP WITH THIS! When I ask you for the logs, it is because I want to search for some specific debugging messages that I've put in. I don't want a snip that is just a Java stack trace. I don't want to see only the line where you ran the tp command. I want the
ENTIRE log so I can investigate. It's hard asking you all to search the logs for me because I'm not entirely sure exactly what I need you to find, or how far back from a certain debug message I need you to go. Every server log is different, so every appearance of the bug will be different.
If you experience this bug, PLEASE, do as I ask so I can resolve it quickly. It has persisted for long enough.
So, a couple people were having trouble with Spawnify's permissions. Turns out, I forgot to change the checks in the commands when I merged it with Universes. So, that's been fixed. Permissions should work correctly now.
Hello everyone!
Today I bring a small update. First, I addressed the "world full" bug a lot of you have been experiencing. Thank you to those who sent in screenshots of /uinfo and server logs to help me investigate when you had this issue. I have written deactivated code to change the way the playerLimit disabled state looks and works. However, I have left it unimplemented for the time being because I now know what why it is happening--the player counter is decremented to -1. However, I do not know why this is happening. So, before the new code is implemented, I have added a log statement that will will appear in console whenever the counter is decremented. If you encounter this bug, please send me your logs. With this statement appearing, I will be able to pinpoint exactly when the bug happens and what conditions cause it so I can properly fix it.
The second and final fix of this update is to Spawnify. For those that use it, you will find a new option in the config. If you want to use Spawnify, but still want players to respawn at, say, a spawn set with Essentials, you can toggle this new option and it will disable Spawnify's respawning system.
I also have an announcement to make! I have put together a small Discord server for everyone. It will (hopefully) be the new help and support home for all my plugins (even plugins not available yet on SpigotMC). Bug reporting will be on the server until I can set up issue tracking on GitHub. Not only that, but I will stream dev work from time to time and host some fun stuff like game nights. You all should check it out:
https://discord.gg/pSBKafQ
Hello all,
So, as the title says, we've got some minor bugs fixed.
The first one was not so much a bug as it was a poorly implemented feature in Universe-Spawnify. Essentially, with the plugin installed, you would be sent to the hub location every time you joined the server. I have added a config option so this can now be toggled. It is off by default.
Second, some of you may have noticed a message whenever you used a nether or end portal. "Portal event triggered." That was a debugging printout I accidentally left in, and have now removed.
Third, many of you may remember the feature from Universe-Nethers 1.0 where you could return to your nether entry portal from anywhere in the nether. I removed that because I didn't think it was necessary anymore. Turns out a lot of you guys actually liked and used that feature. So, I have added it back. You will find an option in the Universes config to enable it.
KNOWN ISSUES:
- There seems to be a bug that many of you have experienced when creating a world where Universes essentially completely breaks. Try as I might, I have not been able to reproduce this. So, if this happens to you, please send me a note or a message on the discussion board here detailing what brought you to that point, the server logs with the error messages, and the server version you are running (/version) and its distribution (i.e. Spigot, Paper, or Sponge). The only fix I have at this point is to restart the server after you've given me your bug report.
- The player counters screwing up and causing "Sorry, that world is full" to be returned when trying to enter a world. There is a somewhat brute force fix in place for this as well as a a command to get a debug printout of the world data for when this happens. If you run into the bug, do the same as for the previous one, but instead of the server version, send me what you see in the /uinfo command. I am pretty sure this happens when the player counter is somehow reduced to -1, which is then equal to the value used to denote the counter being disabled. When the plugin then asks the world if it is full, the result comes back true. However, I don't know why this is happening.
Please note, I am doing everything I can to pinpoint and resolve these bugs and improve the plugin. But I am also a Junior in college, so my time is fairly limited. I can't devote entire days to investigating issues like I could during the summer. So, when you guys experience these bugs, when you provide everything you can to me, finding the bug goes a lot more quickly. So, when you leave a review stating that something wasn't working and you get an error message, that does nothing to help fix the issue. Your reviews should be about what you like and dislike about the plugin and what you think could make the plugin better. Please, PLEASE report bugs to me in a note or discussion so I can actually communicate with you and resolve issues. The people that have left bug reports in the reviews never respond to me when I reach out to them and ask for more information, and it really aggravates me because I know there is a bug now, but I have no idea how to reproduce it, nor any inkling of where in the near seven thousand lines of code the bug could be happening.
Thank you for (hopefully) listening, and I hope you continue to enjoy the plugin.
So, I made a small goof. In the world settings GUI, when the allow animals option was toggled, I called the function to enable animals on accident. This has been fixed.
Very brief update.
Hello everyone!
This is a small, but surprisingly feature-packed update. So, let's get into it.
Universes
First are some tweaks to the Universes core.
- First, a bug fix. So, when Universe-Nethers and Universe-Ends are installed, the /uc command is supposed to automatically create a nether and end world for each created overworld. I had a small typo in my code that caused the plugin to use the wrong instance of the Generator class, thus the worlds were not actually generated. This has been fixed.
- Tab autocomplete is now fully implemented! Have fun not needing to remember which things go where when creating worlds!
- The /um and /uo commands have had some significant changes. Up until this point, all configuration options could be changed via the command as well as the GUI. I have decided to remove that ability in favor of using only the GUIs. First, the GUIs are easier to use anyway. Second, maintaining the modification options and overrides in two different places takes up a lot of extra time when making changes to them. Removing the code means I only have to maintain one version. This means more time for other things like Universe-Portals.
- Third, world entry permissions have been added. Through this, you can require players to have a certain permission to enter a world. More on this below.
- Fourth, a lot of people have had issues worlds reporting that they are full when they are clearly not. I haven't been able to figure out why this is happening, so I added a few tools to hopefully diagnose this, and to temporarily remedy it. First, there is the new /universeinfo or /uinfo command. This will print out all the stats of a world to the screen including the player counts, player limits, and the name of the group. Second, there is a new /universeresetplayercount or /urpc command that will reset the player count to 0 and change the player limit to the default of -1. This command will kick any players in a world that has been reset so that the counter is not reporting incorrect numbers. These commands will require permissions.
Universes.info and
Universes.resetplayercount respectively.
- Lastly, a workaround for a bug with the end exit gates. Since 1.16, exit gates in End worlds created with the WorldCreator class, which this plugin uses, have been calling the wrong event and sending players to the default end world instead of the overworld. I wrote in a bit of code to make a workaround for this until the bug is fixed (I've reported it to the Spigot issue tracker), if the Spigot team is able to fix it.
Universe Nethers
So, there have been a few bugs with this version that I've looked into and hopefully fixed.
- First, when entities entered nether portals a NullPointerException error was reported in console. This was because in the entity portal event handler, I had a line of code trying to send a message to a player with my username. Chances are, I'm not playing on your server, so it can't find and errors out. This little bug has been fixed.
- Second, I've had a few people report that their nether portals just don't work. No errors in console, nothing. I believe this was tied to the previous bug, because after I fixed that, I sent a test build to someone who uses the plugin and their nether portals started working again. So, I think this bug is fixed. However, I could not reproduce the bug, so I am not entirely certain that it is fixed.
Universe Ends
- This is mostly related to the WorldCreator bug mentioned earlier. A small tweak has been coded so that players are returned to the overworld tied to the end they are in.
UNIVERSE SPAWNIFY
This plugin was originally created for a server I am currently staff on. It was created as an extension of Universes, and it seemed like something a lot of people would find very useful.
So, what is Universe Spawnify?
Well, a plugin for spawning of course! It allows you to set a spawn for each world or group of worlds that can be teleported to with /spawn, and players to be sent to when they die. There is also a hub which can be set and reached with /hub. If a world or group does not have a spawn point, players are sent to the hub instead. This plugin also adds in a toggle in the World Settings GUI that can be used to change the spawn location.
This extension adds in four new commands that are as follows:
/setgroupspawn - sets the spawn of a world or world group
/spawn - teleport to the world or world group spawn
/sethub - set the hub location
/hub - teleport to the hub location.
As is to be expected, it also has some permissions:
Universes.Spawnify.* - the wildcard permission, grants access to the whole plugin
Universes.Spawnify.setspawn - allows using /setgroupspawn and /setspawn
Universes.Spawnify.spawn - allows using /spawn
This plugin is complete and stable, but I decided to mark it as a beta because it is fairly new and hasn't been tested too much.
Universes World Entry Permissions
As mentioned above, this will allow you to require certain permissions to enter a given world. By default, this is turned off in the config. When turned on, players will need permission to enter worlds. This includes,
AND THIS IS VERY IMPORTANT, the default worlds.
YOU MUST GIVE PERMISSIONS FOR THE DEFAULT OVERWORLD, NETHER, AND END!
The permissions are formatted as follows:
Universes.universe.<world name>
Add that for each world a player or group can access. If your players start in a hub world, they will need permission to enter the hub or they will be unable to return. Worlds are also not grouped together, though I may make this possible in the future. But for now, players will have to be given permission for all worlds in a group.
Closing Notes:
Universes has grown quite substantially since it was first created. A lot of new features have been added, and a lot of bugs have been fixed. As the plugin has expanded, the overview pages has gotten messier and messier and messier. So, I am going to start working on a wiki site. It probably won't be ready for a few months. Attached to it will also be the forums page, for discussion, suggestions, and bug reports. As I work on this, I am going to start working on, and enforcing, a bug reporting policy so I can diagnose and fix bugs more efficiently. So, look forward to those things in the future.
What? Two updates in one day? Blah!
Yeah. So, I was doing some server administrating, you know, like you do, when I accidentally forgot to give a world for the /ut command. And I got an error.
This one was a really dumb mistake. I used a word to search a table before I checked to make sure the word existed. So yeah, that's fixed out. Universes should now correctly yell at you when you don't give it what it wants.
Heya! This one is a really quick and small update. It was brought to my attention that non-player entities were not teleporting correctly through nether portals. I finally had access to my code this morning to take a look. Turns out I forgot to register the event handler I created. I've fixed it, and now everything in Universe-Nethers should be working correctly.
Hello all,
Today I bring you a bug fix that is about a week overdue. I delayed pushing out the update because I wanted to test it in the environment where the bug was discovered to make sure I had actually fixed the problem. To do that, I needed to wait for the server's owner, who graciously allowed me to investigate and test on his server, to have more time to test. So we tested today and the fixes proved successful.
So, what exactly did I fix?
Well, just one bug. This one was a logic error that was directly my fault and caused the coordinates when entering the nether to be drastically wrong. I'll try my best to explain this in laymens terms.
Many programming languages have two kinds of division: integer division and decimal division. Integer division is dividing using whole numbers. No matter the numbers being divided, the result will be a whole number. This means doing 8 / 3 will give you 2. Decimal division is dividing using decimals. To do decimal division, the numbers being divided must be decimals. The result will also be a decimal. This means, doing 8.0 / 3.0 will give you 2.6666. Notice how I added a decimal point and a zero to each number. In Java, and many other languages, 8 and 8.0 are not the same thing. In Java they have different types. 8 is an Integer and 8.0 is a Double--aka a short decimal.
In Minecraft, the X, Y, and Z coordinates are decimals. When I was initially writing the code for the nether/overworld distance ratio, I confused decimal division for something called modulo division. Modulo division is like doing long division out on paper to find the remainder. In code, modulo division uses a percent sign. So, modulo division between 8 and 3 would look like this: 8 % 3. If you do the division by hand, you will get an answer of 2 with a remainder of 2. In the code, modulo only cares about the remainder. So, the result would be 2. Therein lays the problem.
Let's say I am at an X coordinate of 738 in the overworld and I enter a nether portal. The X value is divided by 8 for a result of 92.25. My X in the nether will be around 92. If we instead use modulo division, we get 92 with a remainder of 2. As I said, modulo only cares about the remainder. That means, my X in the nether is set to 2. My X will also be set to 2 is my overworld X coordinate is 138, 338, and so on. Now, if I leave the nether, my X coordinate, which was changed to 2 when I entered, is multiplied by 8. So, whether you entered the nether at an X of 138, 338, or 738, you'll exit the nether at an X of 16.
To give an idea of the scale of this error, if you enter the nether at an X of 738,000, there is a remainder of 0. So you wind up at an X of 0 in the nether. Leaving the nether from that portal will bring you out to an X of 0. (0 * 8 = 0). That puts you out more than 700,000 blocks off.
So, I replaced the modulo division I had erroneously used with regular division.
Simply put:
My math was wrong, so I fixed it.
Hello everyone!
As seems to be the usual, I'm releasing a bug fixes update just after the new version release. This was initially going to be Universes 4.0.1, but the I decided the complexity/amount of fixes warranted a larger version number change.
So, what are the fixes?
Well, first off, the /universeconvert (/uco) command saw significant reorganization. Not long after the release, one of the plugin's users, whom I've become acquainted with, updated the plugin on his server. His server is fairly sizable. 150-ish active players. When he ran the convert command, he received a thread dump stating that the server had stopped responding, and his server crashed. After some digging and experimenting, I discovered that the conversion process can take a lot longer than I expected, and that the command hogs up the main thread, preventing anything else from happening on the server. This has been fixed by using what is called multithreading. Basically, when the command runs, other threads are created to run other sections of code.This allows the server to move on and do other things while the conversion continues in the background. I also discovered that the conversion for each player takes about 10-20 seconds. So, this process can take anywhere between a few seconds (if the server is small) and several hours (if the server has more and a couple hundred players).
The second pub to be fixed had to do with the PlayerJoinEvent handler. Previously, when the plugin is loaded, after the default worlds load, it would database entries for them, but it would not instances of the new Universe class for them. So when the join event handler tried to increase the number of players in a world, it was trying to do so with something that didn't exist. This has now been corrected.
The third bug to be fixed was related to the Allow PVP option in the World Settings GUI. I had forgotten to modify the coding handling pvp, so it was still reading the value from the file when it should've been reading the value stored in the Universe instance for that world. Thus, the Allow PVP toggle had no effect. The code has been fixed, and the toggle is functional.
Lastly, the first join spawn. When doing the rewrite, I forgot to put the feature back in. There was an option in the config, and the /usetspawn command was working, but nothing handled the joining. Not only has the feature been fully reimplemented, but I fixed a small bug. When the first join spawn is used, players joining would be invisible until relogging or teleporting. The teleport now happens in a task executed by BukkitScheduler#scheduleSyncDelayedTask. Now, players should no longer be invisible.
I apologize for any inconveniences these bugs may have caused you. I would've liked to have fixed these in the Universes 4.0 release, but sometimes I forget to test some of the more minute parts of the plugin. It is just me working on this after all.
Wait, a real update? WOAH!
Universes Update
At long last. Universes 4.0 is here. This means support for 1.16, a massive rewrite, and lots of squashed bugs.
IMPORTANT:
When you modify groups in the groups.yml file you will have to restart. The new /universereload (/ur) command will not be sufficient. I forgot to handle changes to the groups.yml in the command and the update has already been posted. I will fix this in the next update.
Upgrading
First things first, Universes uses a whole new storage system. To update follow along with this video:
Steps from the video:
1. turn off server
2. update plugin jar files
3. delete config.yml
4. start server
5. modify config.yml and database-config.yml for your needs
6. restart server
7. run /universeconvert or /uco
8. restart server
That is the most important part of the update process, so I encourage you to watch the video.
New Features in Universes
The new storage system is not the only new feature in Universes. In fact, here's a list of all the features:
- Difficulty toggle in World Settings GUI
- World prefixes that can be customized
- Blocked commands per world with block and unblock options in the World Settings GUI
- New override toggle in Overrides GUI for blocked commands
- new /universereload (/ur) command to reload plugin config files
- new /universeconvert (/uco) command to move your saved data to the database
Fixed bugs
- World difficulty resetting to easy on reload or restart
- numerous bugs with per world stats
- a few small bugs with teleport tracking
Known Bugs
- When creating or importing a world, spawn flags will reset to true across all worlds. This appears to be a bug in Spigot.
Universe-Nethers Update
Universe-Nethers is also receiving an update. It is now on version 2.0.
Changes in Universe-Nethers
- The Nether-Overworld 1:8 ratio is now accounted for
- Universe-Nethers now uses Minecraft to locate nearby portals to use before generating a new one
- Behavior is now (or at least should be) identical to vanilla
Universe-Ends Update
That's right! With Universes 4.0, Universe-Ends makes a return!
Universe-Ends is now on version 2.0
Changes in Universe-Ends
Universe-Ends has gone through a number of changes since it was removed. While it is still incomplete, it is stable, and I am comfortable including it in the zip archive again.
What to expect:
Entering the end will not feel like vanilla. You will not spawn on a 4x4 obsidian square. You will instead spawn at the world's spawn point, which, for the End, is always 0,0, where the exit gate is generated. You will find yourself on top of the pillar at the center of it. Until I can figure out how to make use of the End entry logic built into the game, or come up with my own algorithm to replicate it, this will be the case.
Closing Notes
Most of the changes that have been made with this version are behind the scenes. Using the plugin should feel similar to previous version, but smoother, perhaps a little faster, and obviously with the handful of new features.
Over a hundred hours of work went into this update in the last month, and I think the hard work has paid off. I really do hope you all like the update, as minimal as it may seem.
While this is a fun hobby project of mine, I do try to release timely updates when Minecraft updates. This one came about rather slowly because of the large changes I decided to make. To thank you for your patience, I'm going to let you guys in on a little something.
I've been spending a lot of time in the last few months looking at portals and portal frame detection. Right now, I have a functional implementation of a portal system in a testing plugin. It doesn't use frames yet, it can only be one block in size, and the system for detecting players at portals is really bad and inefficient...but it's a start. Yes, I am working on another extention plugin for Universes: Universe-Portals
That just about wraps up the update. For those of you who are curious, I logged all the changes I made over the course of development as I created dev builds over on my website. Below, you will find a complete changelog of the entire update.
Changelog
- remove lang, es, and en packages
- relocated child packages to parent package
- fixed import statements for relocation
- removed commented out code related to language swapping
- removed unused Spanish language setup code
- removed all events related to teleportation and respawning
- removed per world inventory system
- removed per world stats system
- added Universe class
- added UniversePlayer class
- added abstract SQL class
- coded create method in SQL
- coded insert method in SQL
- coded update method in SQL
- coded query method in SQL
- created MySQL subclass
- coded init method in MySQL
- coded connect method in MySQL
- created DatabaseConfig class/database-config.yml file for database related settings
- added AbstractFileSQL class
- added LocalDatabase subclass for creating a local database
- created SQLite subclass
- codes init method in SQLite
- coded connect method in SQLite
- create Serialize class
- import itemToString from old Universes to Serialize
- import stringToItem from old Universes to Serialize
- code serialize method
- code deserialize method
- fixed small bug with switch statement in query method in SQL
- SQL queries for inventory table implemented in Serialize
- created onlinePlayers HashMap in Universes main class
- Added PlayerChangeOnlineState class in place of JoinEvent to handle both joining and leaving
- coded join and leave event handlers that build UniversePlayer objects
- added player counter to Universe class
- added blocked commands array
- added methods in Universe class to add, remove, and check blocked commands
- implemented Serializer in UniversePlayer
- implemented SQL initialization in Universes main class
- Fixed error in SQL syntax in SQL class
- added check for existence of tables in database
- added inventory map to UniversePlayer
- renamed loadInventory() to storeInventory()
- added loadInventory which searches map for inventories
- created buildInventory() method in UniversePlayer
- created PlayerChangedWorld event handler to load new world's inventory
- added clearInventory() method in UniversePlayer
- added PlayerTeleport event handler
- added SaveInventoryTask to save inventories on timer
- added SaveAll to save inventories in multiple threads
- implemented PlayerTeleport and PlayerChangeWorld event handlers
- fixed null player bug in PlayerTeleport and PlayerChangedWorld
- fixed JSON parse on null results from query in deserialize() in Serializer
- changed inventories map in UniversePlayer to store ItemStack arrays instead of Inventory objects
- Renamed SaveAll to SaveInventoryThread
- Adjusted SaveInventoryThread to save only current inventory
- added call to storeInventory on player quit, on timer, and on PlayerTeleport
- added null check to storeInventory() in UniversePlayer
- fixed errors preventing storing and retrieving inventories from the database in SQL and Serializer
- Functional implemention of player inventories portion of PerWorldInventories
- moved inventory saving to PlayerChangeWorld
- created inventoryManagement() method in PlayerChangeWorld
- moved inventory management code to inventoryManagement()
- added stat management method
- duplicated UniversePlayer inventory manangement methods for ender chest management
- added enderChestManagement() in PlayerChangeWorld
- added check for player name change to update in database
- changed playerdata table to take json for the stats
- added stats JsonObject to UniversePlayer to store stats
- added buildStats(), loadStats(), saveStats(), and storeStats() methods to UniversePlayer
- added parseStats() and storeStats() methods to Serializer
- added query on join to check if player exists in table, inserts them if not
- removed PlayerTeleportEvent handler
- added statManagement() in PlayerChangeWorld
- fixed deserialize() in Serializer to account for ender chests
- fixed errors preventing loading of ender chest inventories and stats
- ender chest inventories per world functional
- stats per world functional
- added world settings variables and functions to Universe
- added ConvertCommand for converting worlds to new storage system
- world loading system rewritten for new storage system
- removed enderchest management functions from PlayerChangeWorld and UniversePlayer in favor of a single set of
functions to handle both
- reimplemented check for if per-world-inventories/stats is enabled
- removed SaveInventoryTask and SaveInventoryThread; they are not needed
- moved world loading code to WorldLoader
- moved command registrar, event handler registrar, and world loading trigger to UniverseLoader
- reorganized Universes main class
- implemented checks for if inventory grouping is on
- functional implementation of per-world-inventory-grouping
- implemented checks for per-world-stats
- functional implementation of per-world-stats
- per world inventories feature fully implemented and tested
- added inventory conversion code to ConvertCommand
- added player stats conversion code to ConvertCommand
- fixed error in SQL where there was no connection validation before attempting a reconnect to database
- ConvertCommand fully implemented
- fixed bug where spawn flags were ignored on restart and reload
- replaced long looped if conditionals with simple instanceof checks when removing entities on allowMonsters and
allowAnimals toggle
- modified Universe table in database to hold spawn location has JSON
- adjusted ModifyCommand and WorldSettingsGUI to update settings in database instead of file
- adjusted ChangePlayerLimit and ChangeRespawnWorld to update settings in database instead of file
- modified Universe table in database to hold game mode, spawn point, and respawn world
- rewrote CreateCommand to use new storage system
- modified DeleteCommand to use new storage system
- added permission check to ConvertCommand
- added permission Universes.convert to plugin.yml
- fixed typo in Universes.spawn permission child in Universes.* permission
- added /universeconvert command to HelpCommand
- rewrote import command for new storage system
- replaced string concatonation in loop with a StringBuilder in ListWorldsCommand
- made reload command functional
- added previous location management code to UniversePlayer
- modified SpawnCommand to use new Universe class and UniversePlayer class
- rewrote TeleportCommand to use new UniversePlayer and Universe classes
- added RespawnEvent to handle PlayerRespawnEvent for use-respawnWorld
- added PlayerDeathEvent handler to RespawnEvent for saving location on death
- renamed teleport-tracking track-previous-locations in config.yml
- added new config option "save-location-on-death", to save the death location as a previous location for teleport tracking
- removed save-inventory-on-death from config.yml as it is no longer used
- modified code for SQLite errors when using a local database
- created TeleportEvent with PlayerTeleportEvent handle to save previous locations on world change from non-Universes commands
- added prefix-chat option to config.yml
- created ChatPrefixFile to create prefixes.yml
- removed unneeded global variables from Universes main
- added ChatEvent for AsyncChatEvent handler
- added code to change chat format and add world tags
- fixed bug in ConvertCommand that prevented the rest of the plugin from being able to read xp and levels
- rewrote Universe-Nethers to work with new storage system
- added event priority to u-nethers PlayerPortalEvent handler
- added InventoryManagement class
- moved inventory and stat management methods from PlayerChangeWorld to InventoryManagement and made them static
- rewrote Universe-Ends to fix old bugs and to make it work with the new storage system
- added abiity to change difficulty to ModifyCommand
- added difficulty toggle to WorldSettingsGUI
- fixed bug in stat conversion where health or hunger levels at 0 were not reset to 20, resulting in death upon entering a world
- added PortalEvent to handle PlayerPortalEvent to check if to world is full
- modified option names in OverridesUI
- added blocked commands column to database
- added BlockCommands and UnblockCommands for blocking and unblocking commands
- added Blocked Commands Override to OverridesUI
- added Block Commands and Unblock Commands options to WorldSettingsUI
While I've been working, I thought I'd stream a little of my work for those interested.
I know what you're thinking. "Another update without an update? GOSHDANGIT!" This
should be the last one. But this time I do actually have something for you all. I've been thinking about doing this for a while, and now I've actually gone and done it (granted there is still some work to be done on it). I've created a forums page on my website. There are sections for each of my plugins, including a couple that have not yet seen a first release. There are places to report bugs, ask questions, and even download development and beta builds. There is also a general section for just general discussion and such. (And an off topic forum section coming soon)?
The goal here was to create a platform where I can be easily reached and won't miss questions or bug reports like I have a couple times in the discussion section here.
So, without further delay, a link:
https://whispwriting.net/plugins/
(I think I may need to change my domain and rethink the main site a little. Heh).
So, 1.16 is out. And the way worlds work was changed a bit. And some parts of my plugin are quite broken now. I decided to hold off on some work I had planned until 1.16 came and spent some time reviewing the code. Suffice to say, some of the code is
AWFUL! So, in light of the update to Minecraft, I've decided to completely rewrite some stuff. My goal will be to reorganize some of the files in the plugin folder, to remove the unnecessary instancing of said files in the code, and to write more organized code that other people can actually follow should they want to make modifications. Also, this will hopefully resolve some rare, inexplicable issues that I've seen happening.
I apologize for the delays this will cause in getting an update out, but by doing this, the project should become easier to maintain in the long run.
Thank you all for your support, and I'll try to get this done as soon as I can. (Mind you, quality over quantity).
Before I begin, no, there is no update to the plugin. This is merely something that has been on my mind for some time, and something I want share.
I'm sure the vast majority of you don't really know what developing a plugin involves. Of course its nothing like developing Microsoft Windows or some other massively used product, but those projects are working on by hundreds of people at the very least.
Developing a plugin is not nearly as rigorous as that. I have no boss overlooking my work, I have no deadlines, none of the workplace stress. But it is also just me. And I am also still pushing a product out to the general populous that should be complete and work as intended. Sometimes that is not the case. More often than not, the bugs reported are small things that can be worked around, but are still prevalent and annoying. But that's why I check the website every day. I read every review and every discussion board post and every private message I am sent about all of my plugins. Most of the time, people are helpful enough to send me error reports and detail what the experience so I can better help them resolve the issues. But from time to time, I'll receive something along the lines of, "It doesn't work," and "Why can't your plugin do this?"
Answers to these questions are rarely simple. Today, I want to just take a few minutes to explain why I sometimes can't give an answer or why fixes can sometimes take so long.
Last year, at about this time, I decided I wanted to make my own multi-world management plugin. I spent a majority of my free time between last April and last July designing and programming the plugin I eventually named Universes. I had no intention of actually publishing it originally--in fact, I only really built it for fun and to test my skills as a budding programmer. But I had poured so much time and effort into it, I wanted to share it and let others reap the benefits of my work. I can safely say, no less than 300 hours went into Universes 1.0.
Throughout this year, I have made changes and released numerous new versions. I've lost track of the hours I've poured into this project, but it's quite a lot. Being a college student, I'm already pretty busy too. So, in late January, not long after the release of the 2.1.1 patches, I received a review stating Universes was bad and confusing, and that my work was lazy. (If you're curious, I'm referring to the only 1-star review I've received). I got to thinking about the first quote I mentioned above.
"it doesn't work."
If something doesn't work, no doubt I'd like to fix it. But saying no more than that is frustrating. What doesn't work? Can you give me an example of where something went wrong? If all I see is something like that, are you expecting me to go through the entire plugin and test every single thing again or look through all the code for potential bugs. Even then, I have no idea if what I'm fixing is what I'm told was broken. Universes, in case you don't know, contains somewhere around 6 thousand lines of code spanning 48 different files. Going through all of that to search for a needle that looks like the rest could take months.
If something is wrong, before stating so in a review, reach out to me and tell me. I'll ask you to tell me what happened when the bug occurred, and I'll ask for logs and error reports as well to help with my investigation. If I have just those two or three things from you, which would take all of five minute for you to obtain, my search would shrink to maybe three or four hundred lines of code over one or two files.
Moving on, I've seen many different users reach out to me here and on discord, which I'm always happy to see and will never turn away, and I've noticed a few recurring things. Probably the most notable one, is along the lines of the second quote I mentioned above.
"Why can't your plugin do this?" "Why will you add this feature"
Sometimes, adding something or changing something isn't as easy as it seems. For example, the per world inventories system. Before I had even thought about adding the feature, just before 1.14 came out, I received a private message here on the spigot forums asking when per world inventories would be included. I had not even considered the idea prior but when confronted with someone who appeared to be assuming I was planning to include the feature, I realized that it was something a lot of people would probably want. I figured it probably wouldn't be hard to do. All I needed to do was swap out inventories when someone changed worlds right? Well, not quite. Turns out, doing that required complete rewrites of the teleport handling events and several days of researching ways to do it.
Perhaps an even better example, however, came not too long ago. I was asked by someone on Discord whom I had previously helped with something if I could modify the /ut command so that it could save and return players to their last location in a given world. That sounds like something that could be done in a matter of minutes. But, like with most things, it wasn't so simple. In fact, to make that small change, I had to copy over the code that /ut originally had and make /us to maintain that functionality. Then, I rewrote the code for the command from the ground up to achieve what he was looking for. Along with that, I had to decide on a place to store these coordinates I was retrieving. Since I already had inventory data files in a folder for each world already, I decided to use those to store the coordinates. After that, I had to modify the code where player teleports are handled to store coordinates when the player changed worlds. Intermittently, I had to test the code I was writing in to make sure it worked the way I wanted. In all, adding in that small little feature took me almost a week amid my classes.
And then, only a day after publishing the release, I received word that the new command still had some glitches. So even when I was done, I wasn't done. In fact, I think I still need to do some work there.
Now, I just have one more thing I'd like to touch on. I know, this is getting pretty long. I apologize for that.
More frequently than I'd like, new features I add in don't work correctly for some people. As I've said, I'm the only one working on this plugin. This means that when I test the plugin prior to release, the features are only examined in one server environment. However, no two servers are alike, and I have no way of knowing what plugins you do or don't have. I try to test with the common plugins a lot of people have, like Essentials for example, but I can't account for everything.
When issues do arise, though, I try my best to get things working. In fact, I've been working closely with two servers that have been having some odd isolated issues. I don't discount the possibility that something I've done just won't work on someone's server, thus, I am open to the idea of making custom versions where needed. Or, if you have the knowledge and ability, the code is provided in a github link for anyone to make their own changes.
Having said all of that, I'd like to leave you all with one simple request. When something goes wrong, before you post or comment, reach out to me. I can promise you I'll see your message within a day, and I will always work, to the best of my abilities, to fix things. And, if you've requested or suggested a new feature, I ask that you just give me a little time to do it.
I suppose that was two things, haha. I hope you all enjoy the work that I do. Nothing brings me more joy than seeing you guys happy with the fruits of my labor.
You all have a great day now. And feel free to reach out with any comments or questions.
So, I have received a number of complaints from various users of my plugin, and my own players about some issues regarding the end. First, there is a matter of XP being reset when you leave that I am looking into.
Second, and the more important issue, has been Universe-Ends. A lot of people have been unfortunately spawned over the void, leading to loss of some valuable items. There are so many problems with it right now that I've made the decision to temporarily remove it from the zip archive. Until I make some major fixes, it will not be there. There are no actual updates here so if you already have 3.2.2 you don't need to download this update.
Okay, I forgot to do one last thing. When adding in pitch and yaw to the previous location tracking, I meant to also add this into the world spawn location stuff but totally forgot. So, this update adds it in. Now, when you set the world spawn, when players go to it they will be facing the direction you were facing when you set it.
So, remember how I said I squashed them all? Well, I was wrong. I discovered a few more bugs and squashed them. So let's get into it.
- One final bug with xp. If the use of respawWorlds was enabled, it would get xp data from the wrong file. This has been fixed.
- Stats retrieval error. When you died, the plugin would save all your stats accordingly. That means, in that world you have 0 health. If you tried to teleport back there or the respawnWorld sent you there, you would immediately die again. This has been fixed. If heath is 0, both it and hunger will be set to their maximum of 20 as usual.
- save-inventory-on-death is no longer an option. With the changes to the respawn event handler and the removal of the player death event handlers, the save-inventory-on-death option in the config became obsolete. No matter what, the inventory saves when you respawn. So, if your inventory was empty on respawn, it will save empty, if keepInventory is on, your items don't drop when you die, thus all those items will be saved. As a result, the plugin no longer needs to be concerned with that, so the option was pointless. It may still appear in the config file, but it can be safely removed. The option will not appear in newly generated config files.
Hello everyone!
This update is mostly bug fixing, but also one small new change, and a bit of cleanup.
So, first, the new change:
- Teleport Tracking!
- - You will see a new option in the config called track-all-teleports. It is true by default. Previously, the location used by /ut would only save when /ut or /us was executed. With this enabled, it will save when anything else causes the teleport whether it be a command block or /tp.
- Previous locations now include pitch and yaw!
- - The location tracker will now remember where you were looking.
Now, for the bug fixes:
- teleporting to worlds with /us or /ut will no longer send you to the void. In the last update I thought I fixed this, but I had only fixed one of two bugs that could cause this. The remaining one would send you below the floor if you typed the world name with the wrong letter casing. World names are not case sensitive to the game, but in the Universes world-settings.yml they are. So if you were to type "hub" instead of "Hub" the game would find the world for you, but Universes wouldn't be able to find coordinates. Thus, you would be teleported to 0, 0, 0.
- end world generation. The world settings were incorrectly generated for end worlds created automatically with Universe-Ends. In the files they were set with the type as nether. Upon restarting the server, this would change them to nether worlds. The names were also set incorrectly in the settings. However, the name line is unused. This update will prevent this from happening in the future. To fix any worlds currently like this, change the type in the settings and restart, or unload the world and reimport it.
- invisible entities after respawn. So, this was a small bug that was brought to my attention. The respawn teleportation sequence ran a few ticks too fast, confusing the server as a result packets related to mobs would not be sent to the client rendering mobs invisible and untouchable. The delay before the respawn teleport kicks in when the use of respawnWorlds is enabled has been increased just enough to prevent this. There won't seem like much of a change at all when the teleportation happens though.
- xp issues. There were a lot of bugs and glitches related to per world stats and xp during the respawn process. The code there was a big mess and honestly still sorta is. The respawn event and death event handlers contained a lot of old, bad code. All those issues, to my knowledge have been fixed. I rewrote a large portion of the respawn event handler (again) to make sure xp was saving and setting correctly on respawn, and the death event handler is gone as it was pointless. These glitches were mostly caused when bed spawn points were in use.
- bed spawns/spawnpoint no longer overriden. Previously, when the use of respawnWorlds was enabled no matter what you would be teleported to the indicated world's spawn. Now, if your bed spawn or spawnpoint is set in the world you died in, and the world you are in is the respawn world for itself, you are sent to your bed spawn or spawnpoint instead of the world spawn. For example, if I'm in SurvivalWorld, and SurvivalWorld's respawnWorld is SurvivalWorld, and I have a bed spawn set in SurvivalWorld, if I die, I go to my bed.
And that's it. I am not aware of any other bugs and I haven't come across any more in my own usage, so if I've missed something, do let me know.
Hiya guys! This update isn't too big, but fixes some important bugs and adds in a sought after feature. So, here's what's in store:
Universe-Nethers and Universe-Ends
- added Universes as a dependancy. Those warnings that appear in the console are gone. I had checks in place to be sure Universes is installed, this is just another, albeit important, layer of safety.
Universes:
- When you create or import a world, the difficulty is actually saved and applied when worlds are loaded (This has been missing since the initial release and was only just now brought to my attention). When previously existing worlds are loaded, they will automatically be set to the game's default of easy. If you wish to change this, simply change the difficulty in the file and restart the server (reloads may not apply the change). I'll add a command later.
- Upon making respawnWorlds option, I broke a few things in the respawn event handler, mostly due to poor variable names. I large portion of this class was adjusted to be clearer and to fix the bugs.
- A likely unnoticed bug in the /universeimport command has been fixed. For whatever reason, this was setting world spawn points with the method used prior to version 2.0. If you imported any worlds, I suggest unloading them and importing them again.
- The /universeteleport (/ut) command has been completely changed. Now, using this command will return you to your last known location in whichever world you pick. Location is saved whenever this command is executed, or when the new /universespawn command is used. If a user has not been to a world yet, this will take them to its spawn. A lot of people asked for this, and it wasn't really a hard feature to implement, so here it is.
- New /universespawn (/us) command. This does what /universeteleport used to do. It will take you to the spawn point of the specified world.
- With the new command comes a new permission.
Other Information and Known Bugs:
- Deleting or unloading a world will partially fail if a player is still in the world, allowing access to the world still that is incredibly broken and prone to errors and other issues. There are no checks in place to prevent this or move players to a different world. I did not have time to work on this for this update, and I will be very busy over the next few days. You can expect an update to fix this likely next week at some point.
Enjoy!
Hiya everyone! It's time for another big update. The last few updates have mostly been minor fixes and changes after the 2.0 update. And now we are on 3.0! Hard to believe we're here already in less only about half a year.
So, let's talk about what's in this update.
First, the new stuff:
- the create command can now be given a seed to generate with. (Check the overview page's command section for more info on how this works).
- There is now an option first join spawn option in the config as well as a command to set the location. (Please note that by default players will just go to the regular spawn if no first join spawn has been set.)
- Universe-Ends has finally been finished.
This has been something I've been planning for a while. With its inclusion, you are now able to make end worlds for each individual overworld. Check out the new section added in the overview about it to learn how it works.
- joinspawn.yml file added to store the first join spawn point
The stuff that's changed:
- Universe-Nethers teleport management.
This is a pretty big one. Various checks have been moved around in the code to fix a few odd bugs. Also, previously when nether-per-overworld was disabled, if a player entered a nether portal, they'd be taken back to whatever world they entered from when they exit. This is now optional.
- Library updates.
This one is entirely unnoticeable, but the internal libraries used for the coding for Universes and both add-ons have been updated to 1.15.2. These libraries are not compiled into the jars, so it won't be noticeable at all, but it means I see any newly deprecated methods I might be using so I can change them to better alternatives before they are removed from the libraries.
- the new usetspawn command has been added to the universehelp command.
- create command modified to allow for auto-generation of both nethers and ends if the add-on plugins are installed.
I think that's it. So, I hope you enjoy the new features! The code will be merged from the developer branch on github shortly.
It was brought to my attention that permission for access to /universemodify was still being denied when the Universes.* permission was given despite the small update claiming it was fixed. I accidentally moved the wrong jar file into the zip archive. This time, that small bug has actually been fixed. I apologize for any inconveniences my oversight has caused.
For whatever reason, one of the children permissions of Universes.* was marked as false. That would prevent it from actually working. It has been fixed.
This update is very brief, but at the same time very important. I didn't realize this at first, but in the Universes plugin.yml file I noticed that the entire permissions section was spaced in when it should not have been. This improper alignment actually causes the server to not register the permissions. This can cause some issues with various permissions plugins. The alignment has been fixed, so all permissions now correctly register.
So, it's been a while since Universes 2.0 came out, and I apologize for taking so long to get around to making another update--a rather important one too.
What this update adds:
- ability to
DISABLE the respawnWorld feature
- updated to 1.15.1 api library
Hello all and welcome! At long last, it's time for an update. After two long months of work, I bring you Universes 2.0. There are a lot of changes and new features, so I encourage you to watch the video I created to go along with this. I am bad at making my videos short, so you may want to watch it in parts, but it gives important information on how to use the new kits system, Universe Nethers, and the long awaited PER WORLD INVENTORIES! Yep, you heard right! That's a thing now!
INCREDIBLY IMPORTANT
NOTE ABOUT PER WORLD INVS:
There may very well still be some bugs in the transition between versions, so I encourage all server owners to have their players store all their items in chests before per world inventories is turned on or modified
So, how about a brief overview?
Squashed Bugs:
- Setting a new spawn point no longer causes the teleport command or respawning to to send players to 0, 0, 0 (aka the void)
- respawnWorld actually takes players to the designated respawn world for the world they're in when they die (I am still working on making this feature optional)
- Usage is no longer displayed when users without permission to /universesoverride run the command. They are instead adequately told they do not have permission.
- Mob spawn flags no longer reset on restarting or reloading.
New Features:
- using /uo or /um without any of the required arguments will now open a GUI to change settings more quickly
- Per World Inventories! Worlds can be grouped and share the same inventories (save-inventory-on-death is meant to be used if game rule keepInventory is set to true. Keep that in mind.)
- Per World Stats! These can be grouped as well. Hearts, food points, and XP will be different for each world like inventories
- Universe Nethers is an add-on plugin that won't run without Universes installed. With each generated overworld, it will generate a nether, if enabled, and any portals in the created overworld will go to that nether. (Do to a small oversight, it is currently impossible to use the universe nethers without Universes auto-generating a nether world on creation of an overworld. The generated nether can, however, be safely deleted. Nether portals will simply become useless in that world)
Anyway, here's the video. Please do watch:
Hello all and welcome! At long last, it's time for an update. After two long months of work, I bring you Universes 2.0. There are a lot of changes and new features, so I encourage you to watch the video I created to go along with this. I am bad at making my videos short, so you may want to watch it in parts, but it gives important information on how to use the new kits system, Universe Nethers, and the long awaited PER WORLD INVENTORIES! Yep, you heard right! That's a thing now!
INCREDIBLY IMPORTANT
NOTE ABOUT PER WORLD INVS:
There may very well still be some bugs in the transition between versions, so I encourage all server owners to have their players store all their items in chests before per world inventories is turned on or modified. This will ensure no items are lost.
So, how about a brief overview?
Squashed Bugs:
- Setting a new spawn point no longer causes the teleport command or respawning to to send players to 0, 0, 0 (aka the void)
- respawnWorld actually takes players to the designated respawn world for the world they're in when they die (I am still working on making this feature optional)
- Usage is no longer displayed when users without permission to /universesoverride run the command. They are instead adequately told they do not have permission.
- Mob spawn flags no longer reset on restarting or reloading.
New Features:
- using /uo or /um without any of the required arguments will now open a GUI to change settings more quickly
- Per World Inventories! Worlds can be grouped and share the same inventories (save-inventory-on-death is meant to be used if game rule keepInventory is set to true. Keep that in mind.)
- Per World Stats! These can be grouped as well. Hearts, food points, and XP will be different for each world like inventories
- Universe Nethers is an add-on plugin that won't run without Universes installed. With each generated overworld, it will generate a nether, if enabled, and any portals in the created overworld will go to that nether. (Do to a small oversight, it is currently impossible to use the universe nethers without Universes auto-generating a nether world on creation of an overworld. The generated nether can, however, be safely deleted. Nether portals will simply become useless in that world)
Anyway, here's the video. Please do watch:
Hiya everyone,
Lately, my desktop has been running really slowly and recently has been crashing and shutting down expectedly fairly often. That was already slowing my work a bit. A friend and I spent four hours or so working on it to diagnose the problem. At first we thought it might be hard drive failure, but the symptoms didn't quite match. Then i noticed that sometimes when it started up, the system information showed that I only had a gig and a half of RAM instead of the full six it is supposed to have. Along with that, the processor fan had been acting up.
Now, I've come to the conclusion that the RAM chips have completely failed. This means that the computer I did most of my work on is unusable right now. I do have my laptop, but it isn't as powerful, so coding and testing goes much slower on it. I will continue my work while I work on repairing my desktop. But please know that this will likely delay the release by a couple weeks.
My apologies.
So, many of you have asked me to add in a per world inventories feature, both in the discussion section, on Discord, and in private messages to me. Good news for you all: I just finished adding it in to the English language section. Over the next several days I will be adding it to the Spanish section and working on a few other big things that I'm not going to reveal just yet.
This is going to be a big update though. And I really hope you guys will enjoy what I have planned. So, stay tuned!
Hello all!
This is a fairly sizeable update, and took quite a bit of work. First the simple components:
- Order of checks for various commands has been fixed. Previously, some commands would display usage if a player without permission type the command with invalid or missing arguments.
- Permission check included in the reload command (which is an entirely useless command by the way, and will probably be removed in a future update)
Now the bigger, more important part of this update.
Universes now includes SPANISH!
There is now a config.yml file. To change the language to Spanish, simply open this file, change lang: to es, and save it. Then you will have to delete the currently existing world-settings.yml so it can regenerate all the options contain in the file in spanish. THIS WILL RESET ANY CHANGED SETTINGS! Worlds will load fine, but settings will be returned to their defaults. Once you've done that, simply restart or reload the server, and the plugin will be all in Spanish. (Special thanks to Wyros for his help with the translations).
This is a brief update to fix a bug in the import command. The statement that verified that all required arguments be given was not in the right place and as a result was allowing index errors to occur and break the command. This update fixes that.
Hello all! This update fixes several big bugs that people were experiencing. First, when a nether world was created, it would be turned into an overworld world when the server restarted. Second, if the default world of server was not called "world" the plugin would bug out and not function due to how it was creating the settings for the default worlds.
Both of these bugs have been fixed.
Also, some preliminary code has been added in for the upcoming Universe-Nethers plugin. This new plugin will allow for created overworld worlds to have their own nethers. The code that was added is currently inactive without the Universe-Nethers plugin and will not affect the functionality of this plugin.
It was brought to my attention a few days ago that I hadn't listed the teleport command in the description of the plugin or in the plugin's help command. The command has, indeed existed since the beginning, but due to a small oversight it did not seem so. This small update fixes that. I apologize for this minor bug.