Skip to content
CardBoard SharkMI Fork

Quick rating

Community listing page, reviews may not be monitored by the author.

CardBoard SharkMI Fork

By SharkMI-0x7EOwner

No reviews yet

Run Bukkit/Spigot/Paper plugins on Fabric servers - SharkMI fork with enhanced mixin compatibility

Mod Loaders
Minecraft

About

Description

cardboard-box.png

Cardboard (SharkMI Fork)

Run Bukkit / Spigot / Paper plugins on Fabric servers

License Fabric Stars Build

中文

A personal maintenance fork.

Based on CardboardPowered/cardboard, kept by SharkMI for personal use on a private server and published as-is. It targets Minecraft 1.21.11 and contains compatibility fixes that have not been merged upstream.

Updates follow my own server's needs and are made on a best-effort basis — no commitment to long-term maintenance, no guarantee that a specific plugin or mod will work, and no promise to track upstream. It is a hobby project, not a supported product.

Issues & Feedback


Scope & Expectations

This fork exists for a plain reason: I hit problems on my own server that upstream had not fixed yet, so I fixed them. What is published here is that work, shared in case someone else runs into the same thing.

  • Personal project first. Changes follow what my own server needs; broader compatibility work happens on a best-effort basis.
  • Compatibility is not guaranteed. A given plugin or mod may or may not work.
  • Feedback is welcome. Open an issue if something breaks — just don't expect fast turnaround. A PR with a clear reproduction, and something I can verify, has the best chance of being merged.
  • The upstream project comes first. For general Cardboard questions, use the upstream project.

This is not meant to be "a more complete Cardboard". The upstream project is the real one; this is a patch set that happens to be public.


Fork Differences

This is a fork of the official Cardboard project with the following changes:

  • Enhanced mixin compatibility: Replaced @Overwrite annotations with precise injection methods (@Inject, @ModifyArg, @Redirect) to avoid conflicts with other Fabric mods
  • MiniMOTD compatibility: Fixed server status ping conflicts with MiniMOTD mod
  • carpet-tis-addition compatibility: Fixed boat item placement conflicts
  • Fabric API NPE fix: Resolved crash caused by Fabric API field injection timing
  • OWASP security scanning: Integrated OWASP Dependency-Check into the build pipeline
  • Mixin conflict detection tool: Built-in runtime scanner that reports mixin conflicts across all loaded mods at startup (console output, optional JSON report, optional auto-disable for fatal conflicts)

How compatibility fixes are made

Fixes target the root cause, not the symptom. When a specific plugin or mod triggers a failure, the goal is to fix the underlying mechanism so that the same class of failure no longer occurs — not to silence that one error and leave the next one waiting. A fix that only covers the case at hand is noted as such in the commit and release notes, so it is not mistaken for a general solution.


AI-Assisted Development

This fork is heavily AI-assisted. Except for the original code inherited from the upstream Cardboard project, most of the additional code in this repository is written by AI. Code is build-checked and smoke-tested before release, but is not fully manually reviewed.

Primary AI tools used:

A build and basic smoke tests are run before each release.


Overview

Cardboard is an implementation of the Bukkit/Spigot/Paper API for FabricMC. It allows you to run plugins from the Bukkit ecosystem on a Fabric modded server, so mods and plugins can run side by side.

Features

  • Support for Bukkit/Spigot/Paper plugins
  • Broad Bukkit API coverage (work in progress)
  • NMS (net.minecraft.server) support with automatic remapping
  • Compatible with Fabric API
  • Runtime mapping: intermediary (class_xxx)

Installation

Prerequisites

Software Version
Java 21+
Fabric Loader 0.18+
Minecraft 1.21.11

Steps

  1. Install Fabric Server

  • Download Cardboard

  • Place in mods folder

    server/
    ├── mods/
    │   ├── cardboard-xxx.jar    <-- put here
    │   └── fabric-api-xxx.jar   <-- Fabric API (required)
    ├── eula.txt
    └── server.properties
    
  • Start the server

    • The config file will be generated automatically on first launch
    • Place plugins in the plugins/ folder

Usage

Loading Plugins

Simply drop .jar plugin files into the plugins/ directory and restart the server.

Configuration

Configuration file is located at config/cardboard/cardboard-config.yml:

# Enable automatic conflict resolution
auto_conflict_resolution: true

# Force-disabled mixins (for resolving conflicts)
mixin-force-disable: []

# Mixin conflict detection (developer diagnostic, off by default)
runtime_conflict_scan: false
conflict_scan_json_output: false
auto_disable_fatal_conflicts: false

# Debug options
debug_mode: false
debug_print_event_call: false
debug_print_all_calls: false
debug_player: false
debug_other: false
debug_print_remaputil: false

For detailed conflict detection configuration, see docs/mixin-conflict-detection/user-guide.md.

Commands

Cardboard provides a /cardboard command (alias /cb) as the single entry point for its own subcommands, plus replacements for the vanilla /plugins and /version commands. Command output is bilingual (Chinese / English) — chosen automatically from the player's client locale, or set per-player with /cardboard lang <zh|en>.

/cardboard (alias /cb) — requires permission cardboard.command.admin:

