pufferpanel / pufferd

The PufferPanel daemon
https://pufferd.pufferpanel.com
Apache License 2.0
46 stars 15 forks source link

Handle dynamic registration of types for installation #63

Closed LordRalex closed 6 years ago

LordRalex commented 6 years ago

To better handle support for the new Minecraft download system, we are going to move the types of commands that we support to a modular system which registers "executors" for steps.

https://golang.org/pkg/plugin/

This will break Windows builds, but as the use-case is not there, it's not worth solving at this time.

We can fork the current code into a loader which the new 1.3 build can reference for compatibility.

All current executors would be moved to this new system, and new ones made to support the new 1.13 Minecraft standard (dubbed as the "mojangdl" type).

Adding this will also add support for drop-down selections for versions.

mapl commented 6 years ago

Following https://github.com/golang/go/issues/19282 for future reference on Plugin Package Support for Windows. To make Windows Builds not completely unusable in the future, a separate Windows Branch without plugin package has to be considered.

LordRalex commented 6 years ago

A branch is not needed for this. We will handle this the same way environments work, in that the binaries will contain a OS-specific loader that handles this.

In this case, Windows has a no-op loader which does nothing. Linux has a loader will will load any new modules not defined in the initial process.

Our existing commands are using the new structure and just automatically registered. They serve as a base to implement and create new commands.

Our new repo https://github.com/PufferPanel/modules will contain these new extensions which add features. By default, we'll only ship ones required, so mojangdl will be moved into this.

This does mean the Windows version won't properly support 1.13 Minecraft, but we have a template for the current system to handle that.

LordRalex commented 6 years ago

While the system now supports it, 1.2.5 will handle loading all files as-is for now, to avoid a breaking and complicated release. We will bundle all of the needed modules for 1.2.5 into the binary but still support this feature. This isn't a breaking change, so it can be in the 1.2 builds.