tfmg-1.2.9-arcadia-fix
Curse Maven Snippet
What's new
## [1.2.9] - 2026-08-21
Fixes for the fourteen bugs the 198-test pass on 1.2.7 reported. The headline
items: engines that produced rotation while burning no fuel at all, the blast
stove that could not feed a blast furnace whatever its size, the concrete hose
that had been invisible since the 1.21 port, and multiblock engines that lost
their type and their build progress the moment two of them merged.
Correctifs pour les quatorze bugs remontés par la passe de 198 tests sur la
1.2.7. Les gros morceaux : des moteurs qui produisaient de la rotation sans
brûler le moindre carburant, le blast stove incapable d'alimenter un haut
fourneau quelle que soit sa taille, le tuyau à béton invisible depuis le
portage 1.21, et les moteurs multiblocs qui perdaient leur type et leur
progression de construction dès que deux d'entre eux fusionnaient.
### Added
- **The winding machine winds spools** — Wire in the workpiece slot plus an empty (or matching, partly wound) spool mounted, and the machine winds one turn per tick, consuming a wire for each 125-turn tranche. Same 8-wires-per-1000-turns ratio as the crafting recipe; the wire is paid up front, so pulling the stack back out never yields free turns. The machine that gives spools their name could previously only unwind them.
### Fixed
- **Hot air production scales with the blast stove's size** — Every block of the stove now converts its own share of the recipe per cycle, and a partly supplied stove processes what its tanks can back instead of stalling. A 2x2x1 goes from ~0.29 to ~1.2 mB/t and a 2x2x4 reaches ~18 mB/t, enough to run one blast furnace (20 mB/t while smelting) continuously. Note the width cap of two blocks is intentional and stays: size a stove as 2x2xN. Also of note: the reinforced furnace does not drain more air per tick, it halves the smelt time, so it uses half the air per ingot at the same 20 mB/t demand.
- **No engine produces rotation from an empty tank** — The consumption formula truncated to whole mB before multiplying by the engine length, so the most efficient type and fuel pairs (boxer and radial on gasoline, kerosene or propane) burned a flat zero while still generating stress units, and the oil plus cooling discounts pushed most other engines to zero too. The truncation now happens after the length multiply and a running engine always burns at least 1 mB per drain (0.5 mB/s), which is also the minimum an oiled and cooled engine pays.
- **The goggles tell the truth about an engine** — "Speed" showed an internal figure 40 times the real shaft speed (7280 against the 181 RPM a multimeter reads); it now shows the actual output speed, and a new "Output" line gives the stress units the whole engine feeds the network, which is what one actually builds engines for. Fuel consumption per second was also overstated by a third.
- **A namespaced fuel tag no longer breaks the engine** — Cylinder items carry their accepted fuels as c: tag identifiers, but the engine's parser only stripped a literal "c:" prefix and fed anything else straight into an identifier path, where a value like the legacy "forge:kerosene" is malformed and throws. The parser now keeps the path whatever the namespace, so blades and cylinders from older items, datapacks or /give are read instead of crashing; the dormant datagen helper still stamping the legacy namespace was corrected too.
- **The oil can and cooling fluid bottle can actually be filled** — Both items answer the item fluid capability now, so Create's spout, TFMG steel tanks, vats, Create tanks, Mekanism machinery and JEI filling recipes all fill and drain them. Right-click filling silently asked the tank for the flowing variant of the fluid, which no tank ever holds, and did nothing on every container; sneak-clicking with a filled can voided the whole content with a fill sound, it now pours into the clicked container instead and only dumps on blocks that hold no fluid.
- **Filling an engine from a bucket no longer destroys the rest of the stack** — The bucket branches replaced the whole held stack with a single empty bucket, so clicking with a stack of oil buckets destroyed all but one. One bucket is consumed, the empty one is handed back, and creative mode keeps its bucket.
- **Two engines merge into a coherent multiblock or not at all** — Engine chains now only form between blocks of the same type, so the merge that left engine A one type and engine B another, with the whole assembly's type frozen forever after, cannot happen: a freshly placed block simply stays its own engine until its type matches its neighbour. Changing type hands the cylinders back instead of refusing while any were mounted, and two engines placed face to face no longer crash the game with an unbounded recursion.
- **A multiblock engine costs its full component set** — Each engine block now holds and requires its own components: five engines end to end cost five sets, not one. Build progress lives on each block, so it survives the master hand-over a merge triggers instead of stranding the old master's items in an inventory nothing read, and a broken engine block drops its components and cylinders instead of eating them. Existing multiblock engines in saved worlds will ask for the components of their added blocks once.
- **Inserting a bound transmission no longer detaches the engine from its multiblock** — The insert wrote the engine controller's position into the multiblock master pointer instead of the controller link field.
- **The engine controller says what is wrong** — Its goggle tooltip is back: linked engine position, running state and current shift, or a hint when no transmission was bound. Pressing start on an unlinked controller shows why nothing happens instead of doing silently nothing, and starting or stopping the engine is confirmed on screen. The GUI's frequency slots were labelled through a language key that never existed, with the wrong keys attached: they now name the actual bindings (steer left, steer right, and the custom button, which transmits redstone link frequencies while held). A controller broken under its driver, or left in another dimension, no longer locks that player out of every controller until relog. The transmission item states what its stored coordinates are and how to bind it, and the engine goggles show which controller drives it.
- **The concrete hose is visible again** — Its Flywheel visual was lost in the 1.21 port, and the fallback renderer stands down whenever Flywheel is active, which is always: coil, rope and nozzle were never drawn, so the descent depth could not be judged and pouring looked impossible. The visual is back, mirroring Create's hose pulley.
- **The diagonal cable block accepts liquid concrete** — It never opted into the concrete system, so it refused the bucket AND walled off the hose's spread through a cable run. It concretelogs like the straight tubes now; it has no dried encased variant yet, so the concrete inside it stays liquid.
- **The turbos sit clear of the turbine casing** — On a multiblock turbine the top-mounted turbo sank into the turbine texture; both turbos now lift above it.
- **The segmented display works with display links** — Its target and source classes shipped complete since the port, but their registration did not survive Create 6's new display API, so every link answered "Not a Display Target" despite the block's tooltip promising both roles. Both are registered again: links can write to the display and read its text.
### Known issues
- **The engine controller still assembles with a minecart only** — Proper contraption support for driving an engine-powered vehicle is a larger piece of work and is not part of this release.
- **TFMG machines are not display link sources** — Reading an accumulator's charge or a vat's contents through a display link stays on the wishlist for now.
### Ajouts
- **La machine à bobiner enroule les bobines** — Du fil dans le slot de pièce plus une bobine vide (ou assortie, partiellement enroulée) montée, et la machine enroule un tour par tick, en consommant un fil par tranche de 125 tours. Même ratio de 8 fils pour 1000 tours que la recette d'assemblage ; le fil est payé d'avance, donc retirer la pile ne donne jamais de tours gratuits. La machine qui donne leur nom aux bobines ne savait jusqu'ici que les dérouler.
### Correctifs
- **La production d'air chaud suit la taille du blast stove** — Chaque bloc du stove convertit désormais sa propre part de recette par cycle, et un stove partiellement alimenté traite ce que ses cuves peuvent couvrir au lieu de caler. Un 2x2x1 passe d'environ 0,29 à 1,2 mB/t et un 2x2x4 atteint ~18 mB/t, de quoi faire tourner un haut fourneau (20 mB/t en fonte) en continu. La largeur maximale de deux blocs est volontaire et reste : dimensionnez en 2x2xN. À noter aussi : le haut fourneau renforcé ne draine pas plus d'air par tick, il divise le temps de fonte par deux, donc consomme moitié moins d'air par lingot à demande égale.
- **Aucun moteur ne produit de rotation réservoir vide** — La formule de consommation tronquait en mB entiers avant de multiplier par la longueur du moteur : les paires type/carburant les plus efficaces (boxer et radial en essence, kérosène ou propane) brûlaient un zéro net tout en générant des SU, et les remises huile plus refroidissement poussaient la plupart des autres moteurs à zéro aussi. La troncature se fait après la multiplication et un moteur en marche brûle toujours au moins 1 mB par drain (0,5 mB/s), qui est aussi le minimum payé par un moteur huilé et refroidi.
- **Les lunettes disent la vérité sur un moteur** — « Vitesse » affichait une valeur interne 40 fois la vitesse réelle de l'arbre (7280 contre les 181 RPM qu'un multimètre lit) ; elle affiche désormais la vitesse de sortie réelle, et une nouvelle ligne « Production » donne les SU que le moteur entier fournit au réseau, ce pour quoi on construit un moteur. La consommation par seconde était aussi surestimée d'un tiers.
- **Un tag de carburant avec namespace ne casse plus le moteur** — Les cylindres portent leurs carburants acceptés sous forme d'identifiants de tag c:, mais le parseur du moteur ne retirait qu'un préfixe littéral « c: » et envoyait tout le reste tel quel dans un chemin d'identifiant, où une valeur comme l'ancien « forge:kerosene » est malformée et lève une exception. Le parseur garde désormais le chemin quel que soit le namespace : pales et cylindres issus d'items anciens, de datapacks ou de /give sont lus au lieu de crasher ; le helper de datagen dormant qui écrivait encore l'ancien namespace a aussi été corrigé.
- **Le bidon d'huile et la bouteille de refroidissement se remplissent vraiment** — Les deux items répondent désormais à la capability de fluide des items : le bec verseur de Create, les cuves d'acier TFMG, les cuves chimiques, les réservoirs Create, les machines Mekanism et les recettes de remplissage JEI les remplissent et les vident. Le remplissage au clic droit demandait silencieusement au réservoir la variante « flowing » du fluide, qu'aucun réservoir ne contient, et ne faisait rien sur tous les contenants ; le shift-clic avec un bidon plein vidait tout le contenu dans le néant avec un bruit de remplissage, il verse désormais dans le contenant visé et ne vide dans le vide que sur les blocs sans fluide.
- **Remplir un moteur au seau ne détruit plus le reste de la pile** — Les branches seau remplaçaient toute la pile tenue par un unique seau vide : cliquer avec une pile de seaux d'huile les détruisait tous sauf un. Un seau est consommé, le vide est rendu, et le mode créatif garde le sien.
- **Deux moteurs fusionnent en un multibloc cohérent ou pas du tout** — Les chaînes de moteurs ne se forment plus qu'entre blocs de même type : la fusion qui laissait le moteur A d'un type et le B d'un autre, avec le type de l'ensemble gelé à jamais, ne peut plus se produire ; un bloc fraîchement posé reste son propre moteur tant que son type ne correspond pas à celui du voisin. Le changement de type rend les cylindres au lieu de refuser dès qu'un seul était monté, et deux moteurs posés face à face ne crashent plus le jeu par récursion infinie.
- **Un moteur multibloc coûte son jeu de composants complet** — Chaque bloc moteur porte et exige désormais ses propres composants : cinq moteurs bout à bout coûtent cinq jeux, pas un. La progression vit sur chaque bloc, elle survit donc au changement de maître qu'une fusion déclenche au lieu d'abandonner les items de l'ancien maître dans un inventaire que rien ne lisait, et un bloc moteur cassé lâche ses composants et cylindres au lieu de les manger. Les moteurs multiblocs des mondes existants demanderont une fois les composants de leurs blocs ajoutés.
- **Insérer une transmission liée ne détache plus le moteur de son multibloc** — L'insertion écrivait la position du contrôleur de moteur dans le pointeur de maître du multibloc au lieu du champ de liaison du contrôleur.
- **Le contrôleur de moteur dit ce qui ne va pas** — Son tooltip aux lunettes est de retour : position du moteur lié, état de marche et rapport engagé, ou une indication quand aucune transmission n'a été liée. Démarrer un contrôleur non lié explique pourquoi rien ne se passe au lieu de ne rien faire en silence, et le démarrage comme l'arrêt sont confirmés à l'écran. Les slots de fréquence de l'interface étaient étiquetés via une clé de langue inexistante, avec les mauvaises touches : ils nomment désormais les vraies (gauche, droite, et le bouton personnalisé, qui émet des fréquences de redstone link tant qu'il est maintenu). Un contrôleur cassé sous son conducteur, ou laissé dans une autre dimension, ne verrouille plus ce joueur hors de tous les contrôleurs jusqu'à la reconnexion. L'item transmission dit ce que sont ses coordonnées stockées et comment le lier, et les lunettes du moteur montrent quel contrôleur le pilote.
- **Le tuyau à béton est de nouveau visible** — Son visuel Flywheel a été perdu au portage 1.21, et le renderer de secours s'efface dès que Flywheel est actif, c'est-à-dire toujours : bobine, corde et buse n'étaient jamais dessinées, impossible donc de juger la profondeur de descente, et le versage semblait cassé. Le visuel est de retour, calqué sur la poulie à tuyau de Create.
- **Le bloc de câble diagonal accepte le béton liquide** — Il n'avait jamais rejoint le système de béton : il refusait le seau ET bloquait la propagation du tuyau à travers une ligne de câbles. Il se remplit désormais comme les tubes droits ; il n'a pas encore de variante enrobée sèche, le béton y reste donc liquide.
- **Les turbos dépassent du carter des turbines** — Sur une turbine multibloc, le turbo posé sur le dessus s'enfonçait dans la texture ; les deux turbos sont désormais surélevés.
- **L'afficheur segmenté fonctionne avec les display links** — Ses classes cible et source étaient complètes depuis le portage, mais leur enregistrement n'a pas survécu à la nouvelle API d'affichage de Create 6 : chaque link répondait « Not a Display Target » alors que le tooltip du bloc promettait les deux rôles. Les deux sont réenregistrés : un link peut écrire sur l'afficheur et lire son texte.
### Problèmes connus
- **Le contrôleur de moteur ne s'assemble toujours qu'en minecart** — Le vrai support des contraptions pour conduire un véhicule motorisé est un chantier plus large, hors du périmètre de cette version.
- **Les machines TFMG ne sont pas sources de display link** — Lire la charge d'un accumulateur ou le contenu d'une cuve via un display link reste sur la liste de souhaits.
This mod has no additional files