Command Description
/cardboard help Show this help
/cardboard version Show server version information
/cardboard about Show Cardboard project information
/cardboard tps Show TPS / MSPT / memory / uptime
/cardboard worlds List all worlds and their player counts
/cardboard mods List loaded Fabric mods
/cardboard plugins [info|enable|disable <name>] Show plugins (optionally: info / enable / disable)
/cardboard debug [list|<flag>|all on|off] Debug flags: list / toggle / all on|off
/cardboard log <trace|debug|info|warn|error|fatal|all|off> Change the root log level at runtime
/cardboard doctor One-shot health check with suggestions
/cardboard dump Write a diagnostic snapshot (incl. thread dump) to a file
/cardboard compat List known mod compatibility rules
/cardboard reload Reload the Cardboard config
/cardboard lang <zh|en> Switch language: zh | en (self only)

Debug flags accepted by debug: verbose, events, player, other, remap, worldedit (each maps to a config key; list shows the current state and the key).

/plugins (alias /pl) — listing requires permission bukkit.command.plugins; enable / disable additionally require cardboard.command.admin:

Command Description
/plugins List plugins (shows "enabled N / total M" plus a colour legend: green = enabled, red = disabled)
/plugins info <name> Show details for a single plugin
/plugins enable <name> Enable a plugin at runtime
/plugins disable <name> Disable a plugin at runtime

/version (aliases ver, about) — requires permission bukkit.command.version:

Command Description
/version Show the server (and Cardboard) version
/version <plugin name> Show version information for a plugin

Console colours can be controlled with colored-console (default true) and console-color-pattern in cardboard-config.yml.

Building

Requirements

  • Java 21+
  • Gradle (wrapper included, no extra installation needed)

Build Commands

# Windows
.\gradlew.bat build

# Linux/Mac
./gradlew build

# Skip tests (faster)
.\gradlew.bat build -x test

Build artifacts are located in build/libs/.


Build Dashboard

Every push to main triggers a CI build (build.yml) that produces a jar named with the CI run number, e.g. CardBoard-Fork-SharkMI-1.21.11-2026.10.1+b82.jar — the +b82 is the build number (bN), the same idea as Citizens' Jenkins build numbers.

The latest successful jar is published to the ci-build release, and a small dashboard shows build history, per-day build counts, and a one-tap download:

The dashboard reads the GitHub Actions API directly from the browser. It is unauthenticated, so it is subject to GitHub's public rate limit (60 requests/hour per IP) — if it shows a rate-limit error, just wait a bit and refresh.

Version Support

This fork targets Minecraft 1.21.11 only — no older or newer versions are supported.

Minecraft Version Fabric Version Branch Status
1.21.11 0.18+ main Active

Java 21 Flags

This fork targets Minecraft 1.21.11 and requires Java 21. Java 21's module system blocks runtime reflection into internal JDK APIs, which is used by some plugins — e.g. the Libby dependency injection used by Citizens and similar plugins. Paper-like launchers include these flags by default, but hand-written start.sh scripts will fail without them.

Add the following to your server startup script:

JAVA_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED \
  --add-opens java.base/java.lang.invoke=ALL-UNNAMED \
  --add-opens java.base/java.lang.reflect=ALL-UNNAMED \
  --add-opens java.base/java.io=ALL-UNNAMED \
  --add-opens java.base/java.net=ALL-UNNAMED \
  --add-opens java.base/java.nio=ALL-UNNAMED \
  --add-opens java.base/java.util=ALL-UNNAMED \
  --add-opens java.base/java.util.concurrent=ALL-UNNAMED \
  --add-opens java.base/java.util.jar=ALL-UNNAMED \
  --add-opens java.base/java.util.zip=ALL-UNNAMED \
  --add-opens java.base/java.text=ALL-UNNAMED \
  --add-opens java.base/sun.nio.ch=ALL-UNNAMED \
  --add-opens java.base/sun.security.x509=ALL-UNNAMED \
  --add-opens java.rmi/sun.rmi.transport=ALL-UNNAMED"

Example start.sh:

java $JAVA_OPTS -jar fabric-server-launch.jar nogui

Offline Dependency Directory (plugins/libraries)

plugins/libraries/ is Cardboard's external dependency directory for plugins. Plugins such as Citizens use Libby to download their runtime dependencies (adventure, mocha, ph-tree, etc.) over the network on the fly. If your server has no internet access, or you would rather skip the download, drop the required dependency jars into plugins/libraries/. Cardboard's plugin class loader will fall back to loading classes from this directory when they are not found in the plugin jar or the global class loader, so no online download is needed.

Known Issues

  • Mixin Conflicts: Some Fabric mods using @Overwrite may conflict with Cardboard
    • Solution: Configure mixin-force-disable in cardboard-config.yml
    • NMS Plugins: Some plugins deeply dependent on NMS may not work
      • Cardboard supports automatic NMS remapping, but coverage is not 100%
    • Missing Events: A few Bukkit events are not yet implemented

Contributing

This is a personal project with limited time behind it, so contributions are appreciated but are not always quick to be handled.

Bug reports and pull requests are welcome — see CONTRIBUTING.md for build commands, commit conventions, Mixin rules, and the PR checklist.

  • Reporting bugs: open an Issue with your server log (latest.log), the Cardboard version, and steps to reproduce.
  • Submitting code: fork, branch, commit using Conventional Commits, then open a PR.

Documentation

Note: Comprehensive documentation for this fork is still being written. The following resources are available:

Credits

License

This project is licensed under the GPL-3.0 License. See LICENSE for details. SrgLib is licensed under MIT.