
Polymorphic Refined Storage
Polymorph recipe selection button directly into Refined Storage 2 Crafting Grids and Pattern Grids.
- Загрузки
- 2K
- Подписчики
- 2
- Обновлён
- 29 июня 2026 г.
- Лицензия
- GPL-3.0-only
Опубликован 3 июня 2026 г.
🔧 RS POLYMORPH — RECIPE CHOICE FOR REFINED STORAGE 🔧
⚡ Pick the recipe you actually want ⚡
A standalone recipe selector for Refined Storage — no Polymorph required.
|
[EN] Free & Open Source RS Polymorph is licensed under LGPL-3.0-or-later. You are free to use, study, modify, fork and redistribute it, including for commercial purposes, as long as derivative works credit vyrriox / Team Arcadia and link back to the upstream repository. |
[FR] Libre & Open Source RS Polymorph est sous licence LGPL-3.0-or-later. Vous êtes libre de l'utiliser, l'étudier, le modifier, le forker et le redistribuer, y compris à des fins commerciales, à condition que les travaux dérivés créditent vyrriox / Team Arcadia et pointent vers le dépôt d'origine. |
|
🔌 PLUG-AND-PLAY ADDON Drop it in your ✅ Fabric & NeoForge. ✅ Minecraft 1.21.1 & 26.1.2. ✅ Singleplayer & dedicated servers — server-safe by design, no client-only class leaks into common code. |
🔌 ADDON PRÊT À L'EMPLOI Posez le jar dans votre dossier ✅ Fabric & NeoForge. ✅ Minecraft 1.21.1 & 26.1.2. ✅ Solo & serveur dédié — sûr côté serveur par design, aucune classe client ne fuit dans le code commun. |
🇺🇸 Description (English) 🇺🇸
🌟 Stop letting Refined Storage pick the wrong recipe for you. 🌟
🤔 Why RS Polymorph?
|
🧩 Fully Standalone |
🌍 Two MC Lines, Two Loaders |
|
🛠️ Crafting Grid |
📜 Pattern Grid |
|
🎨 Redesigned Selector |
🎓 First-Time Tutorial |
|
🎯 Live Preview |
🔄 Smart Visibility |
|
🛡️ Server-Safe & Audited |
🌐 100% Bilingual EN/FR |
🎮 How to Use
It really is this simple:
|
1️⃣ Open any RS Crafting Grid or Pattern Grid screen. |
2️⃣ Place ingredients that match multiple recipes. |
|
3️⃣ Click the recipe-selection button next to the grid. |
4️⃣ Pick your preferred output from the popup. Done — it's remembered per grid. |
📦 Requirements
| Minecraft | Loader | Java | Refined Storage |
|---|---|---|---|
| 1.21.1 | NeoForge 21.1.219+ / Fabric | 21 | RS 2 (≥ 2.0.8) |
| 26.1.2 | NeoForge 26.1.2.73+ | 25 | RS 3 (≥ 3.2.0) |
Refined Storage is the only dependency. No Polymorph needed. Download the jar that matches your Minecraft version and loader.
🐛 Bug Reports & Support
Found a crash or unexpected behavior? We'd love to hear about it.
Please include your full crash log, the versions of RS Polymorph, Refined Storage, your loader (NeoForge/Fabric) and Minecraft, and clear steps to reproduce.
🤝 Contribute
RS Polymorph is fully open source under LGPL-3.0-or-later. Pull requests welcome.
🤝 Official Hosting Partner
Want to run your own modded server with RS Polymorph and Refined Storage? Our official US/international partner offers high-performance Minecraft hosting optimized for modpacks.
🇫🇷 Description (Français) 🇫🇷
🌟 Arrêtez de laisser Refined Storage choisir la mauvaise recette à votre place. 🌟
🤔 Pourquoi RS Polymorph ?
|
🧩 Entièrement Autonome |
🌍 Deux Lignes MC, Deux Loaders |
|
🛠️ Grille de Fabrication |
📜 Grille de Patrons |
|
🎨 Sélecteur Redesigné |
🎓 Tutoriel au Premier Lancement |
|
🎯 Aperçu en Direct |
🔄 Visibilité Intelligente |
|
🛡️ Sûr Côté Serveur & Audité |
🌐 100% Bilingue EN/FR |
🎮 Comment l'utiliser
C'est vraiment aussi simple que ça :
|
1️⃣ Ouvrez une Grille de Fabrication ou Grille de Patrons RS. |
2️⃣ Placez des ingrédients qui correspondent à plusieurs recettes. |
|
3️⃣ Cliquez sur le bouton de sélection de recette à côté de la grille. |
4️⃣ Choisissez votre recette préférée dans le popup. Terminé — c'est mémorisé par grille. |
📦 Prérequis
| Minecraft | Loader | Java | Refined Storage |
|---|---|---|---|
| 1.21.1 | NeoForge 21.1.219+ / Fabric | 21 | RS 2 (≥ 2.0.8) |
| 26.1.2 | NeoForge 26.1.2.73+ | 25 | RS 3 (≥ 3.2.0) |
Refined Storage est la seule dépendance. Pas besoin de Polymorph. Téléchargez le jar correspondant à votre version de Minecraft et à votre loader.
🐛 Bugs & Support
Vous avez un crash ou un comportement inattendu ? On veut bien le savoir.
Merci d'inclure votre log de crash complet, les versions de RS Polymorph, Refined Storage, votre loader (NeoForge/Fabric) et Minecraft, ainsi que des étapes claires pour reproduire.
🤝 Contribuer
RS Polymorph est entièrement open source sous LGPL-3.0-or-later. Les pull requests sont les bienvenues.
🤝 Hébergeur Officiel Partenaire
Vous souhaitez héberger votre propre serveur moddé avec RS Polymorph et Refined Storage ? Notre partenaire officiel français propose un hébergement Minecraft haute performance optimisé pour les modpacks.
🌟 PLAY ARCADIA V2 — ECHOES OF POWER 🌟
⚡ Where Magic Meets Machinery ⚡
The flagship modpack RS Polymorph was built for — and ships in by default.
|
🔗 True Cross-Mod Progression |
🌐 100% Bilingual EN/FR |
|
🎮 Curated Server Experience |
📜 3,000+ Quest-Guided Journey |
🎮 JOIN THE ADVENTURE — 490 MODS, ONE EPIC JOURNEY 🎮
🇫🇷 Découvrez Arcadia V2 : Echoes of Power
Le modpack phare pour lequel RS Polymorph a été conçu — et qui l'inclut par défaut. 490+ mods, 3 000+ quêtes, 5 serveurs actifs, 100 % bilingue EN/FR. Industrie + Magie + Exploration, comptez 150 à 300 heures pour atteindre l'endgame.
❤️ Support the Project / Soutenir le Projet
Your support helps us keep Arcadia alive and evolving!
Votre soutien nous aide à faire vivre et évoluer Arcadia !
© 2026 RS Polymorph | Created by vyrriox / Team Arcadia | LGPL-3.0-or-later | Not an official Minecraft product. Not approved by or associated with Mojang or Microsoft. Refined Storage is © refinedmods. Originally derived from Polymorph (© Illusive Soulworks, LGPL-3.0).
Ченджлог
1.2.2Релиз26.1.2 · 29 июня 2026 г.
[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Релиз1.21.1 · 29 июня 2026 г.
[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Релиз1.21.1 · 29 июня 2026 г.
[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Релиз1.21.1 · 14 июня 2026 г.
[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 (
renderItemtranslates 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'sextractContents(the first of four extract phases) onto vanillaAbstractContainerScreen.extractRenderStateat RETURN — the only point that runs afterextractContents→extractCarriedItem→extractSnapbackItem→extractTooltip— via a newMixinScreenPopupRender, 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 (
renderItemtranslate 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é deextractContentsde RS (la première des quatre phases d'extraction) versAbstractContainerScreen.extractRenderStatevanilla en RETURN — le seul point exécuté aprèsextractContents→extractCarriedItem→extractSnapbackItem→extractTooltip— via un nouveauMixinScreenPopupRender, 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Релиз1.21.1 · 14 июня 2026 г.
[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 (
renderItemtranslates 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'sextractContents(the first of four extract phases) onto vanillaAbstractContainerScreen.extractRenderStateat RETURN — the only point that runs afterextractContents→extractCarriedItem→extractSnapbackItem→extractTooltip— via a newMixinScreenPopupRender, 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 (
renderItemtranslate 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é deextractContentsde RS (la première des quatre phases d'extraction) versAbstractContainerScreen.extractRenderStatevanilla en RETURN — le seul point exécuté aprèsextractContents→extractCarriedItem→extractSnapbackItem→extractTooltip— via un nouveauMixinScreenPopupRender, 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Релиз26.1.2 · 14 июня 2026 г.
[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 (
renderItemtranslates 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'sextractContents(the first of four extract phases) onto vanillaAbstractContainerScreen.extractRenderStateat RETURN — the only point that runs afterextractContents→extractCarriedItem→extractSnapbackItem→extractTooltip— via a newMixinScreenPopupRender, 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 (
renderItemtranslate 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é deextractContentsde RS (la première des quatre phases d'extraction) versAbstractContainerScreen.extractRenderStatevanilla en RETURN — le seul point exécuté aprèsextractContents→extractCarriedItem→extractSnapbackItem→extractTooltip— via un nouveauMixinScreenPopupRender, 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Релиз1.21.1 · 6 июня 2026 г.
[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-containedRecipeSelectorPopup(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 (NeoForgeAttachmentType/ Fabric persistent attachment) behind aServices.GRID_STOREabstraction. The printed-pattern tag stays a vanillaDataComponentType. 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()/RS3RecipeProvider, single-argassemble,RecipeHolder.id()now aResourceKey) and the new two-phase GUI render pipeline (extractRenderState/extractContents) are forked undercommon-261.MixinPatternResolveris re-targeted with@WrapOperationonto RS3'sPlatform.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 incommonand are shared verbatim by both loaders. Because the mixins target Refined Storage 2 and Polymorph classes (never Minecraft) withremap=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
commonnever references a loader API:Services/NetworkPlatformresolve the active loader's networking viaServiceLoader, theselected_recipedata component is registered by each loader and injected into the shared core, andSelectRecipePacketexposes a pureapplyOnServer(ServerPlayer, ResourceLocation)that each loader drives from its own packet receiver (NeoForgeIPayloadContext, FabricServerPlayNetworking). - Combined single jar (optional) — In addition to the two per-loader jars, an optional fused jar (
rspolymorph-<version>.jar) that loads on both NeoForge and Fabric is produced via ModFusioner (./gradlew fusejars). The per-loader jars remain the primary, most robust distribution. - First-open tutorial card — The first time a player opens an RS grid, a one-time, bilingual card explains the recipe-selection feature (button + popup) and is dismissed by a click or by pressing Space/Enter. The "seen" flag is persisted client-side (
config/rspolymorph_tutorial.flag, written off the render thread, fail-soft) so it never reappears. Screen-reader users get a one-shot narrator announcement. - Redesigned recipe selector popup — The selection popup was reworked to look native: a titled header, inset slot frames, a gold highlight on the recipe the grid is currently producing, on-screen clamping, item-count decorations, and a single readable recipe name on hover. Per-frame allocations in the render path were removed.
Fixed
- Recipe selection on NeoForge — Selecting a recipe threw
UnsupportedOperationExceptionserver-side: the per-grid map decoded from the attachment codec is a GuavaImmutableMap, soput/removefailed.NeoForgeGridRecipeStore.setnow copies-on-write into a freshHashMapbeforesetData. Affected both 1.21.1 and 26.1.2 NeoForge. - Overlapping slot tooltip — Refined Storage's grid screens override
renderTooltipper subclass (CraftingGridScreen/PatternGridScreen/AbstractGridScreen) and draw the hovered-slot tooltip themselves, so a mixin on vanillaAbstractContainerScreen.renderTooltipwas bypassed and the underlying "Stick" tooltip drew over the popup. The suppression mixin now targets those RS classes and fires whenever the popup is open. The 26.x render pipeline differs, so its fork is a fail-soft no-op. - Per-MC-version recipe parsing — Crafting-recipe ingredient JSON differs between MC versions (1.21.1 uses object form
{"item":"..."}, 26.x uses bare strings). The test recipes are split per version and merged by a build task, so the test items now craft on every target.
Changed
- Refined Storage 2 baseline bumped to 2.0.8 — The Fabric build pulls Refined Storage 2.0.8 and Polymorph 1.1.0+1.21.1 from the Modrinth maven; the declared
refinedstoragedependency floor stays>= 2.0.1. RS 2.x and RS 3.x share the same internal package structure (com.refinedmods.refinedstorage.common.*), so the mixins are forward-compatible across the RS 2.x line with no signature changes. - Build toolchain — Migrated to the MultiLoader-Template build (Gradle 9.5.1, Fabric Loom 1.16.3 for the Fabric module, ModDevGradle 2.0.140 for the common/NeoForge modules). The Gradle wrapper was bumped from 9.2.1 to 9.5.1 to satisfy Loom 1.16.3.
Known limitations
- Fabric on Minecraft 26.1.2 not yet enabled — Minecraft 26.1.x ships un-obfuscated (no Mojang ProGuard mappings), which only
fabric-loom1.17.0-alpha+ supports, and that alpha conflicts with the stable Loom 1.16.3 used by the 1.21.1 Fabric module in the same build. Thefabric-261module (sources, entrypoints, metadata) is implemented but excluded from the default build; enable it on a branch that bumps Loom once a stable Loom with 26.x support lands. NeoForge 26.1.2 ships normally.
Ajouts
- Autonome — plus de dépendance à Polymorph — RS Polymorph ne requiert plus le mod Polymorph. L'UI de sélection de recette (bouton latéral + popup) et la persistance du choix par grille sont désormais fournies entièrement par RS Polymorph. Le bouton latéral est l'
AbstractSideButtonWidgetnatif de Refined Storage ; le popup est unRecipeSelectorPopupautonome (widget de grille d'items + mixin de rendu/clic sur l'écran de grille) ; le choix par grille est persisté sur le block entity via les Data Attachments du loader (NeoForgeAttachmentType/ attachment persistant Fabric) derrière une abstractionServices.GRID_STORE. Le tag du patron imprimé reste unDataComponentTypevanilla. Les classes spécifiques à Polymorph (RsGridRecipeData,MixinSelectionWidget,MixinRecipeManagerSafety) ont été supprimées. Résultat : un véritable add-on Refined Storage qui fonctionne partout où RS fonctionne, sans dépendance tierce de sélection de recette. - Minecraft 26.1.2 / Refined Storage 3.2.0 (NeoForge) — Un build parallèle cible le nouveau Minecraft 26.1.2 (versioning par année, Java 25) avec Refined Storage 3.2.0, en partageant la base de code 1.21.1. RS 3.x a conservé la même structure
com.refinedmods.refinedstorage.common.*, donc les mixins sont repris ; les quelques renommages MC 26.x (ResourceLocation→Identifier,GuiGraphics→GuiGraphicsExtractor) sont appliqués par un remap de sources au build, et les fichiers touchant l'API de recette remaniée (server.getRecipeManager()/RecipeProviderRS3,assembleà un argument,RecipeHolder.id()désormais unResourceKey) et le nouveau pipeline de rendu GUI à deux phases (extractRenderState/extractContents) sont forkés souscommon-261.MixinPatternResolverest re-ciblé avec@WrapOperationsurPlatform.getClientRecipeProvider().getRecipesFor(...)de RS3. Build avec Gradle sur JDK 25 :./gradlew :neoforge-261:build -Dorg.gradle.java.home=<jdk25>. - Support Fabric — un seul mod, deux loaders — RS Polymorph est désormais publié pour Fabric en plus de NeoForge, tous deux pour Minecraft 1.21.1. Le projet a été restructuré en architecture MultiLoader (
common+neoforge+fabric) : toute la logique de jeu et chaque mixin vivent danscommonet sont partagés à l'identique par les deux loaders. Comme les mixins ciblent des classes de Refined Storage 2 et de Polymorph (jamais de Minecraft) avecremap=false, et que RS2 comme Polymorph exposent leur surface publique dans un module commun cross-loader, la logique d'injection se résout octet pour octet de façon identique sur NeoForge et Fabric, sans réécriture par loader. - Noyau agnostique du loader — Ajout d'une petite abstraction de plateforme pour que
commonne référence jamais une API de loader :Services/NetworkPlatformrésolvent le réseau du loader actif viaServiceLoader, le data componentselected_recipeest enregistré par chaque loader puis injecté dans le noyau partagé, etSelectRecipePacketexpose unapplyOnServer(ServerPlayer, ResourceLocation)pur que chaque loader pilote depuis son propre récepteur de paquet (NeoForgeIPayloadContext, FabricServerPlayNetworking). - Jar unique combiné (optionnel) — En plus des deux jars par loader, un jar fusionné optionnel (
rspolymorph-<version>.jar) chargeable sur NeoForge ET Fabric est produit via ModFusioner (./gradlew fusejars). Les jars par loader restent la distribution principale, la plus robuste. - Carte tuto au premier lancement — La première fois qu'un joueur ouvre une grille RS, une carte unique et bilingue explique la sélection de recette (bouton + popup) ; elle se ferme d'un clic ou en appuyant sur Espace/Entrée. Le drapeau « vu » est persisté côté client (
config/rspolymorph_tutorial.flag, écrit hors du thread de rendu, fail-soft) pour ne jamais réapparaître. Les utilisateurs de lecteur d'écran reçoivent une annonce narrateur unique. - Popup de sélection redesigné — Le popup a été retravaillé pour un rendu natif : en-tête titré, slots en relief, surbrillance dorée sur la recette actuellement produite, calage à l'écran, décorations de quantité, et un seul nom de recette lisible au survol. Les allocations par frame du rendu ont été supprimées.
Correctifs
- Sélection de recette sur NeoForge — La sélection levait
UnsupportedOperationExceptioncôté serveur : la map par grille décodée du codec d'attachment est uneImmutableMapGuava, doncput/removeéchouaient.NeoForgeGridRecipeStore.setfait désormais une copie dans un nouveauHashMapavantsetData. Affectait NeoForge 1.21.1 et 26.1.2. - Tooltip de slot superposé — Les écrans de grille de Refined Storage overrident
renderTooltippar sous-classe (CraftingGridScreen/PatternGridScreen/AbstractGridScreen) et dessinent eux-mêmes le tooltip du slot survolé ; un mixin sur leAbstractContainerScreen.renderTooltipvanilla était donc contourné et le tooltip « Stick » s'affichait par-dessus le popup. Le mixin de suppression cible désormais ces classes RS et s'active dès que le popup est ouvert. Le pipeline de rendu 26.x diffère, son fork est un no-op fail-soft. - Parsing des recettes par version MC — Le JSON des ingrédients de craft diffère selon la version MC (1.21.1 en objet
{"item":"..."}, 26.x en chaîne brute). Les recettes de test sont séparées par version et fusionnées par une tâche de build, donc les items de test se craftent désormais sur chaque cible.
Modifications
- Base Refined Storage 2 portée à 2.0.8 — Le build Fabric récupère Refined Storage 2.0.8 et Polymorph 1.1.0+1.21.1 depuis le maven Modrinth ; le plancher de dépendance
refinedstoragedéclaré reste>= 2.0.1. RS 2.x et RS 3.x partagent la même structure de packages interne (com.refinedmods.refinedstorage.common.*), donc les mixins sont compatibles ascendant sur toute la ligne RS 2.x sans changement de signature. - Chaîne de build — Migration vers le build MultiLoader-Template (Gradle 9.5.1, Fabric Loom 1.16.3 pour le module Fabric, ModDevGradle 2.0.140 pour les modules common/NeoForge). Le wrapper Gradle est passé de 9.2.1 à 9.5.1 pour satisfaire Loom 1.16.3.
1.2.0Релиз1.21.1 · 6 июня 2026 г.
[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-containedRecipeSelectorPopup(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 (NeoForgeAttachmentType/ Fabric persistent attachment) behind aServices.GRID_STOREabstraction. The printed-pattern tag stays a vanillaDataComponentType. 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()/RS3RecipeProvider, single-argassemble,RecipeHolder.id()now aResourceKey) and the new two-phase GUI render pipeline (extractRenderState/extractContents) are forked undercommon-261.MixinPatternResolveris re-targeted with@WrapOperationonto RS3'sPlatform.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 incommonand are shared verbatim by both loaders. Because the mixins target Refined Storage 2 and Polymorph classes (never Minecraft) withremap=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
commonnever references a loader API:Services/NetworkPlatformresolve the active loader's networking viaServiceLoader, theselected_recipedata component is registered by each loader and injected into the shared core, andSelectRecipePacketexposes a pureapplyOnServer(ServerPlayer, ResourceLocation)that each loader drives from its own packet receiver (NeoForgeIPayloadContext, FabricServerPlayNetworking). - Combined single jar (optional) — In addition to the two per-loader jars, an optional fused jar (
rspolymorph-<version>.jar) that loads on both NeoForge and Fabric is produced via ModFusioner (./gradlew fusejars). The per-loader jars remain the primary, most robust distribution. - First-open tutorial card — The first time a player opens an RS grid, a one-time, bilingual card explains the recipe-selection feature (button + popup) and is dismissed by a click or by pressing Space/Enter. The "seen" flag is persisted client-side (
config/rspolymorph_tutorial.flag, written off the render thread, fail-soft) so it never reappears. Screen-reader users get a one-shot narrator announcement. - Redesigned recipe selector popup — The selection popup was reworked to look native: a titled header, inset slot frames, a gold highlight on the recipe the grid is currently producing, on-screen clamping, item-count decorations, and a single readable recipe name on hover. Per-frame allocations in the render path were removed.
Fixed
- Recipe selection on NeoForge — Selecting a recipe threw
UnsupportedOperationExceptionserver-side: the per-grid map decoded from the attachment codec is a GuavaImmutableMap, soput/removefailed.NeoForgeGridRecipeStore.setnow copies-on-write into a freshHashMapbeforesetData. Affected both 1.21.1 and 26.1.2 NeoForge. - Overlapping slot tooltip — Refined Storage's grid screens override
renderTooltipper subclass (CraftingGridScreen/PatternGridScreen/AbstractGridScreen) and draw the hovered-slot tooltip themselves, so a mixin on vanillaAbstractContainerScreen.renderTooltipwas bypassed and the underlying "Stick" tooltip drew over the popup. The suppression mixin now targets those RS classes and fires whenever the popup is open. The 26.x render pipeline differs, so its fork is a fail-soft no-op. - Per-MC-version recipe parsing — Crafting-recipe ingredient JSON differs between MC versions (1.21.1 uses object form
{"item":"..."}, 26.x uses bare strings). The test recipes are split per version and merged by a build task, so the test items now craft on every target.
Changed
- Refined Storage 2 baseline bumped to 2.0.8 — The Fabric build pulls Refined Storage 2.0.8 and Polymorph 1.1.0+1.21.1 from the Modrinth maven; the declared
refinedstoragedependency floor stays>= 2.0.1. RS 2.x and RS 3.x share the same internal package structure (com.refinedmods.refinedstorage.common.*), so the mixins are forward-compatible across the RS 2.x line with no signature changes. - Build toolchain — Migrated to the MultiLoader-Template build (Gradle 9.5.1, Fabric Loom 1.16.3 for the Fabric module, ModDevGradle 2.0.140 for the common/NeoForge modules). The Gradle wrapper was bumped from 9.2.1 to 9.5.1 to satisfy Loom 1.16.3.
Known limitations
- Fabric on Minecraft 26.1.2 not yet enabled — Minecraft 26.1.x ships un-obfuscated (no Mojang ProGuard mappings), which only
fabric-loom1.17.0-alpha+ supports, and that alpha conflicts with the stable Loom 1.16.3 used by the 1.21.1 Fabric module in the same build. Thefabric-261module (sources, entrypoints, metadata) is implemented but excluded from the default build; enable it on a branch that bumps Loom once a stable Loom with 26.x support lands. NeoForge 26.1.2 ships normally.
Ajouts
- Autonome — plus de dépendance à Polymorph — RS Polymorph ne requiert plus le mod Polymorph. L'UI de sélection de recette (bouton latéral + popup) et la persistance du choix par grille sont désormais fournies entièrement par RS Polymorph. Le bouton latéral est l'
AbstractSideButtonWidgetnatif de Refined Storage ; le popup est unRecipeSelectorPopupautonome (widget de grille d'items + mixin de rendu/clic sur l'écran de grille) ; le choix par grille est persisté sur le block entity via les Data Attachments du loader (NeoForgeAttachmentType/ attachment persistant Fabric) derrière une abstractionServices.GRID_STORE. Le tag du patron imprimé reste unDataComponentTypevanilla. Les classes spécifiques à Polymorph (RsGridRecipeData,MixinSelectionWidget,MixinRecipeManagerSafety) ont été supprimées. Résultat : un véritable add-on Refined Storage qui fonctionne partout où RS fonctionne, sans dépendance tierce de sélection de recette. - Minecraft 26.1.2 / Refined Storage 3.2.0 (NeoForge) — Un build parallèle cible le nouveau Minecraft 26.1.2 (versioning par année, Java 25) avec Refined Storage 3.2.0, en partageant la base de code 1.21.1. RS 3.x a conservé la même structure
com.refinedmods.refinedstorage.common.*, donc les mixins sont repris ; les quelques renommages MC 26.x (ResourceLocation→Identifier,GuiGraphics→GuiGraphicsExtractor) sont appliqués par un remap de sources au build, et les fichiers touchant l'API de recette remaniée (server.getRecipeManager()/RecipeProviderRS3,assembleà un argument,RecipeHolder.id()désormais unResourceKey) et le nouveau pipeline de rendu GUI à deux phases (extractRenderState/extractContents) sont forkés souscommon-261.MixinPatternResolverest re-ciblé avec@WrapOperationsurPlatform.getClientRecipeProvider().getRecipesFor(...)de RS3. Build avec Gradle sur JDK 25 :./gradlew :neoforge-261:build -Dorg.gradle.java.home=<jdk25>. - Support Fabric — un seul mod, deux loaders — RS Polymorph est désormais publié pour Fabric en plus de NeoForge, tous deux pour Minecraft 1.21.1. Le projet a été restructuré en architecture MultiLoader (
common+neoforge+fabric) : toute la logique de jeu et chaque mixin vivent danscommonet sont partagés à l'identique par les deux loaders. Comme les mixins ciblent des classes de Refined Storage 2 et de Polymorph (jamais de Minecraft) avecremap=false, et que RS2 comme Polymorph exposent leur surface publique dans un module commun cross-loader, la logique d'injection se résout octet pour octet de façon identique sur NeoForge et Fabric, sans réécriture par loader. - Noyau agnostique du loader — Ajout d'une petite abstraction de plateforme pour que
commonne référence jamais une API de loader :Services/NetworkPlatformrésolvent le réseau du loader actif viaServiceLoader, le data componentselected_recipeest enregistré par chaque loader puis injecté dans le noyau partagé, etSelectRecipePacketexpose unapplyOnServer(ServerPlayer, ResourceLocation)pur que chaque loader pilote depuis son propre récepteur de paquet (NeoForgeIPayloadContext, FabricServerPlayNetworking). - Jar unique combiné (optionnel) — En plus des deux jars par loader, un jar fusionné optionnel (
rspolymorph-<version>.jar) chargeable sur NeoForge ET Fabric est produit via ModFusioner (./gradlew fusejars). Les jars par loader restent la distribution principale, la plus robuste. - Carte tuto au premier lancement — La première fois qu'un joueur ouvre une grille RS, une carte unique et bilingue explique la sélection de recette (bouton + popup) ; elle se ferme d'un clic ou en appuyant sur Espace/Entrée. Le drapeau « vu » est persisté côté client (
config/rspolymorph_tutorial.flag, écrit hors du thread de rendu, fail-soft) pour ne jamais réapparaître. Les utilisateurs de lecteur d'écran reçoivent une annonce narrateur unique. - Popup de sélection redesigné — Le popup a été retravaillé pour un rendu natif : en-tête titré, slots en relief, surbrillance dorée sur la recette actuellement produite, calage à l'écran, décorations de quantité, et un seul nom de recette lisible au survol. Les allocations par frame du rendu ont été supprimées.
Correctifs
- Sélection de recette sur NeoForge — La sélection levait
UnsupportedOperationExceptioncôté serveur : la map par grille décodée du codec d'attachment est uneImmutableMapGuava, doncput/removeéchouaient.NeoForgeGridRecipeStore.setfait désormais une copie dans un nouveauHashMapavantsetData. Affectait NeoForge 1.21.1 et 26.1.2. - Tooltip de slot superposé — Les écrans de grille de Refined Storage overrident
renderTooltippar sous-classe (CraftingGridScreen/PatternGridScreen/AbstractGridScreen) et dessinent eux-mêmes le tooltip du slot survolé ; un mixin sur leAbstractContainerScreen.renderTooltipvanilla était donc contourné et le tooltip « Stick » s'affichait par-dessus le popup. Le mixin de suppression cible désormais ces classes RS et s'active dès que le popup est ouvert. Le pipeline de rendu 26.x diffère, son fork est un no-op fail-soft. - Parsing des recettes par version MC — Le JSON des ingrédients de craft diffère selon la version MC (1.21.1 en objet
{"item":"..."}, 26.x en chaîne brute). Les recettes de test sont séparées par version et fusionnées par une tâche de build, donc les items de test se craftent désormais sur chaque cible.
Modifications
- Base Refined Storage 2 portée à 2.0.8 — Le build Fabric récupère Refined Storage 2.0.8 et Polymorph 1.1.0+1.21.1 depuis le maven Modrinth ; le plancher de dépendance
refinedstoragedéclaré reste>= 2.0.1. RS 2.x et RS 3.x partagent la même structure de packages interne (com.refinedmods.refinedstorage.common.*), donc les mixins sont compatibles ascendant sur toute la ligne RS 2.x sans changement de signature. - Chaîne de build — Migration vers le build MultiLoader-Template (Gradle 9.5.1, Fabric Loom 1.16.3 pour le module Fabric, ModDevGradle 2.0.140 pour les modules common/NeoForge). Le wrapper Gradle est passé de 9.2.1 à 9.5.1 pour satisfaire Loom 1.16.3.
Комментарии
Загружаем…


