diff --git a/PlayWall/src/de/tobias/playpad/PlayPadMain.java b/PlayWall/src/de/tobias/playpad/PlayPadMain.java index ecb8676f91e5d5b8e7c5b53bff54bde7d763e998..9a472114c8ddba0cc6d5b0595f2f3f529f5f289d 100644 --- a/PlayWall/src/de/tobias/playpad/PlayPadMain.java +++ b/PlayWall/src/de/tobias/playpad/PlayPadMain.java @@ -124,11 +124,15 @@ public class PlayPadMain extends Application implements LocalizationDelegate { // Load Plugin Path Path pluginFolder; if (getParameters().getNamed().containsKey("plugin")) { - pluginFolder = Paths.get(getParameters().getNamed().get("plugin")); + String pluginParam = getParameters().getNamed().get("plugin"); + for (String part : pluginParam.split(":")) { + pluginFolder = Paths.get(part); + setupPlugins(pluginFolder); + } } else { pluginFolder = ApplicationUtils.getApplication().getPath(PathType.LIBRARY); + setupPlugins(pluginFolder); } - setupPlugins(pluginFolder); /* * Load Data diff --git a/PlayWallNativeMac/.classpath b/PlayWallNativeMac/.classpath index 7d03288488cf3143f0a6a22231d22bac9bde9d1b..8c57eb3223230feab989aa8b9f629d671ba77223 100644 --- a/PlayWallNativeMac/.classpath +++ b/PlayWallNativeMac/.classpath @@ -3,7 +3,10 @@ <classpathentry kind="src" path="src"/> <classpathentry kind="src" path="test"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/YML"/> <classpathentry combineaccessrules="false" kind="src" path="/PlayWallCore"/> <classpathentry combineaccessrules="false" kind="src" path="/libUtils"/> + <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Plugins"/> + <classpathentry combineaccessrules="false" kind="src" path="/Updater"/> <classpathentry kind="output" path="bin"/> </classpath> diff --git a/PlayWallNativeMac/libNativeAudio.dylib b/PlayWallNativeMac/src/de/tobias/playpad/libNativeAudio.dylib similarity index 100% rename from PlayWallNativeMac/libNativeAudio.dylib rename to PlayWallNativeMac/src/de/tobias/playpad/libNativeAudio.dylib diff --git a/PlayWallNativeMac/src/de/tobias/playpad/NativeAudioMacHandler.java b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacHandler.java similarity index 97% rename from PlayWallNativeMac/src/de/tobias/playpad/NativeAudioMacHandler.java rename to PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacHandler.java index 066831def36afb550506bafaa2629c9e6e8f39dd..85e2368f1626d303894424847088d3a43199fd56 100644 --- a/PlayWallNativeMac/src/de/tobias/playpad/NativeAudioMacHandler.java +++ b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacHandler.java @@ -1,7 +1,8 @@ -package de.tobias.playpad; +package de.tobias.playpad.namac; import java.nio.file.Path; +import de.tobias.playpad.NativeAudio; import de.tobias.playpad.audio.AudioHandler; import de.tobias.playpad.audio.Peakable; import de.tobias.playpad.pad.PadStatus; diff --git a/PlayWallNativeMac/src/de/tobias/playpad/NativeAudioMacHandlerConnect.java b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacHandlerConnect.java similarity index 97% rename from PlayWallNativeMac/src/de/tobias/playpad/NativeAudioMacHandlerConnect.java rename to PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacHandlerConnect.java index 66245637d4cd9adcaee4cab2710107f6fa924809..1f70f7588854c5ee2ea078a3ea8eeca14c283c87 100644 --- a/PlayWallNativeMac/src/de/tobias/playpad/NativeAudioMacHandlerConnect.java +++ b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacHandlerConnect.java @@ -1,7 +1,8 @@ -package de.tobias.playpad; +package de.tobias.playpad.namac; import java.util.HashMap; +import de.tobias.playpad.NativeAudio; import de.tobias.playpad.NativeAudio.NativeAudioDelegate; import de.tobias.playpad.audio.AudioCapability; import de.tobias.playpad.audio.AudioHandler; diff --git a/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacPlugin.java b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacPlugin.java new file mode 100644 index 0000000000000000000000000000000000000000..c17700df5886fbb5b70cfdb30bcf07c6bbab364d --- /dev/null +++ b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacPlugin.java @@ -0,0 +1,7 @@ +package de.tobias.playpad.namac; + +import de.tobias.playpad.plugin.AdvancedPlugin; + +public interface NativeAudioMacPlugin extends AdvancedPlugin { + +} diff --git a/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacPluginImpl.java b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacPluginImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..f7ad651a68ba87a8a6bf3636b70b75c145a413ba --- /dev/null +++ b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacPluginImpl.java @@ -0,0 +1,81 @@ +package de.tobias.playpad.namac; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +import de.tobias.playpad.PlayPadPlugin; +import de.tobias.playpad.audio.AudioRegistry; +import de.tobias.playpad.plugin.Module; +import de.tobias.updater.client.Updatable; +import de.tobias.utils.application.App; +import de.tobias.utils.application.ApplicationUtils; +import de.tobias.utils.application.container.PathType; +import de.tobias.utils.util.IOUtils; +import de.tobias.utils.util.OS; +import net.xeoh.plugins.base.annotations.PluginImplementation; +import net.xeoh.plugins.base.annotations.events.PluginLoaded; +import net.xeoh.plugins.base.annotations.events.Shutdown; + +@PluginImplementation +public class NativeAudioMacPluginImpl implements NativeAudioMacPlugin { + + private static final String ASSETS = "de/tobias/playpad/"; + + private static final String NAME = "NativeAudioMac"; + private static final String IDENTIFIER = "de.tobias.playpad.namac.NativeAudioMacPluginImpl"; + + private Module module; + private Updatable updatable; + + @PluginLoaded + public void onLoaded(NativeAudioMacPlugin plugin) { + module = new Module(NAME, IDENTIFIER); + updatable = new NativeAudioMacUpdater(); + + try { + prepareBridging(); + + if (OS.isMacOS()) { + AudioRegistry registry = PlayPadPlugin.getRegistryCollection().getAudioHandlers(); + registry.registerComponent(new NativeAudioMacHandlerConnect(), "NativeMac", module); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void prepareBridging() throws IOException { + App app = ApplicationUtils.getApplication(); + Path resourceFolder = app.getPath(PathType.LIBRARY, "namac"); + if (Files.notExists(resourceFolder)) { + Files.createDirectories(resourceFolder); + } + + Path dest = copyResource(resourceFolder, ASSETS, "libNativeAudio.dylib"); + System.load(dest.toString()); + } + + private Path copyResource(Path resourceFolder, String packageName, String file) throws IOException { + Path dest = resourceFolder.resolve(file); + IOUtils.copy(getClass().getClassLoader().getResourceAsStream(packageName + file), dest); + System.out.println("Copied: " + file); + return dest; + } + + @Shutdown + public void onShutdown() { + + } + + @Override + public Module getModule() { + return module; + } + + @Override + public Updatable getUpdatable() { + return updatable; + } + +} diff --git a/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacUpdater.java b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacUpdater.java new file mode 100644 index 0000000000000000000000000000000000000000..487b700f97fe1493aefe9de9805c1f31452b42e3 --- /dev/null +++ b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacUpdater.java @@ -0,0 +1,79 @@ +package de.tobias.playpad.namac; + +import java.io.IOException; +import java.net.URL; +import java.nio.file.Path; + +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import de.tobias.updater.client.Updatable; +import de.tobias.updater.client.UpdateChannel; +import de.tobias.utils.application.App; +import de.tobias.utils.application.ApplicationUtils; +import de.tobias.utils.application.container.PathType; + +public class NativeAudioMacUpdater implements Updatable { + + private int newBuild; + private String newVersion; + private URL remotePath; + + private String localFileName; + private String name; + + @Override + public int getCurrentBuild() { + return 1; + } + + @Override + public String getCurrentVersion() { + return "1.0"; + } + + @Override + public int getNewBuild() { + return newBuild; + } + + @Override + public String getNewVersion() { + return newVersion; + } + + @Override + public void loadInformation(UpdateChannel channel) throws IOException { + App app = ApplicationUtils.getMainApplication(); + URL url = new URL(app.getInfo().getUpdateURL() + "/" + channel + "/plugins.yml"); + FileConfiguration config = YamlConfiguration.loadConfiguration(url.openStream()); + + newBuild = config.getInt("plugins.namac.build"); + newVersion = config.getString("plugins.namac.version"); + remotePath = new URL(config.getString("plugins.namac.url")); + localFileName = config.getString("plugins.namac.filename"); + name = config.getString("plugins.namac.name"); + + } + + @Override + public boolean isUpdateAvailable() { + return getCurrentBuild() < getNewBuild(); + } + + @Override + public URL getDownloadPath() { + return remotePath; + } + + @Override + public Path getLocalPath() { + return ApplicationUtils.getApplication().getPath(PathType.LIBRARY, localFileName); + } + + @Override + public String name() { + return name; + } + +}