bombsquad-community / plugin-manager

A Plugin Manager for Bombsquad 1.7+
https://bombsquad-community.web.app/pluginmanager
Other
38 stars 28 forks source link
bombsquad mod-manager mods plugin-manager plugins

CI

Important: Please check out the api7 branch if you're using the game version (1.7.0 <= your game version <= 1.7.19) which uses API 7 plugins. If you're on game version (1.7.20 or a later version) where it uses API 8 plugins, then proceed with the rest of the README here.


Plugin-Manager

A plugin manager for the game - Bombsquad. Plugin manager is a plugin in itself, which makes further modding of your game more convenient by providing easier access to community created content.

DownloadIcon

Plugin Manager GIF

Features

Installation

There are two different ways the plugin manager can be installed:

  1. From dev console

    • Enable "Show Dev Console Button" from advance bombsquad settings
    • Paste the following code in dev console
      import urllib.request;import _babase;import os;url="https://github.com/bombsquad-community/plugin-manager/releases/latest/download/plugin_manager.py";plugin_path=os.path.join(_babase.env()["python_directory_user"],"plugin_manager.py");file=urllib.request.urlretrieve(url)[0];fl = open(file,'r');f=open(plugin_path, 'w+');f.write(fl.read());fl.close();f.close();print("SUCCESS")
    • "SUCCESS" will be shown in the console
  2. Another way is to add plugin_manager.py to your workspace. However, plugin manager self-updates will fail when installed using this way since the game will overrwrite the updated plugin manager, with the older version from workspace on the next sync. However, you can manually apply updates by copying the latest plugin manager's source code again to your workspace when using this method.

  3. Download plugin_manager.py to your mods directory (check it out by going into your game's Settings -> Advanced -> Show Mods Folder). This is the recommended way (read next method to know why). If you're on a newer version of Android (11 or above) and not rooted, it probably won't be possible to copy mods to game's mods folder. In this case, you can connect your Android phone to a computer and push plugin_manager.py using adb:

    $ adb push plugin_manager.py /sdcard/Android/data/net.froemling.bombsquad/files/mods/plugin_manager.py

Usage

Contributing

Submitting a Plugin

Example:

Let's say you wanna submit this new utility-type plugin named as sample_plugin.py:

# ba_meta require api 8
import babase

# ba_meta export babase.Plugin
class Main(babase.Plugin):
    def on_app_running(self):
        babase.screenmessage("Hi! I am a sample plugin!")

    def has_settings_ui(self):
        return True

    def show_settings_ui(self, source_widget):
        babase.screenmessage("You tapped my settings!")

You'll have to fork this repository and add your sample_plugin.py plugin file into the appropriate directory, which for utility plugin is plugins/utilities. After that, you'll have to add an entry for your plugin in plugins/utilities.json so that it gets picked up by the Plugin Manager in-game.

To do this, you'll have to edit the file and add something like this:

{
  "name": "Utilities",
  ...
  "plugins": {
    ...
    "sample_plugin": {
      "description": "Shows screenmessages!",
      "external_url": "",
      "authors": [
        {
          "name": "Alex",
          "email": "alex@example.com",
          "discord": null
        }
      ],
      "versions": {
        "1.0.0": null
      }
    },
    ...
  }
  ...
}

You can add whatever you wanna add to these fields. However, leave the value for your version key as null:

"1.0.0": null

Version values will automatically be populated through github-actions (along with formatting your code as per PEP8 style guide) once you open a pull request.

Save utilities.json with your modified changes and now you can create a pull request with the plugin you've added and the modified JSON metadata file!

Updating a Plugin

Example

Continuing the example from Submitting a Plugin section, if you also want to add a new screenmessage to the sample_plugin.py plugin after it has been submitted, edit sample_plugin.py with whatever changes you'd like:

diff --git a/plugins/utilities/sample_plugin.py b/plugins/utilities/sample_plugin.py
index ebb7dcc..da2b312 100644
--- a/plugins/utilities/sample_plugin.py
+++ b/plugins/utilities/sample_plugin.py
@@ -5,6 +5,7 @@ import babase
 class Main(babase.Plugin):
     def on_app_running(self):
         babase.screenmessage("Hi! I am a sample plugin!")

     def has_settings_ui(self):
         return True

     def show_settings_ui(self, source_widget):
-        babase.screenmessage("You tapped my settings!")
+        babase.screenmessage("Hey! This is my new screenmessage!")

To name this new version as 1.1.0, add "1.1.0": null, just above the previous plugin version in utilities.json:

diff --git a/plugins/utilities.json b/plugins/utilities.json
index d3fd5bc..34ce9ad 100644
--- a/plugins/utilities.json
+++ b/plugins/utilities.json
@@ -14,7 +14,10 @@
         }
       ],
       "versions": {
-        "1.0.0": null
+        "1.1.0": null,
+        "1.0.0": {
+          ...
+        }
       }
     },
     ...

That's it! Now you can make a pull request with both the updated sample_plugin.py and utilities.json files.

3rd Party Plugin Sources

Tests

Metadata tests are automatically executed whenever a pull request is opened and a commit is pushed. You can also run them locally by installing test dependencies with:

$ pip install -r test/pip_reqs.txt

and then executing the following in the project's root directory:

$ python -m unittest discover -v

Shout out!

If you've been with the community long enough, you may have known about the amazing Mrmaxmeier's mod manager, which unfortunately wasn't maintained and failed to keep up with the game's latest versions and API changes. Well, this is another attempt to create something similar, with a hope we as a community can continue to keep it up-to-date with the original game.

License