All Mods Resource Packs Data Packs Shaders Modpacks Plugins
Polymorphic Refined Storage

Polymorphic Refined Storage

by vyrriox • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

RS Polymorph: a Refined Storage network at dusk, its Crafting Grid and Pattern Grid glowing / RS Polymorph : un réseau Refined Storage au crépuscule, sa grille de craft et sa grille de patrons allumées

Website: Arcadia Wiki: Arcadia Source: GitHub Donate: Stripe

Minecraft: 1.21.1 | 26.1.2 Loaders: NeoForge | Fabric For: Refined Storage

English

RS Polymorph lets you choose which recipe the Refined Storage Crafting Grid and Pattern Grid use when several recipes share the same ingredients. No Polymorph needed.

Stop letting Refined Storage pick the wrong recipe for you.

What It Does

Two oak planks match three recipes; the recipe button opens a popup, sticks are picked and the grid crafts sticks instead of a ladder

Recipe button: next to the grid, it lists every recipe that matches your ingredients.

Never miss a conflict: a red warning and a gold halo show when more than one recipe matches.

Live preview: the output changes the moment you pick, and the choice is kept per grid.

In the Pattern Grid, sticks are picked over the ladder, the pattern is printed and its tooltip reads 4x Stick

Pattern Grid: the same button, and your choice is written into the printed pattern.

The right craft: autocrafting uses the recipe stored on the pattern, not the first match.

First-open tutorial: a one-time card explains it, in English or French.

Getting Started

1. Install Refined Storage and the RS Polymorph jar for your version and loader, client and server.

2. Open a Crafting Grid or a Pattern Grid and place ingredients.

3. When the recipe button glows, click it and pick your recipe.

Compatibility

Minecraft NeoForge Fabric Refined Storage
1.21.1 Yes Yes 2.x
26.1.2 Yes No 3.x

Optional: Refined Storage - Quartz Arsenal 1.0.7 or later, for its Wireless Crafting Grid.

A bug or an idea? Ask on Discord or open an issue on GitHub.

 

Français

RS Polymorph vous laisse choisir la recette qu'utilisent la grille de craft et la grille de patrons de Refined Storage quand plusieurs recettes partagent les mêmes ingrédients. Aucun besoin de Polymorph.

Ne laissez plus Refined Storage choisir la mauvaise recette à votre place.

Ce Qu'il Fait

Bouton de recette : à côté de la grille, il liste chaque recette qui correspond à vos ingrédients.

Aucun conflit manqué : un avertissement rouge et un halo doré signalent plusieurs recettes.

Aperçu immédiat : la sortie change dès votre choix, et il est mémorisé pour chaque grille.

Grille de patrons : le même bouton, et votre choix est inscrit dans le patron imprimé.

Le bon craft : l'autocraft utilise la recette inscrite sur le patron, pas la première trouvée.

Tutoriel à l'ouverture : une carte unique l'explique, en anglais ou en français.

Premiers Pas

1. Installez Refined Storage et le jar RS Polymorph de votre version et loader, client et serveur.

2. Ouvrez une grille de craft ou une grille de patrons et placez vos ingrédients.

3. Quand le bouton de recette s'allume, cliquez et choisissez votre recette.

Compatibilité

Minecraft NeoForge Fabric Refined Storage
1.21.1 Oui Oui 2.x
26.1.2 Oui Non 3.x

Optionnel : Refined Storage - Quartz Arsenal 1.0.7 ou plus, pour sa grille de craft sans fil.

Un bug ou une idée ? Demandez sur Discord ou ouvrez un ticket sur GitHub.

Official Hosting Partner / Hébergeur Partenaire Officiel

Run your own modded server with Refined Storage and RS Polymorph on hosting built for modpacks.
Lancez votre serveur moddé avec Refined Storage et RS Polymorph sur un hébergement pensé pour les modpacks.

WabbaNode

 

