
Polymorphic Refined Storage
Polymorph recipe selection button directly into Refined Storage 2 Crafting Grids and Pattern Grids.
Оцените первым
3.1K
2
3.1K
2
Список изменений
[1.1.0] - 2026-06-02
Added
- Wireless Crafting Grid compatibility (issue #2) — Polymorph recipe switching now works in the Refined Storage - Quartz Arsenal Wireless Crafting Grid. The side button already appeared (the wireless menu extends RS2's
AbstractCraftingGridContainerMenu, so the screen is anAbstractGridScreen), but clicking a recipe did nothing because the entire selection bridge was keyed on aBlockEntityand the wireless grid has none — it is a transient, player-boundCraftingGridbuilt from a held item. Added aBlockEntity-free selection path:AccessorAbstractCraftingGridContainerMenuexposes the menu'scraftingGrid,SelectRecipePacketresolves itsRecipeMatrixfrom the existingCONTAINER_TO_MATRIXregistry and drivesupdateResult, and a new per-matrix selection store keeps the choice sticky across input changes (the wireless equivalent ofRsGridRecipeData.selections). The result reaches the client through the menu's crafting result slot on the nextbroadcastChangestick — the same path the wired grid uses.
Fixed
- Wireless selection mis-routed onto an unrelated wired grid —
SelectRecipePacket.findBlockEntityhad 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 noBlockEntity) 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
RecipeMatrixregistered inCONTAINER_TO_MATRIX, which strong-references it with no removal hook, so aWeakHashMapselection store alone could never reclaim it. AddedMixinAbstractGridContainerMenu, aremoved(Player)hook that deterministically unregisters the matrix and its selection on menu close — but only for grids with noBlockEntity, so the wired grid'sBlockEntity-owned mapping is never dropped (guarded byinstanceof BlockEntity). The per-matrix store is also guarded so it can never shadow aBlockEntity-backed selection.
Compatibility
- Quartz Arsenal is an optional, soft dependency — Declared
optionalinneoforge.mods.toml. No Quartz Arsenal class is referenced anywhere in the source: the accessor targets the Refined Storage 2 base classAbstractCraftingGridContainerMenu, so the fix applies to the wireless grid (which extends it) and to any futureBlockEntity-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 Grid de Refined Storage - Quartz Arsenal. Le bouton latéral apparaissait déjà (le menu wireless étend
AbstractCraftingGridContainerMenude RS2, donc l'écran est unAbstractGridScreen), mais cliquer sur une recette ne faisait rien car tout le pont de sélection était indexé sur unBlockEntity, que la grille wireless ne possède pas — c'est unCraftingGridéphémère, lié au joueur et construit depuis un objet tenu en main. Ajout d'un chemin de sélection sansBlockEntity:AccessorAbstractCraftingGridContainerMenuexpose lecraftingGriddu menu,SelectRecipePacketrésout sonRecipeMatrixdepuis le registre existantCONTAINER_TO_MATRIXet déclencheupdateResult, et un nouveau magasin de sélection par matrice garde le choix persistant à travers les changements d'ingrédients (l'équivalent wireless deRsGridRecipeData.selections). Le résultat parvient au client via le slot de résultat du menu au tickbroadcastChangessuivant — le même chemin que la grille filaire.
Correctifs
- Sélection wireless dirigée par erreur vers une grille filaire sans rapport —
SelectRecipePacket.findBlockEntityavait un fallback de balayage global qui renvoyait la première grille enregistrée portant des données Polymorph, quelle que soit la grille ouverte. Pour une grille wireless (qui ne fournit aucunBlockEntity) dans un monde contenant une grille filaire chargée, la sélection était appliquée à cette grille filaire sans rapport et la corrompait silencieusement. Fallback supprimé ; la résolution est désormais strictement limitée au menu ouvert (scan des slots, puis accessor du champ grid).
Performance
- Plus de fuite mémoire à chaque ouverture pour les grilles wireless — Chaque grille wireless ouverte crée un
RecipeMatrixenregistré dansCONTAINER_TO_MATRIX, qui le référence fortement sans hook de suppression ; un magasinWeakHashMapseul ne pouvait donc jamais le récupérer. Ajout deMixinAbstractGridContainerMenu, un hookremoved(Player)qui désenregistre de façon déterministe la matrice et sa sélection à la fermeture du menu — mais uniquement pour les grilles sansBlockEntity, afin que le mapping de la grille filaire (détenu par leBlockEntity) ne soit jamais supprimé (protégé parinstanceof BlockEntity). Le magasin par matrice est aussi protégé pour ne jamais masquer une sélection adossée à unBlockEntity.
Compatibilité
- Quartz Arsenal est une dépendance optionnelle et souple — Déclarée
optionaldansneoforge.mods.toml. Aucune classe de Quartz Arsenal n'est référencée dans le code source : l'accessor cible la classe de base de Refined Storage 2AbstractCraftingGridContainerMenu, donc le correctif s'applique à la grille wireless (qui en hérite) et à toute future grille de craft sansBlockEntity, sans dépendance à la compilation envers l'addon. Le mod se charge et fonctionne à l'identique en l'absence de Quartz Arsenal.
Файлы
rspolymorph-1.1.0.jar(43.46 KiB)
ОсновнойМетаданные
Канал релиза
Release
Номер версии
1.1.0
Загрузчики
NeoForge
Версии игры
1.21.1
Загрузок
57
Дата публикации
03.06.2026
