Fix
Hopper no longer overwrites a plugin that is already installed under a different filename. Before downloading a dependency, Hopper now reads plugin.yml / paper-plugin.yml from every jar in the plugins folder and skips the download if any of them declares the same plugin name.
This fixes cases where a server admin has a dev build or fork (for example, a custom ProtocolLib) that was being clobbered on every restart.
Details
- The scan excludes Hopper's own lockfile-tracked jar, so legitimate version upgrades still work when a constraint changes.
- When several jars declare the same plugin name, selection is deterministic: highest parsable version wins, with filename as tiebreaker.
- The descriptor is returned alongside the path so the jar is only opened once per match.