Play Arcadia V2: Echoes of Power / Jouez à Arcadia V2 : Echoes of Power

RS Polymorph is made by Team Arcadia. Join our modpack and find its server, the website and the wiki.
RS Polymorph est fait par la Team Arcadia. Rejoignez notre modpack et retrouvez son serveur, le site et le wiki.

Arcadia V2: Echoes of Power modpack

Play now: Modpack

Support the Project / Soutenir le Projet

Your support keeps the project alive.
Votre soutien fait vivre le projet.

Donate: Stripe

Author / Auteur: vyrriox  |  License / Licence: Apache 2.0

How to Install Polymorphic Refined Storage (Mod)

Polymorphic Refined Storage by vyrriox is verified for Fabric, Neoforge across Minecraft versions 1.21.1, 26.1.2 (latest release: 1.2.2+neoforge-26.1.2, file size: 60 KB). Follow the steps below to install it safely from ModCraft.tv:

  1. Click the Download button above and select your Minecraft version (1.21.1, 26.1.2) and platform (Fabric, Neoforge).
  2. Make sure you have the compatible loader or environment installed for Fabric, Neoforge.
  3. Move the downloaded Polymorphic Refined Storage file into your Minecraft .minecraft/mods folder and launch the game.

All Versions

+ Add Version
## [1.2.2] - 2026-06-29

