Skip to content

Add EDMC-Rhinospotter plugin - #77

Merged
Rixxan merged 45 commits into
EDCD:mainfrom
Fumlop:add-rhinospotter
Oct 24, 2026
Merged

Rixxan merged 45 commits into
EDCD:mainfrom
Fumlop:add-rhinospotter

Conversation

@Fumlop

@Fumlop Fumlop commented Sep 11, 2026 •

Copy link
Copy Markdown
Contributor

Please complete the following information:

  • Name of the Plugin: RhinoSpotter
  • Description of the Plugin: Surface mining. It lists the landable bodies of the system you are in, grouped by what kind of body they are, with the materials that kind has been found to hold; bookmarks the patch you are standing on; draws a minimap of the ground driven in the SRV with those bookmarks on it; and puts an arrow over the game that guides you back to them.
  • Categories of the Plugin: Exploration, Utility
  • Last Version of EDMC Tested: 6.4.6

Additional context

  • Does the plugin require any non-standard requirements: No. Standard library, plus the Pillow and requests that ship inside EDMC.
  • What license is the plugin under: GPL-3.0-or-later

Please Confirm the Following...

  • I am an author for this plugin.
  • I have read and agree to the standards in our Standards Documentation.
  • I am authorized to submit this plugin for listing.
  • This plugin contains a VERSION constant or __version__ dunder in Semantic Versioning style.

What it does

RhinoScan answers "is there anything here worth landing on". It lists the
landable bodies of the current system, grouped by body type, with the three
materials that type of ground pays most for per mining location. Picking a
material filters the window to the ground that carries it. A body's bookmarks
open in the same window, grouped by mining location.

Bookmark records the patch you are standing on - body, material, rigs,
mining location, heading and coordinates - as a small JSON file. Guide
puts a click-through arrow over the game pointing back to it.

Minimap comes up in a corner of the game while you are in the SRV and
paints the ground driven within scanner range, with your bookmarks on it. Two
optional hotkeys, Ctrl+Alt+Z and Ctrl+Alt+B, let the player mark the mining
location's center and border; the map then shows the rings to drive. Each time
the SRV docks the map is saved as a picture that can be shared. The minimap and
the arrow hide whenever Elite is not the foreground window.

Where its data comes from

  • Bodies: Scan events from the commander's own journal, via
    journal_entry. Nothing is fetched for them.
  • Mining location counts: FSSBodySignals and SAASignalsFound, same
    place.
  • Position: Status.json, read once a second.
  • Material rates: one JSON table shipped beside load.py, measured over
    mining locations read by hand. It is data, not a lookup.
  • Systems, bookmarks and maps you made before: under
    %LOCALAPPDATA%\RhinoSpotter\, because EDMC replays the journal file it is
    watching and nothing older.

The only network requests go to its own GitHub repository, to say when a newer
version is out and fetch it on request: the releases/latest page redirect
for the version, codeload.github.com for the tag's zip. No community service
is queried, polled or scraped, and there is no API key, account or telemetry
anywhere in it.

On the standards

  • Licence: GPL-3.0-or-later, LICENSE in the repository root.
  • Version: VERSION and __version__ on load.py, currently 4.1.1,
    Major.Minor.Patch. A test fails if the constant and the changelog heading
    disagree.
  • Least privilege: the release archive is built from what git tracks and is
    about 640 KB, most of it README screenshots. Nothing is vendored.
  • System-wide hotkeys: Ctrl+Alt+Z and Ctrl+Alt+B are registered with
    RegisterHotKey while EDMC runs and released at plugin_stop. If another
    program holds one, it is skipped with a warning in the log.
  • Logging: warnings and errors only by default; RHINOSPOTTER_DEBUG=1 for
    more.
  • Nothing written outside its own folders: bookmarks, maps and cached scans
    go to %LOCALAPPDATA%\RhinoSpotter\, deliberately outside the plugin
    directory so a reinstall does not take a commander's records with it.

The archive

pluginZip points at the release asset rather than GitHub's generated zipball,
which unpacks to Fumlop-EDRhinoSpotter-<sha>. The attached archive unpacks to
RhinoSpotter/ with load.py directly inside, which is what EDMC needs.
pluginHash is the SHA256 of that archive, checked against the file GitHub
serves.

Tests: 357, no network, no game, no display - pytest from the plugin folder.

The branch has one commit per release that moved the entry; happy to squash it
to one, change anything here, split the categories differently, or fill in
pluginVT if you would rather it were set.

Fumlop and others added 30 commits September 11, 2026 20:36
An EDMC plugin for Elite Dangerous surface mining. It lists the landable
bodies of the system you are in, grouped by body type, with the materials that
type has been found to hold; and it records the patch you are standing on as a
card.

Everything it reads is the commander own journal plus one table shipped with
the plugin. It makes no network request except the update check against its
own GitHub releases.

GPL-3.0-or-later. VERSION and __version__ are on load.py, semantic versioning.
pluginZip and pluginHash are left empty until a release is attached.
The screenshot conversion moved out into its own plugin, which is a version
the entry should point at rather than the one before it.
pluginZip is the release asset rather than GitHub's own zipball, which unpacks
to a folder EDMC cannot load. pluginHash is the SHA256 of that archive.
Delete on a bookmark, an arrow over the game that guides back to a marked
patch, and the location filled in from the landing rather than typed.

Claude-Session: https://claude.ai/code/session_01GMHMeFPzvTGmvgGbU7Cfnf
Hash verified against the zip as GitHub serves it.

Claude-Session: https://claude.ai/code/session_01WaVgaUn6B1U8Ra8ASgAUWM
Zip hash verified against the release as GitHub serves it.
Zip hash verified against the release as GitHub serves it.
Zip hash verified against the release as GitHub serves it.
Zip hash verified against the release as GitHub serves it.
Zip hash verified against the release as GitHub serves it.
Zip hash verified against the release as GitHub serves it.
Zip hash verified against the release as GitHub serves it.
Zip hash verified against the release as GitHub serves it.
Zip hash verified against the release as GitHub serves it.
Zip hash verified against the release as GitHub serves it.
Zip hash verified against the release as GitHub serves it.
Zip hash verified against the release as GitHub serves it.
Zip hash verified against the release as GitHub serves it.
Zip hash verified against the release as GitHub serves it.
Zip hash verified against the release as GitHub serves it.
@Fumlop Fumlop changed the title Add rhinospotter Add EDMC-Rhinospotter plugin Oct 15, 2026
@github-actions

Copy link
Copy Markdown

Plugin validation: ✅ passed

Entry: plugins/RhinoSpotter.json (new listing)

Warnings

Checks

  • Zip SHA256 matches pluginHash (5,061,340 bytes)

Auto-merge: not eligible

  • New plugin listings need a maintainer review

@Rixxan
Rixxan merged commit 7dbe7c5 into EDCD:main Oct 24, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants