A general purpose project to enable SpongeForge and SpongeVanilla
to ship and share the same transformers thereby reducing code
duplication.
Signed-off-by: Gabriel Harris-Rouquette <gabizou@me.com>
This ensures plugins are loaded in an appropriate order, so plugins without dependencies are loaded first, and the algorithm recursively determines the load order based on satisifed dependencies. BEFORE dependencies can be supported by uncommenting the code within the TODOs in DependencyResolver, it treats thouse as "optional after" deps on the target -- though will still fail if the dependency is not there and is not optional.
If we have optional dependencies, there is a chance that a cyclic chain may occur. For optional deps, however, they should be able to handle a dependent plugin being loaded before them because they are already "optional". Thus, if we find that no plugins were loaded in a pass and but there were optional dependencies that could be ignored in that scenario, we attempt to load plugins that only have their compulsory dependencies loaded.
As for plugin-spi 0.3.0, migrate to 'sponge_plugins.json' as the
standard metadata file that will be read by Sponge.
This presents the required objects to perform positional transformations
on all entities/blocks/etc. within a Volume. The key with these changes
is that certain objects have requirements to perform "rotations" and
"mirroring" as a middle step. This is all built to support that out of
the box using the new Transformation API.
Signed-off-by: Gabriel Harris-Rouquette <gabizou@me.com>
Signed-off-by: Gabriel Harris-Rouquette <gabizou@me.com>
* Move timings to it's own library
Plugins looking to keep using timings and creating them
will be able to do so by depending on org.spongepowered:timings.
It is verbatim what timings existed in API, and Sponge
will still ship the timings implementation itself.
Signed-off-by: Gabriel Harris-Rouquette <gabizou@me.com>
* Move timings implementation
Signed-off-by: Gabriel Harris-Rouquette <gabizou@me.com>
* Add timings to the Mixin deps
* Ensure that timings is downloaded.
This might not be the right section for this, but I didn't think it should go in appLaunch because it has nothing to do with that.
Co-authored-by: Daniel Naylor <git@drnaylor.co.uk>
Because of our custom SpongeInjectionPoint and use of Guava 21, we have
to use a fork of Guice 5.0.1 that restores API removed in Guice 5
without a suitable alternative.
Upstream issue: https://github.com/google/guice/issues/1121
This newer version of Guice is needed to maintain compatibility with
newer Java versions which plugin developers may want to use.
This is a rule I am putting into place for our platform projects that unless the platform needs an accessor (for example, if we transform a Forge class we can actually do so to access a field not accessible, that cannot go into common of course), the platform will not run an accessors sourceset. This is a QOL change as it keeps all of our accessors largely together and cuts down on a sourceset to process during compilation.
This change is done for SpongeVanilla, SpongeForge is left alone as it is not being worked on currently.
Signed-off-by: Chris Sanders <zidane@spongepowered.org>