A Paper plugin that implements the server side of the Just Enough Items (JEI) mod's network protocol.
JEIPaperBridge
A Paper plugin that implements the server side of the Just Enough Items (JEI) mod's network protocol.
JEI is a client mod for browsing items and recipes. Some of its features need JEI on the server too: moving a recipe's ingredients into the crafting grid with the + button, cheat mode (giving items, deleting items), and showing the server's recipes. On a Paper server JEI shows "The server must have JEI installed", cheat mode only works in creative mode, and JEI shows the default recipes built into the client with a chat warning.
JEIPaperBridge answers JEI from a Paper server. JEI clients connect as usual and get the same features they would get from a modded server. Players don't need to install anything extra, and players without JEI aren't affected.
Unofficial. This project is not affiliated with or endorsed by mezz or the JEI project. Please don't report problems with this plugin to the JEI issue tracker.
Requirements
- Server: Paper 26.3 (or a fork such as Purpur), Java 25. Spigot/CraftBukkit is not supported, Folia is untested.
- Client: JEI for Fabric 26.3 (tested with 31.16.0) with Fabric API. NeoForge clients should get recipe transfer and cheat mode too (untested), server recipes are only sent to Fabric clients.
Supported features
| JEI feature | Without the plugin | With the plugin |
|---|---|---|
| Recipe transfer (+ button, shift for the maximum) | "The server must have JEI installed" | Works in the player inventory, crafting table, crafter, furnace, smoker, blast furnace, brewing stand, anvil and smithing table |
| Cheat mode: give items (one or a stack, to the cursor or the inventory) | Creative mode only | Works for players that are allowed to cheat |
| Cheat mode: set hotbar items with number keys | Not available | Works for players that are allowed to cheat |
| Delete the item on the cursor | Not available | Works for players that are allowed to cheat |
| "No permission" message and turning cheat mode off | – | Same as with JEI on the server |
| Server recipes (datapacks, plugin recipes) | Default recipes from the client, chat warning | The server's recipes, no warning (Fabric clients) |
Not supported
- Recipe transfer for modded menus. Only the vanilla menus JEI has transfer handlers for are accepted.
- JEI's server config screen. The settings live in the plugin's
config.ymlinstead of JEI'sjei-server.ini. - Items that only exist through components (for example a renamed item from a datapack recipe) don't appear in JEI's item list. That's how JEI works on any server: recipe results are only shown in their recipes.
- Paper's exact-choice ingredients (
RecipeChoice.ExactChoicefrom plugins) are sent as their plain items.
Configuration
plugins/JEIPaperBridge/config.yml:
features:
recipe-transfer: true # JEI's "+" button
cheat-mode: true # give items, set hotbar items, delete the item on the cursor
recipe-sync: true # send the server's recipes to Fabric clients
# Who may use cheat mode, same as JEI's jei-server.ini. A player additionally needs the
# permission "jeipaperbridge.cheat" (default: op).
cheat-mode:
enable-for-op: true # operators (permission level 2, like /give)
enable-for-creative: true # players in creative mode
enable-for-give: false # players who can use the /give command
recipe-transfer:
# Fire a Bukkit InventoryClickEvent before moving items, so protection and GUI plugins can cancel the transfer.
fire-inventory-click-event: true
# Packets a single player may send per second, further packets are ignored.
max-packets-per-second: 20
# Log rejected packets and recipe sync details.
debug: false
Run /jeipb reload after editing. The recipes are sent again to all Fabric clients.
Commands and permissions
| Command | Description |
|---|---|
/jeipaperbridge reload |
Reload config.yml and resend the recipes |
/jeipaperbridge status |
List online players that use JEI, show the enabled features and the size of the recipe data |
Alias: /jeipb.
| Permission | Default | Description |
|---|---|---|
jeipaperbridge.admin |
op | Use /jeipaperbridge |
jeipaperbridge.cheat |
op | Use JEI's cheat mode. JEI's own rules from cheat-mode apply as well |
Players in creative mode who are not operators need jeipaperbridge.cheat explicitly (for example from a permissions plugin) to use cheat mode.
Security
JEI trusts the client more than a plugin should, so the plugin adds some checks on top of JEI's:
- Cheat mode requires JEI's own rules (operator, creative mode or
/givepermission, as configured) and thejeipaperbridge.cheatpermission. Given items must be valid, enabled in the world and not larger than their maximum stack size. Like/give, every give is announced to operators and logged to the console. - Recipe transfer only works in the menu the player has open, and only in menus JEI has vanilla transfer handlers for. All of JEI's slot checks are kept, ingredients may only come from the player's own inventory, and an
InventoryClickEventis fired first so protection and GUI plugins can cancel it. Items are only moved, never created. - Packets are rate-limited per player, lists are limited in size, and unknown or malformed packets are ignored instead of kicking the player.
How it works
The plugin registers JEI's network channels, decodes JEI's packets with Minecraft's own codecs and runs the server logic ported from JEI. For Fabric clients it also sends the server's recipes in Fabric API's recipe sync format right before each recipe update, which is where JEI on Fabric reads them. Details: How it works.
Links
- Source and documentation: https://github.com/MaxXLive/jei-paper-bridge
- Issues: https://github.com/MaxXLive/jei-paper-bridge/issues
Credits and license
JEI is made by mezz and contributors and is licensed under the MIT License. This plugin contains code ported from JEI (the packet formats, cheat mode and recipe transfer logic) and is distributed under the MIT License as well, with JEI's copyright notice included. See LICENSE.md.
The recipe sync format follows Fabric API (Apache License 2.0). No Fabric API code is included.
Pinned Versions
- R26.3
Pages
Requires on the client
Members
1Owner