Welcome to the Hangar Open Beta. Please report any issue you encounter on GitHub!
Avatar for Myst1cS04p

End OP abuse accusation - Forever.

Report Spycord?

Release
2.0.0

Myst1cS04p released Spycord version 2.0.0 on February 24, 2026

SpyCord v2.0.0 — Internal Rework

What's new

This release doesn't add new features — it's a full internal rebuild to make SpyCord stable, maintainable, and ready for everything coming next. If you're a server admin, the plugin works exactly the same as before. If you're a developer or you've been running into weird edge cases, this one's for you.


For server admins

Nothing breaking. Your config.yml is unchanged, your commands are the same, and your webhook still works. Drop in the new JAR and you're done.

Two separate JARs now. SpyCord now ships as two distinct builds: one for Paper servers and one for Spigot/Bukkit. Make sure you're using the right one for your platform — running the wrong JAR on the wrong server will cause a clean error on startup rather than silent weirdness.

Discord messages are no longer blocking. Previously, every log event waited for Discord's API to respond before continuing. On slow connections or during Discord outages, this could cause the server to hitch. Webhook calls are now fully async — fire and forget. If Discord is down, SpyCord logs the failure quietly and moves on.

Bug: version check no longer stalls startup. The GitHub version check was running on the main thread in some cases, which could slow down server startup by a second or two on bad network days. It now runs entirely in the background.


For developers

This release rewrites the internals from scratch as a three-module Gradle project: common/, bukkit/, and paper/.

common/ is now the brain. All business logic — what gets logged, when, and how — lives in pure Java with zero Bukkit or Paper imports. The EventPipeline is the single place where "should this be logged?" decisions get made. If you want to understand what SpyCord does, EventPipeline.java is the file to read.

Listeners are now just translators. In the old code, listeners were doing filtering, config reads, and logging calls all mixed together. Now they have one job: translate a Bukkit/Paper event into a platform-agnostic SpyEvent and hand it to the pipeline. No logic lives in listeners anymore.

Log sinks are composable. The old Logger class was formatting, writing to disk, and sending to Discord all in one method. That's been split into FileLogSink, DiscordLogSink, and CompositeLogSink — each doing one thing. Adding a new log destination in the future is a single class and one line in ServiceRegistry.

No more statics. SpyCord.getInstance() and SpyCord.getDiscord() are gone. Everything flows through a ServiceRegistry that gets constructed in onEnable() and passed down by reference. This makes the codebase significantly easier to reason about and opens the door for proper unit tests down the line.

Paper extends Bukkit. SpyCordPaper extends SpyCordBukkit, so all listener and service wiring is shared. Paper just layers Brigadier commands and the async version checker on top. This means bug fixes to core behaviour automatically apply to both platforms.


Full change list

Added

  • common/ module — platform-agnostic core with interfaces, events, pipeline, and sinks
  • bukkit/ module — Spigot/Bukkit 1.13+ implementation
  • paper/ module — Paper 1.21+ implementation, extends bukkit
  • IPluginConfig, IDiscordClient, ILogSink interfaces
  • SpyEvent domain event types: CommandExecutedEvent, GameModeChangedEvent, PlayerConnectionEvent
  • EventPipeline — centralised log filtering and dispatch
  • CompositeLogSink — fan-out to multiple log destinations
  • FileLogSink and DiscordLogSink as separate, composable sinks
  • ServiceRegistry — dependency wiring without statics
  • Tab completion for all /spycord subcommands on Bukkit

Changed

  • Discord webhook calls are now fully asynchronous (no more main-thread blocking)
  • GitHub version check runs off the main thread via async scheduler
  • VersionNotifier no longer owns its own BukkitRunnable — the platform schedules it
  • SpyCordPaper now extends SpyCordBukkit instead of JavaPlugin directly
  • Brigadier command classes each live in their own file (previously one monolithic class)

Removed

  • Static SpyCord.getInstance() and SpyCord.getDiscord() accessors
  • Monolithic Logger class (replaced by composable sinks)
  • Mixed business logic in listener classes

Fixed

  • Version check blocking server startup on slow network connections
  • Discord send failures causing unhandled exceptions on the main thread
  • Commands without explicit permission checks silently succeeding for non-ops

Updating from v1.1a

  1. Stop your server
  2. Remove SpyCord-1.1a-paper.jar from plugins/
  3. Add the correct JAR for your platform (-paper or -bukkit)
  4. Start your server — your existing config.yml will be picked up automatically
  5. No config changes needed

If anything behaves unexpectedly after updating, please open an issue here with your server version and platform.


Thanks for using SpyCord.

Information

Published onFebruary 24, 2026
Downloads0

Platforms

Paper Paper (1.20-1.21.11)