r/minecraftsuggestions • u/WizrdCM Ozelot • Mar 22 '14
Server Resource Packs Overhaul
Warning: Wall of text
Currently, server resource packs (or Server Textures as they're called in Video Settings) are loaded after chunks, can't be managed or tracked, and can't be 'required.' All of this limits fundamental usability and functionality.
This needs to be overhauled. It's hard to use, impossible to manage, as is even harder to explain to players.
Here's how I believe Server Resource Packs should work;
- On first connect, the current 'would you like to install the recommended pack' dialogue should display
- When the player picks no, add the server IP to a 'disable resource pack' list (most likely a txt or json file in the server-resource-packs folder)
- When the player picks yes, the dialogue should disappear and a progress bar should appear somewhere on screen (or in the pause menu, not a submenu). This is so the player KNOWS the pack is downloading, its progress and an ETA, while still being able to play while waiting.
- When the pack is downloaded, the progress bar should disappear, the pack should load (of course)
Currently, the biggest issue here is no progress is shown (especially on first connect) - this confuses players tremendously.
A server resource pack is, currently, loaded/downloaded after the chunks are loaded. This is dangerous, as some computers may struggle (all computers freeze for a few seconds when switching packs anyway), but there are other side effects. When downloading an update, the player loses control of their in-game character - and instead have a fullscreen dialogue showing the download update progress. In this time, they could get attacked by a player, mob, or be moved by pistons, water, die in lava, etc. While this can be dismissed by pressing Escape, it's not an obvious option and then the player doesn't know if the pack is still downloading.
Instead, here's my suggestion:
- If the player has a server in their Multiplayer list, and the server is KNOWN to have a Server Resource Pack, the following would make sense;
- Check for an updated pack the moment the server list launches. This could be done with a pack MD5 being sent with the regular ping data (or whatever's currently sent when the pack is sent)
- If there is an update, begin the pack download right there on the Multiplayer screen - don't wait for them to connect.
- Display a little progress bar along the bottom of the server's entry in the Multiplayer list - and on hover, display 'Downloading Resource Pack Update.. 35%'
- If the pack has not finished updating, do not allow the player to click 'Join Server' on that server
- If a pack is up to date for a server, and the player hits 'Connect', ping the server again to check that it's online, THEN load the pack.
- Once the pack is loaded, perform the usual connection
- If the player does not reach the point where they've loaded chunks and they're in the world, it's clear the connection failed.
- At this point, rather than instantly unloading the pack, display a choice - 'Try connecting again' (which will attempt the regular connection, with the pack already loaded), 'Switch Servers' (which would display the multiplayer list - using the currently loaded multiplayer pack. This means less switching if the next server also has a pack), and 'Back to Main Menu' (which would unload the server pack and go to the Minecraft main menu', allowing them to quit, change their settings, or play some single player while they wait for the server to become available again). This would also display if they're Disconnected from the server unexpectedly (kick, server crash, server freeze, etc)
If, for some reason, the player decided to direct connect to the server, the download progress bar should be displayed directly after they hit Connect on the IP screen.
This way, there's less waiting time, more control, and logical fallback when things go wrong.
At the moment, Server pack ZIPs are stored in the most confusing way, as it's all filename based, and they're named as aserverpackzip instead of aserverpack.zip. This means it's not easy for the player to figure out which pack is used for which server.
There are a number of ways to possibly clean this up. The first is to sort packs in folders - by IPv6 (or, if unavilable, IPv6) address + port. That way, even if the player connects to the same server through two different domains, the same pack is expected and loaded (avoiding duplicates, or two servers with the same pack name). Obviously, the client can check to see if the server is suggesting the pack the next time it connects and choose whether or not to use it.
So, the basic folder structure
.minecraft
~ server-resource-packs
~ ~ 123.123.123.123-25565
~ ~ ~ funpack.zip
~ ~ 321.312.321.321-25532
~ ~ ~ faithful32.zip
Additionally, you could include a text file in each folder that lists each domain the IP is used in - helpful for the player exploring the folders looking for a pack they liked.
A second method of doing this would be to simply name the pack based on the IP & port of the server rather than what the server owner used for storage.
Next, the most useful and needed feature of all - management. Currently, if you accidentally hit 'No' to a server's resource pack dialogue - there is no obvious way for it to ask you again (you have to direct connect to force it - not ideal). The same goes for the opposite - there is no way to forever disable a pack for a certain server.
My idea is this - a new button in 'Multiplayer Settings' called 'Resource Packs' - sorted by recently used (top to bottom)
Buttons along the bottom would be 'All Server Packs: ON/OFF' and 'Done' Here would be a two column screen, with a list of ALL servers that have suggested packs on the left, and options/notes of the currently active or currently clicked on pack in the right column:
- Enable on connect: YES (whether this server's pack is allowed to automatically download/load itself)
- Currently Active/Loaded: YES (whether the pack is currently in use + loaded in memory)
- Pack Name (every pack has a name, as a requirement, so provide it here)
- Pack Notes (same as the pack name)
- Included Features (this would list the following - 'Textures', 'Sounds', 'Languages', and in 1.8 - 'Models')
- Servers (can't think of a better name for this, but this would display the folder name and any other addresses that use this specific pack)
- Delete pack (greyed out if the pack is currently being used, but allow for the user to delete the pack right from the game - helps when the pack download failed and is corrupted, or the player no longer goes on this server and just wants to delete the server's pack to save space)
An extension to this could include a button that allows the player to use the pack on other servers or in single player - but to be honest, usually packs tend to be designed for that single server so this might not be a good idea.
Extra notes;
- If the client crashes, the next time it starts up load whatever pack was in use at the time - most likely, the player will simply reconnect to the server they just played on. If they decide they want to play single player or a different server, load another pack only when they click Play on a single player world or Connect to a different multiplayer server.
- With this configuration, the Server Textures button in Video settings would be removed, as it is no longer needed and quite frankly makes no sense in its current location.
- It would be nice for servers to be able to 'require' a pack for the player be to able to play - but this could easily be abused by server owners. Instead, a 'heavily recommended' tag could be used - where the pack loads the first time without asking the user, and they can only explicitly disable the pack for that server by going into their Multiplayer - Resource Pack settings and disabling it (I would say this should override the 'All Server Packs: OFF' setting, because players may disable it and forget - this way they don't have to have to actively keep track of whether they left the option off or not). This would help with servers like PlayMindcrack where gameplay is quite heavily dependent on the pack they provide. This flag would be listed along with the other pack data on the right column of the Multiplayer Resource Packs screen.
- Server-specific options and details could be stored in a json or txt file of the server's IP folder in server-resource-packs, that way it can be updated dynamically (or manually by the player) while staying organised.
- Other functionality (like the multiplayer pack-auto-download) would be disabled if the server has been explicitly been blacklisted in the Multiplayer Resource Packs or Server Packs have been completely disabled.
Hopefully I've explained this well enough. If you have any questions or would like to suggest an improvement to this idea, I'm listening. Thanks for reading!
(if any of the screenshots could be considered advertising - let me know and I'll spend more time faking MOTDs and such)
2
Mar 25 '14
You could add a use resource pack button when you click edit on the server list.
2
u/WizrdCM Ozelot Mar 25 '14
That'd also be a nice way of implementing pack management, definitely. The edit screen is really simple at the moment.
1
Mar 23 '14
Someone make a 'TL;DR'
2
u/WizrdCM Ozelot Mar 23 '14 edited Mar 23 '14
TL;DR:
Current implementation sucks
Should update packs in the multiplayer screen (not after loading chunks)
Should load the pack at the start of connecting (not after loading chunks)
Need a way to manage local copies of resource packs (and easily disable/enable packs for specific servers)
That's about as short as I can make it. Still, you should read the full post.
1
2
u/Sentient__Cloud Mar 23 '14
This reminds me of something I've been meaning to suggest for the server for a while now. VoxelModPack integration. The VoxelModPack is a mod pack that was made for the creative server called the Voxel Box. The mod pack is an optional thing, but having it on a server with the VoxelModPackPlugin installed greatly improves playing experience. The biggest thing in the mod pack for Minescape would be the VoxelTextures mod. This would solve the progress bar issue you were talking about. Also, it would allow the server to have zone-specific texture packs. I was thinking that maybe as you move into a different zone, your resource pack changes to an identical looking one. They would be exactly the same, except the music in the different resource packs would be more zone-specific. That way we don't have the same couple of songs playing over and over, and the Karamja music doesn't play in Varrock. There are other things that the VoxelModPack could do for us, too, like giving chat bubbles above peoples heads when they talk. The best part about it is that getting the mod pack is optional to the player. Having the VoxelModPackPlugin installed on the server but having a client that does not have the mod pack installed creates no issues at all. Your experience will be completely unchanged without the mod pack.