Sponge Docs Pop Quiz #27

Straight from the vociferous argument at the bar to you, it is

Sponge Docs Pop Quiz #27

This time around we have some thorny issues that need disentangling and propagating. Make what you will of them, we seek input from all parties - developers, users, server operators and superintelligent cheese-mites. Share your opinions and ideas and bring gravitas to the discussions.

  1. When should it be acceptable to use Sponge in plugin names?
    We want to reserve the use of Sponge in plugin names for official SpongePowered works. This new rule has exceptions for ports (“___Plugin for Sponge”) and plugins using the block “Sponge”, are there any others?

  2. Should there be an easy way of handling players who haven’t joined a server yet?
    Players with no UUID recond on the server can’t be handled by most plugins. There are ways to obtain this information; how should this be handled - by plugin, or within Sponge itself?

  3. Have you had to rename SpongeForge to get it to play nice with coremods?
    Mods load in alphabetical order, because the OS tells them to. Mixins can get messed up if SpongeForge loads after coremods… If SpongeForge needs to be first in the mod-loading queue, should it really be !SpongeForge?

Rejoice and be merry, for this is the last paragraph. If you missed the dancing FLARD from the last installment, Look Here. Otherwise, farewell until the stars are right once again…

  1. I think Sponge should be reserved for official SpongePowered works only, barring the two exceptions mentioned. While using the name is mostly harmless, I think everyone would be better off if the list of sponge plugins wasn’t polluted with the name Sponge.
  2. I think so, even though it world be somewhat of a niche feature, a lot of plugins could benefit from such an addition. However, I think the biggest benefit would be for server owners, as they could potentially perform functions on users before they ever join. A use case would be a surprise birthday party server, where everyone already has roles and hats and whatever else even though they had never joined the server previously.
  3. I can attest that the Block19 modded server that Resonant Rise set up needed SpongeForge to load first. This was accomplished simply by renaming the SpongeForge jar to 1111SpongeForge. As for renaming the jar in distribution, this is a tough question. In a perfect world where all coremods used mixins, we wouldn’t need SpongeForge to load first at all, since mixin handles most of the conflicts quite cleanly. However since a lot of coremods still use blind ASM tactics, this is often not a luxury server owners have. I am inclined to say that we shouldn’t rename the jar in distribution, but we should document that this is a known and often working solution to coremod loading conflicts.

And that’s my two hundred cents on these questions.

Any text beyond here is just rambling.

You have been warned.
Like seriously.

There is nothing meaningful beyond this point.

Like, that means you should stop reading now.

If you keep reading, your brain might melt and transmute into FLARD.

If you stop I’ll give you a cookie.


  1. When Sponge is not used as its own word (e.g. Spongee).
  2. When UserStorageService is queried for a new User, there should be a way to force it to create one. It should be handled by whatever the current implementation of UserStorageService is, whether it be the server or a plugin.
  3. Maybe add a zero-width space to the beginning of the filename (the character in the brackets [​]). Invisible, and alphabetically first.
