跳到正文

CardBoard SharkMI Fork

作者:SharkMI-0x7E

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

收藏

介绍

中文介绍正在准备中,下面暂时显示原文。

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
  1. Download Cardboard
  1. Place in mods folder
   server/
   ├── mods/
   │   ├── cardboard-xxx.jar    <-- put here
   │   └── fabric-api-xxx.jar   <-- Fabric API (required)
   ├── eula.txt
   └── server.properties
  1. 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:

  • Dashboard: https://sharkmi-0x7e.github.io/CardBoard/
  • Latest jar: ci-build release

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.

常见问题

CardBoard SharkMI Fork 支持哪些 Minecraft 版本?

CardBoard SharkMI Fork 支持 Minecraft Java 版 1.21.11,可用的加载器:Fabric。下载时注意选择和你游戏版本一致的文件。

CardBoard SharkMI Fork 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Fabric,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。运行环境:仅服务端。

评论

登录后评论和评分