### Added

  • Non-unique craft warning on the recipe button (issue #3)** — When the open grid currently matches more than one recipe, the recipe-selection side button now flags it so the choice is never missed and the wrong item is not crafted by accident. It uses Refined Storage's native warning idiom — a red warning icon drawn on the button plus a red explanatory line appended to its tooltip — and additionally pulses a soft gold halo around the button to draw the eye to it (players reported not noticing the button at all). The pulse stops once the popup is open. The indicator clears automatically when the craft becomes unique. Implemented on all three jars (1.21.1 Fabric/NeoForge, 26.1.2 NeoForge).

### Removed

  • Debug "Test Stick" items** — The two development-only items (test_stick_1 / test_stick_2), which existed only to demonstrate the multi-recipe case, were removed from the released mod: their registration (both loaders, both MC lines), creative-tab entries, recipes, models, textures, and lang strings are gone. Real packs already provide genuine non-unique crafts, so the debug items served no purpose in a release build.

### Ajouts

  • Avertissement de craft non unique sur le bouton de recette (issue #3)** — Quand la grille ouverte correspond à plusieurs recettes, le bouton latéral de sélection le signale désormais pour que le choix ne soit jamais manqué et qu'un mauvais objet ne soit pas crafté par accident. Il reprend l'idiome d'avertissement natif de Refined Storage — une icône d'avertissement rouge dessinée sur le bouton plus une ligne rouge explicative ajoutée à son infobulle — et fait en plus pulser un léger halo doré autour du bouton pour attirer l'œil (des joueurs signalaient ne pas remarquer le bouton du tout). La pulsation s'arrête dès que le popup est ouvert. L'indicateur disparaît automatiquement quand le craft redevient unique. Implémenté sur les trois jars (1.21.1 Fabric/NeoForge, 26.1.2 NeoForge).

### Suppressions

  • Objets de débogage « Bâton de test »** — Les deux objets réservés au développement (test_stick_1 / test_stick_2), qui n'existaient que pour illustrer le cas multi-recettes, ont été retirés du mod publié : leur enregistrement (deux loaders, deux lignes MC), leurs entrées dans l'onglet créatif, leurs recettes, modèles, textures et chaînes de traduction ont disparu. Les packs réels fournissent déjà de vrais crafts non uniques, ces objets de débogage n'avaient donc aucune utilité dans un build de publication.
## [1.2.2] - 2026-06-29

### Added

  • Non-unique craft warning on the recipe button (issue #3)** — When the open grid currently matches more than one recipe, the recipe-selection side button now flags it so the choice is never missed and the wrong item is not crafted by accident. It uses Refined Storage's native warning idiom — a red warning icon drawn on the button plus a red explanatory line appended to its tooltip — and additionally pulses a soft gold halo around the button to draw the eye to it (players reported not noticing the button at all). The pulse stops once the popup is open. The indicator clears automatically when the craft becomes unique. Implemented on all three jars (1.21.1 Fabric/NeoForge, 26.1.2 NeoForge).

### Removed

  • Debug "Test Stick" items** — The two development-only items (test_stick_1 / test_stick_2), which existed only to demonstrate the multi-recipe case, were removed from the released mod: their registration (both loaders, both MC lines), creative-tab entries, recipes, models, textures, and lang strings are gone. Real packs already provide genuine non-unique crafts, so the debug items served no purpose in a release build.

### Ajouts

  • Avertissement de craft non unique sur le bouton de recette (issue #3)** — Quand la grille ouverte correspond à plusieurs recettes, le bouton latéral de sélection le signale désormais pour que le choix ne soit jamais manqué et qu'un mauvais objet ne soit pas crafté par accident. Il reprend l'idiome d'avertissement natif de Refined Storage — une icône d'avertissement rouge dessinée sur le bouton plus une ligne rouge explicative ajoutée à son infobulle — et fait en plus pulser un léger halo doré autour du bouton pour attirer l'œil (des joueurs signalaient ne pas remarquer le bouton du tout). La pulsation s'arrête dès que le popup est ouvert. L'indicateur disparaît automatiquement quand le craft redevient unique. Implémenté sur les trois jars (1.21.1 Fabric/NeoForge, 26.1.2 NeoForge).

### Suppressions

  • Objets de débogage « Bâton de test »** — Les deux objets réservés au développement (test_stick_1 / test_stick_2), qui n'existaient que pour illustrer le cas multi-recettes, ont été retirés du mod publié : leur enregistrement (deux loaders, deux lignes MC), leurs entrées dans l'onglet créatif, leurs recettes, modèles, textures et chaînes de traduction ont disparu. Les packs réels fournissent déjà de vrais crafts non uniques, ces objets de débogage n'avaient donc aucune utilité dans un build de publication.
## [1.2.2] - 2026-06-29

### Added

  • Non-unique craft warning on the recipe button (issue #3)** — When the open grid currently matches more than one recipe, the recipe-selection side button now flags it so the choice is never missed and the wrong item is not crafted by accident. It uses Refined Storage's native warning idiom — a red warning icon drawn on the button plus a red explanatory line appended to its tooltip — and additionally pulses a soft gold halo around the button to draw the eye to it (players reported not noticing the button at all). The pulse stops once the popup is open. The indicator clears automatically when the craft becomes unique. Implemented on all three jars (1.21.1 Fabric/NeoForge, 26.1.2 NeoForge).

### Removed

  • Debug "Test Stick" items** — The two development-only items (test_stick_1 / test_stick_2), which existed only to demonstrate the multi-recipe case, were removed from the released mod: their registration (both loaders, both MC lines), creative-tab entries, recipes, models, textures, and lang strings are gone. Real packs already provide genuine non-unique crafts, so the debug items served no purpose in a release build.

### Ajouts

  • Avertissement de craft non unique sur le bouton de recette (issue #3)** — Quand la grille ouverte correspond à plusieurs recettes, le bouton latéral de sélection le signale désormais pour que le choix ne soit jamais manqué et qu'un mauvais objet ne soit pas crafté par accident. Il reprend l'idiome d'avertissement natif de Refined Storage — une icône d'avertissement rouge dessinée sur le bouton plus une ligne rouge explicative ajoutée à son infobulle — et fait en plus pulser un léger halo doré autour du bouton pour attirer l'œil (des joueurs signalaient ne pas remarquer le bouton du tout). La pulsation s'arrête dès que le popup est ouvert. L'indicateur disparaît automatiquement quand le craft redevient unique. Implémenté sur les trois jars (1.21.1 Fabric/NeoForge, 26.1.2 NeoForge).

### Suppressions

  • Objets de débogage « Bâton de test »** — Les deux objets réservés au développement (test_stick_1 / test_stick_2), qui n'existaient que pour illustrer le cas multi-recettes, ont été retirés du mod publié : leur enregistrement (deux loaders, deux lignes MC), leurs entrées dans l'onglet créatif, leurs recettes, modèles, textures et chaînes de traduction ont disparu. Les packs réels fournissent déjà de vrais crafts non uniques, ces objets de débogage n'avaient donc aucune utilité dans un build de publication.
## [1.2.1] - 2026-06-14

### Fixed

  • Recipe-selection popup drawn under the grid items (z-order)** — The recipe-selection popup rendered *behind* the crafting-grid item icons, so the grid items showed through it and the recipe icons could not be read or clicked. Cause: Minecraft renders all GUI item icons on a fixed high depth layer (renderItem translates to Z=232 on 1.21.1; the carried-item / tooltip phases composite on later strata on 26.x), so even though the popup was drawn at the screen's render tail its flat background sat below the items. On **1.21.1** the whole popup (and the first-open tutorial card) is now drawn inside a pose pushed to Z=400, above the item layer. On **26.1.2** the popup render was moved off RS's extractContents (the first of four extract phases) onto vanilla AbstractContainerScreen.extractRenderState at RETURN — the only point that runs after extractContents → extractCarriedItem → extractSnapbackItem → extractTooltip — via a new MixinScreenPopupRender, so the popup composites on the topmost stratum. The recipe popup is now fully on top and selectable on all three jars.

### Ajouts / Correctifs / Modifications / Performance (French mirror)

### Correctifs

  • Popup de sélection de recette affichée sous les items de la grille (ordre de profondeur)** — La popup de sélection s'affichait *derrière* les icônes d'items de la grille de craft : les items transparaissaient par-dessus et les icônes de recette étaient illisibles et incliquables. Cause : Minecraft rend toutes les icônes d'items de GUI sur une couche de profondeur élevée fixe (renderItem translate en Z=232 sur 1.21.1 ; les phases item-porté / infobulle se composent sur des strates ultérieures en 26.x), donc même dessinée en fin de rendu, le fond plat de la popup restait sous les items. Sur **1.21.1**, toute la popup (et la carte de tutoriel de première ouverture) est désormais dessinée dans une pose poussée à Z=400, au-dessus de la couche des items. Sur **26.1.2**, le rendu de la popup a été déplacé de extractContents de RS (la première des quatre phases d'extraction) vers AbstractContainerScreen.extractRenderState vanilla en RETURN — le seul point exécuté après extractContents → extractCarriedItem → extractSnapbackItem → extractTooltip — via un nouveau MixinScreenPopupRender, pour que la popup se compose sur la strate la plus haute. La popup de recette est maintenant entièrement au premier plan et sélectionnable sur les trois jars.

## [1.2.1] - 2026-06-14

### Fixed

  • Recipe-selection popup drawn under the grid items (z-order)** — The recipe-selection popup rendered *behind* the crafting-grid item icons, so the grid items showed through it and the recipe icons could not be read or clicked. Cause: Minecraft renders all GUI item icons on a fixed high depth layer (renderItem translates to Z=232 on 1.21.1; the carried-item / tooltip phases composite on later strata on 26.x), so even though the popup was drawn at the screen's render tail its flat background sat below the items. On **1.21.1** the whole popup (and the first-open tutorial card) is now drawn inside a pose pushed to Z=400, above the item layer. On **26.1.2** the popup render was moved off RS's extractContents (the first of four extract phases) onto vanilla AbstractContainerScreen.extractRenderState at RETURN — the only point that runs after extractContents → extractCarriedItem → extractSnapbackItem → extractTooltip — via a new MixinScreenPopupRender, so the popup composites on the topmost stratum. The recipe popup is now fully on top and selectable on all three jars.

### Ajouts / Correctifs / Modifications / Performance (French mirror)

### Correctifs

  • Popup de sélection de recette affichée sous les items de la grille (ordre de profondeur)** — La popup de sélection s'affichait *derrière* les icônes d'items de la grille de craft : les items transparaissaient par-dessus et les icônes de recette étaient illisibles et incliquables. Cause : Minecraft rend toutes les icônes d'items de GUI sur une couche de profondeur élevée fixe (renderItem translate en Z=232 sur 1.21.1 ; les phases item-porté / infobulle se composent sur des strates ultérieures en 26.x), donc même dessinée en fin de rendu, le fond plat de la popup restait sous les items. Sur **1.21.1**, toute la popup (et la carte de tutoriel de première ouverture) est désormais dessinée dans une pose poussée à Z=400, au-dessus de la couche des items. Sur **26.1.2**, le rendu de la popup a été déplacé de extractContents de RS (la première des quatre phases d'extraction) vers AbstractContainerScreen.extractRenderState vanilla en RETURN — le seul point exécuté après extractContents → extractCarriedItem → extractSnapbackItem → extractTooltip — via un nouveau MixinScreenPopupRender, pour que la popup se compose sur la strate la plus haute. La popup de recette est maintenant entièrement au premier plan et sélectionnable sur les trois jars.

## [1.2.1] - 2026-06-14

### Fixed

  • Recipe-selection popup drawn under the grid items (z-order)** — The recipe-selection popup rendered *behind* the crafting-grid item icons, so the grid items showed through it and the recipe icons could not be read or clicked. Cause: Minecraft renders all GUI item icons on a fixed high depth layer (renderItem translates to Z=232 on 1.21.1; the carried-item / tooltip phases composite on later strata on 26.x), so even though the popup was drawn at the screen's render tail its flat background sat below the items. On **1.21.1** the whole popup (and the first-open tutorial card) is now drawn inside a pose pushed to Z=400, above the item layer. On **26.1.2** the popup render was moved off RS's extractContents (the first of four extract phases) onto vanilla AbstractContainerScreen.extractRenderState at RETURN — the only point that runs after extractContents → extractCarriedItem → extractSnapbackItem → extractTooltip — via a new MixinScreenPopupRender, so the popup composites on the topmost stratum. The recipe popup is now fully on top and selectable on all three jars.

### Ajouts / Correctifs / Modifications / Performance (French mirror)

### Correctifs

  • Popup de sélection de recette affichée sous les items de la grille (ordre de profondeur)** — La popup de sélection s'affichait *derrière* les icônes d'items de la grille de craft : les items transparaissaient par-dessus et les icônes de recette étaient illisibles et incliquables. Cause : Minecraft rend toutes les icônes d'items de GUI sur une couche de profondeur élevée fixe (renderItem translate en Z=232 sur 1.21.1 ; les phases item-porté / infobulle se composent sur des strates ultérieures en 26.x), donc même dessinée en fin de rendu, le fond plat de la popup restait sous les items. Sur **1.21.1**, toute la popup (et la carte de tutoriel de première ouverture) est désormais dessinée dans une pose poussée à Z=400, au-dessus de la couche des items. Sur **26.1.2**, le rendu de la popup a été déplacé de extractContents de RS (la première des quatre phases d'extraction) vers AbstractContainerScreen.extractRenderState vanilla en RETURN — le seul point exécuté après extractContents → extractCarriedItem → extractSnapbackItem → extractTooltip — via un nouveau MixinScreenPopupRender, pour que la popup se compose sur la strate la plus haute. La popup de recette est maintenant entièrement au premier plan et sélectionnable sur les trois jars.

## [1.2.0] - 2026-06-05

### Added

  • Standalone — no Polymorph dependency** — RS Polymorph no longer requires the Polymorph mod. The recipe-selection UI (side button + popup) and the per-grid selection persistence are now provided entirely by RS Polymorph itself. The side button is the native Refined Storage AbstractSideButtonWidget; the popup is a self-contained RecipeSelectorPopup (own item-grid widget + render/click mixin on the grid screen); the per-grid choice is persisted on the grid block entity via loader Data Attachments (NeoForge AttachmentType / Fabric persistent attachment) behind a Services.GRID_STORE abstraction. The printed-pattern tag stays a vanilla DataComponentType. The Polymorph-only classes (RsGridRecipeData, MixinSelectionWidget, MixinRecipeManagerSafety) were removed. Result: a true Refined Storage add-on that works everywhere RS does, with no third-party recipe-selection dependency.
  • Minecraft 26.1.2 / Refined Storage 3.2.0 (NeoForge)** — A parallel build targets the new Minecraft 26.1.2 (year-based versioning, Java 25) against Refined Storage 3.2.0, sharing the 1.21.1 codebase. RS 3.x kept the same com.refinedmods.refinedstorage.common.* structure, so the mixins carry over; the few MC 26.x renames (ResourceLocation→Identifier, GuiGraphics→GuiGraphicsExtractor) are applied by a build-time source remap, and the handful of files touching the reworked recipe API (server.getRecipeManager()/RS3 RecipeProvider, single-arg assemble, RecipeHolder.id() now a ResourceKey) and the new two-phase GUI render pipeline (extractRenderState/extractContents) are forked under common-261. MixinPatternResolver is re-targeted with @WrapOperation onto RS3's Platform.getClientRecipeProvider().getRecipesFor(...). Build with Gradle on JDK 25: ./gradlew :neoforge-261:build -Dorg.gradle.java.home=<jdk25>.
  • Fabric support — one mod, two loaders** — RS Polymorph now ships for **Fabric** in addition to NeoForge, both for Minecraft 1.21.1. The project was restructured into a MultiLoader layout (common + neoforge + fabric): all gameplay logic and every mixin live in common and are shared verbatim by both loaders. Because the mixins target Refined Storage 2 and Polymorph classes (never Minecraft) with remap=false, and both RS2 and Polymorph ship their public surface in a shared cross-loader module, the injection logic resolves byte-for-byte identically on NeoForge and Fabric with no per-loader rewrite.
  • Loader-agnostic core** — Introduced a small platform abstraction so common never references a loader API: Services/NetworkPlatform resolve the active loader's networking via ServiceLoader, the selected_recipe data component is registered by each loader and injected into the shared core, and SelectRecipePacket exposes a pure applyOnServer(ServerPlayer, ResourceLocation) that each loader drives from its own packet receiver (NeoForge IPayloadContext, Fabric `ServerPlayNetwor
...
## [1.2.0] - 2026-06-05

### Added

  • Standalone — no Polymorph dependency** — RS Polymorph no longer requires the Polymorph mod. The recipe-selection UI (side button + popup) and the per-grid selection persistence are now provided entirely by RS Polymorph itself. The side button is the native Refined Storage AbstractSideButtonWidget; the popup is a self-contained RecipeSelectorPopup (own item-grid widget + render/click mixin on the grid screen); the per-grid choice is persisted on the grid block entity via loader Data Attachments (NeoForge AttachmentType / Fabric persistent attachment) behind a Services.GRID_STORE abstraction. The printed-pattern tag stays a vanilla DataComponentType. The Polymorph-only classes (RsGridRecipeData, MixinSelectionWidget, MixinRecipeManagerSafety) were removed. Result: a true Refined Storage add-on that works everywhere RS does, with no third-party recipe-selection dependency.
  • Minecraft 26.1.2 / Refined Storage 3.2.0 (NeoForge)** — A parallel build targets the new Minecraft 26.1.2 (year-based versioning, Java 25) against Refined Storage 3.2.0, sharing the 1.21.1 codebase. RS 3.x kept the same com.refinedmods.refinedstorage.common.* structure, so the mixins carry over; the few MC 26.x renames (ResourceLocation→Identifier, GuiGraphics→GuiGraphicsExtractor) are applied by a build-time source remap, and the handful of files touching the reworked recipe API (server.getRecipeManager()/RS3 RecipeProvider, single-arg assemble, RecipeHolder.id() now a ResourceKey) and the new two-phase GUI render pipeline (extractRenderState/extractContents) are forked under common-261. MixinPatternResolver is re-targeted with @WrapOperation onto RS3's Platform.getClientRecipeProvider().getRecipesFor(...). Build with Gradle on JDK 25: ./gradlew :neoforge-261:build -Dorg.gradle.java.home=<jdk25>.
  • Fabric support — one mod, two loaders** — RS Polymorph now ships for **Fabric** in addition to NeoForge, both for Minecraft 1.21.1. The project was restructured into a MultiLoader layout (common + neoforge + fabric): all gameplay logic and every mixin live in common and are shared verbatim by both loaders. Because the mixins target Refined Storage 2 and Polymorph classes (never Minecraft) with remap=false, and both RS2 and Polymorph ship their public surface in a shared cross-loader module, the injection logic resolves byte-for-byte identically on NeoForge and Fabric with no per-loader rewrite.
  • Loader-agnostic core** — Introduced a small platform abstraction so common never references a loader API: Services/NetworkPlatform resolve the active loader's networking via ServiceLoader, the selected_recipe data component is registered by each loader and injected into the shared core, and SelectRecipePacket exposes a pure applyOnServer(ServerPlayer, ResourceLocation) that each loader drives from its own packet receiver (NeoForge IPayloadContext, Fabric `ServerPlayNetwor
...
## [1.2.0] - 2026-06-05

### Added

  • Standalone — no Polymorph dependency** — RS Polymorph no longer requires the Polymorph mod. The recipe-selection UI (side button + popup) and the per-grid selection persistence are now provided entirely by RS Polymorph itself. The side button is the native Refined Storage AbstractSideButtonWidget; the popup is a self-contained RecipeSelectorPopup (own item-grid widget + render/click mixin on the grid screen); the per-grid choice is persisted on the grid block entity via loader Data Attachments (NeoForge AttachmentType / Fabric persistent attachment) behind a Services.GRID_STORE abstraction. The printed-pattern tag stays a vanilla DataComponentType. The Polymorph-only classes (RsGridRecipeData, MixinSelectionWidget, MixinRecipeManagerSafety) were removed. Result: a true Refined Storage add-on that works everywhere RS does, with no third-party recipe-selection dependency.
  • Minecraft 26.1.2 / Refined Storage 3.2.0 (NeoForge)** — A parallel build targets the new Minecraft 26.1.2 (year-based versioning, Java 25) against Refined Storage 3.2.0, sharing the 1.21.1 codebase. RS 3.x kept the same com.refinedmods.refinedstorage.common.* structure, so the mixins carry over; the few MC 26.x renames (ResourceLocation→Identifier, GuiGraphics→GuiGraphicsExtractor) are applied by a build-time source remap, and the handful of files touching the reworked recipe API (server.getRecipeManager()/RS3 RecipeProvider, single-arg assemble, RecipeHolder.id() now a ResourceKey) and the new two-phase GUI render pipeline (extractRenderState/extractContents) are forked under common-261. MixinPatternResolver is re-targeted with @WrapOperation onto RS3's Platform.getClientRecipeProvider().getRecipesFor(...). Build with Gradle on JDK 25: ./gradlew :neoforge-261:build -Dorg.gradle.java.home=<jdk25>.
  • Fabric support — one mod, two loaders** — RS Polymorph now ships for **Fabric** in addition to NeoForge, both for Minecraft 1.21.1. The project was restructured into a MultiLoader layout (common + neoforge + fabric): all gameplay logic and every mixin live in common and are shared verbatim by both loaders. Because the mixins target Refined Storage 2 and Polymorph classes (never Minecraft) with remap=false, and both RS2 and Polymorph ship their public surface in a shared cross-loader module, the injection logic resolves byte-for-byte identically on NeoForge and Fabric with no per-loader rewrite.
  • Loader-agnostic core** — Introduced a small platform abstraction so common never references a loader API: Services/NetworkPlatform resolve the active loader's networking via ServiceLoader, the selected_recipe data component is registered by each loader and injected into the shared core, and SelectRecipePacket exposes a pure applyOnServer(ServerPlayer, ResourceLocation) that each loader drives from its own packet receiver (NeoForge IPayloadContext, Fabric `ServerPlayNetwor
...
## [1.1.0] - 2026-06-02


### Added


  • Wireless Crafting Grid compatibility** (issue #2) — Polymorph recipe switching now works in the [Refined Storage - Quartz Arsenal](https://www.curseforge.com/minecraft/mc-mods/refined-storage-quartz-arsenal) Wireless Crafting Grid. The side button already appeared (the wireless menu extends RS2's AbstractCraftingGridContainerMenu, so the screen is an AbstractGridScreen), but clicking a recipe did nothing because the entire selection bridge was keyed on a BlockEntity and the wireless grid has none — it is a transient, player-bound CraftingGrid built from a held item. Added a BlockEntity-free selection path: AccessorAbstractCraftingGridContainerMenu exposes the menu's craftingGrid, SelectRecipePacket resolves its RecipeMatrix from the existing CONTAINER_TO_MATRIX registry and drives updateResult, and a new per-matrix selection store keeps the choice sticky across input changes (the wireless equivalent of RsGridRecipeData.selections). The result reaches the client through the menu's crafting result slot on the next broadcastChanges tick — the same path the wired grid uses.


### Fixed


  • Wireless selection mis-routed onto an unrelated wired grid** — SelectRecipePacket.findBlockEntity had a global reverse-scan fallback that returned the first registered grid carrying Polymorph data regardless of which menu was open. For a wireless grid (which yields no BlockEntity) in a world with any loaded wired grid, the selection was applied to that unrelated wired grid and silently corrupted it. Removed the fallback; resolution is now strictly scoped to the open menu (slot scan, then grid-field accessor).


### Performance


  • No per-open memory leak for wireless grids** — Each opened wireless grid creates a RecipeMatrix registered in CONTAINER_TO_MATRIX, which strong-references it with no removal hook, so a WeakHashMap selection store alone could never reclaim it. Added MixinAbstractGridContainerMenu, a removed(Player) hook that deterministically unregisters the matrix and its selection on menu close — but only for grids with no BlockEntity, so the wired grid's BlockEntity-owned mapping is never dropped (guarded by instanceof BlockEntity). The per-matrix store is also guarded so it can never shadow a BlockEntity-backed selection.


### Compatibility


  • Quartz Arsenal is an optional, soft dependency** — Declared optional in neoforge.mods.toml. No Quartz Arsenal class is referenced anywhere in the source: the accessor targets the Refined Storage 2 base class AbstractCraftingGridContainerMenu, so the fix applies to the wireless grid (which extends it) and to any future BlockEntity-free crafting grid, with no compile-time dependency on the addon. The mod loads and runs unchanged when Quartz Arsenal is absent.


### Ajouts


  • Compatibilité Wireless Crafting Grid** (issue #2) — Le changement de recette Polymorph fonctionne désormais dans la Wireless Crafting G
...
Polymorphic Refined Storage Icon
Download Polymorphic Refined Storage
Select game version
Select platform