FLARD inside!If you're reading this, the FLARD has escaped. Do not be alarmed. Wait, yes, definitely be alarmed. ヽ༼ ͒ ̶ ͒༽ノ ALARM ヽ༼ ͒ ̶ ͒༽ノ
  1. Restricted for official sponge core systems, or as stated, if a sponge is the key element block of a plugin idea, with the exception of intentionally going out of ones way to be misleading or stupid just for the sake of using the term.
    SpongeForge: A plugin that lets you turn a wet sponge into a furnace that will automatically melt iron ore into weapons, and quench them - must replenish water in sponge to reuse.
  • OfficialSpongeMod / SpongemodEssentials/ SpongeEssentials : A plugin that lets you modify the water absorbing properties of sponge blocks
  • SpongePrison: A plugin that lets you craft an unbreakable prison cell out of wet sponges
  • SpongeCoremod: A plugin that replaces the bedrock layer with sponge blocks when generating a new map. An optional layer of bedrock can be kept on the very lowest level if so configured…
  • SpongeConsoleLogger: This plugin writes an entry to the console every time a player breaks or places a sponge block that changes water distributions on the map.
  • SpongeWorldEdit: A plugin that lets you convert any selected regions into sponges or back to normal, to generate alien world looking landscapes
  • SpongeServer: A plugin that provides an NPC player that hands out sponge blocks to players on request.
  1. If a plugin wants to check something for a player account, be it online, or offline player , a player as an argument of something, the plugin still is responsible for doing something if that player account does not match any historical records /has not joined. Sponge should if it does not already, maintain all players who have joined so as to be able to quickly respond that not only is it not an online player, it is not an offline player account either, a non-exist as far as the server is concerned, so that the plugins can then respond to that info, rather than have another / each plugin responsible for maintaining its own perpetual-list of players - plugin should only need to respond according to the lookup: online players, can do online stuff to them right then; offline players, cant do things to them right that moment (like chat or teleport to), non-exist players to respond specially as required. Such as sending mail to an on or offline player, but being able to provide handling for the scenario that the player has never joined.

That should already be something the plugins can handle, if doing lookups from names for online/offline players, and handling optiona/null values – if the question is more specifically describing a scenario where BobBuilder joins, leaves, changes his name to FrootPunch, tells his friend on skype his new account name before logging in, and said friend online then tries to send a message / pay money to ‘frootpunch’ before frootpunch logs back on… then I think an OPTIONAL CONFIG setting should be in place/ optional parameter if Sponge decides to go the route of having to say “I dont recognize frootpunch from any online or offline players, let me ask mojang if they know someone by that name, ah yes, its the id that i have on hand for BobBuilder, so lets …(do whatever sponge will do before Bob logs back in) and hand that info to the plugins”
Because that scenario is an overly-convenient-helping-function executed with its hand extended out looking for a big tip, when for many if not most 'does not match any oneline/offline players" lookups will be due to typos, and gets even worse when the lookup from mojang matches someone who has STILL never been on the server ever before, since I may want to act on an account that i think is xxxdeadmeatxxx but is really xxxdaedmeatxxx; the former, mistyped name may be a perfectly valid name of some kid in estonia who will never play on anyones server, while the latter is the only one with meaning to the context of my server and plugins on my server. Spending time to look up and retreive that account, and create new files for it, which may trigger more cascades downline --> wasted time in 99% scenarios, and way overkill.

Plugins still need to know how to deal with a player who has no actual history on the server vs does, but the ‘does this name look familair to you mojang, because it doesn’t to me even because that player changed his name but hasn’t relogged back on yet’ scenario is too slim to bend code towards handling. “Should I ban this player that I haven’t yet had visit my server?” is about the only ‘practical’ use of such, and thats getting out of hand - plus any 'hey, ban a player by this name: xyz" recommendations may be moot by the time they are written, if xyz changes his name before someone acts on that lookup, and the general youll-go-crazy factor trying to pre-ban folks.

  1. No. Sponge is trying hard to work nice with Forge for forge, and its different than all other core mods, and every other mod knows that too. Forge as a project should try to then work nice with sponge, by providing an optional configuration that lets the server owner specify the plugin load order priorities, like a list of the first 3 to load in that order, then the rest dont matter , with a default of sponge in position 1. They have recently added a “you can load additional mods from different folder locations” json config, it shouldn’t be much of a difference to add a ‘load in this order if present’ list. Sponge as default 1, if not present, is ignored, and the rest of the mods are loaded as per normal.
    Renaming files is too hacky in the first place, not very elegant, though it works - its great for resolving conflicts between a few issues, but sponge is differeint with its “We want to work with everything, and will work hard to help work with everything” nature and developer mentality, while many other mods are “well, if x mod doesn’t work with mine, get rid of x mod, its a piece of crap anyways” or “well, i only really care about integration with x y and z, if it doesn’t work well with pqr, complain to that mod author first”. SPONGE has a unique position apart from all other coremods that should get it very special status and treatment from Forge for a more elegant solution to trickle-down
1 Like