The right solution that I should have found first. Standard NeoForge + JEI tag, no mod or KubeJS hack needed.
Source-confirmed:
JEI defines Tags.HIDDEN_FROM_RECIPE_VIEWERS = c:hidden_from_recipe_viewers
IngredientVisibility.isIngredientVisible() consults this tag on every visibility check
NeoForge defines the same tag
REI and EMI follow the convention
Datapack file at data/c/tags/item/hidden_from_recipe_viewers.json adds both items. One file, zero mods.
The right solution that I should have found first. Standard NeoForge + JEI tag, no mod or KubeJS hack needed.
Source-confirmed:
- JEI defines `Tags.HIDDEN_FROM_RECIPE_VIEWERS = c:hidden_from_recipe_viewers`
- `IngredientVisibility.isIngredientVisible()` consults this tag on every visibility check
- NeoForge defines the same tag
- REI and EMI follow the convention
Datapack file at `data/c/tags/item/hidden_from_recipe_viewers.json` adds both items. One file, zero mods.
Stop hacking around the problem -- use the standard cross-recipe-
viewer hide convention that both NeoForge and JEI define.
Source-level confirmation:
mezz/JustEnoughItems @ 1.21.1
CommonApi/.../api/constants/Tags.java
HIDDEN_FROM_RECIPE_VIEWERS = c:hidden_from_recipe_viewers
Library/.../ingredients/IngredientVisibility.java
isIngredientVisible() calls
ingredientHelper.isHiddenFromRecipeViewersByTags(typedIngredient)
-> any item carrying this tag is hidden from JEI.
neoforged/NeoForge @ 1.21.x
common/Tags.java
Tags.Items.HIDDEN_FROM_RECIPE_VIEWERS = c:hidden_from_recipe_viewers
-> same tag, NeoForge agrees with JEI.
EMI / REI also respect this tag (common convention).
So the proper modpack-shippable fix is a single datapack file:
pack/overrides/world/datapacks/bns-fuel/data/c/tags/item/
hidden_from_recipe_viewers.json
{
"replace": false,
"values": [
"alexsmobs:shattered_dimensional_carver",
"alexsmobs:transmutation_table"
]
}
No mod, no KubeJS, no CraftTweaker, no Item Obliterator JEI integration
(which doesn't exist for 1.21.1 NeoForge anyway). Just the tag the
recipe-viewer ecosystem agreed on years ago.
Item Obliterator + Necronomicon stay in the pack for what they actually
deliver on 1.21.1: inventory-pickup block + villager-trade removal +
right-click cancellation. The Capsid recipe override stays too as the
creation block.
The full disable stack now:
- Tag (this commit) -> Hidden from JEI / REI / EMI
- Datapack capsid recipe -> Can't be created in-world
- Item Obliterator -> Can't be picked up / right-clicked
if obtained via /give or creative
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Matt
merged commit 678e63497c into main2026-06-01 19:48:37 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The right solution that I should have found first. Standard NeoForge + JEI tag, no mod or KubeJS hack needed.
Source-confirmed:
Tags.HIDDEN_FROM_RECIPE_VIEWERS = c:hidden_from_recipe_viewersIngredientVisibility.isIngredientVisible()consults this tag on every visibility checkDatapack file at
data/c/tags/item/hidden_from_recipe_viewers.jsonadds both items. One file, zero mods.Stop hacking around the problem -- use the standard cross-recipe- viewer hide convention that both NeoForge and JEI define. Source-level confirmation: mezz/JustEnoughItems @ 1.21.1 CommonApi/.../api/constants/Tags.java HIDDEN_FROM_RECIPE_VIEWERS = c:hidden_from_recipe_viewers Library/.../ingredients/IngredientVisibility.java isIngredientVisible() calls ingredientHelper.isHiddenFromRecipeViewersByTags(typedIngredient) -> any item carrying this tag is hidden from JEI. neoforged/NeoForge @ 1.21.x common/Tags.java Tags.Items.HIDDEN_FROM_RECIPE_VIEWERS = c:hidden_from_recipe_viewers -> same tag, NeoForge agrees with JEI. EMI / REI also respect this tag (common convention). So the proper modpack-shippable fix is a single datapack file: pack/overrides/world/datapacks/bns-fuel/data/c/tags/item/ hidden_from_recipe_viewers.json { "replace": false, "values": [ "alexsmobs:shattered_dimensional_carver", "alexsmobs:transmutation_table" ] } No mod, no KubeJS, no CraftTweaker, no Item Obliterator JEI integration (which doesn't exist for 1.21.1 NeoForge anyway). Just the tag the recipe-viewer ecosystem agreed on years ago. Item Obliterator + Necronomicon stay in the pack for what they actually deliver on 1.21.1: inventory-pickup block + villager-trade removal + right-click cancellation. The Capsid recipe override stays too as the creation block. The full disable stack now: - Tag (this commit) -> Hidden from JEI / REI / EMI - Datapack capsid recipe -> Can't be created in-world - Item Obliterator -> Can't be picked up / right-clicked if obtained via /give or creative Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>