mxt-1.0-beta.3.jar
Curse Maven Snippet
What's new
Highlights
- Every in-game interface is now an ApricityUI HTML page — alchemy, wheel (and its editor), forging, spirit crafting, economy, information panel, structure preview and the new talisman workstation share one host layer and one theme stylesheet.
- Talisman drawing workstation — a new block and the new
mxt:talisman_drawingrecipe type turn a formula's shape into a player-traced mini-game; how well it is traced decides success, the tier written intomxt:quality, and the outputs. - Block heat sources — a new
mxt:heat_sourceregistry, a rebuilt 3×3×3 furnace, and a furnace ceiling that is the lowest of three limits. - Quality rework — free-text
rarityis gone; a stack's tier now resolves in three layers, with the newmxt:default_qualityregistry and newmxt:quality/mxt:ingredientmatcher entries. - Sword aura — a new projectile entity with a GPU-driven surface-flame renderer and a
mxt:spawn_sword_auraentity action. - Internals — a payment architecture (
CostDraft/CostPayment) replacingCostTransaction, and one module-hook registry (ModuleHooks) replacing the per-category source registries.
New features
Talisman drawing workstation
- New block
mxt:talisman_workstation(block, blockstate/model/textures, loot table, menuTalismanWorkstationMenu, screen and pagemxt/talisman/talisman.html). - New recipe type
mxt:talisman_drawing:unlock_condition,talisman,costs(Cost[]),paper(ingredient, defaulting to the#mxt:talisman_papertag),pattern(guide,show_order,tolerance,strokes),background_color,foreground_color,judgement, andresult.resultcarriesgrades[](each withmin_completion, optionalquality, optionalmax_damage,charge_ratio,outputs), plusfailure_outputs,success_actionandfailure_action.judgementtunes the scorer: term weights (direction / topology / order),stroke_count_strict,min_stroke_length,preview.
- Traced strokes are scored by a pure function (
TalismanDrawingScorer): completion in[0,1]from coverage, precision, shape, direction, topology and order terms; position and size are normalised away, rotation deliberately is not; empty or degenerate input scores0instead of throwing. The grade the completion lands in decides success and the tier written into themxt:qualitycomponent at inscription time. - Server-side
TalismanDrawingSession+TalismanWorkstationService, driven by 8 new payloads (TalismanSelectC2S,TalismanStrokeC2S,TalismanStrokeAckS2C,TalismanSubmitC2S,TalismanCancelC2S,TalismanDrawingStartS2C,TalismanDrawingListS2C,TalismanResultS2C). - The brush now carries its own pigment:
TalismanBrushItemwith componentmxt:brush_pigment(BrushPigmentService). A whole server-config section drives it —brush_capacity,pigment_per_item,pigment_rate,pigment_floor,pigment_cap,max_stroke_points,min_stroke_interval,max_session_strokes,max_rejected_strokes,max_session_points. - New item tags
mxt:talisman_paper(also the default for the recipe'spaperfield) andmxt:brush_pigment(cinnabar in the bundled pack). - Author-facing tool
tools/talisman_strokes.htmlfor drawing thepattern.strokesa recipe needs.
Alchemy: block heat sources, a rebuilt furnace
- New datapack registry
mxt:heat_source:blocks(block holders or block tags),max_temperature,heating_per_tick, optionalpriority(highest wins, ties fall back to registry order). Emptyblocksis refused; both numbers must be finite and positive. A block implementingapi.AlchemyHeatSourceoverrides its own registry entry. - The furnace is a fixed 3×3×3 whose bottom layer only anchors its four corners (the five cells between them are neither required, claimed nor chunk-loaded), and the middle layer's inner cell — formerly hollow — is now a wall. That is 18 material walls instead of 22, with the heating block in the bottom-centre cell (index 4), the controller at index 10, main port 14 and auxiliary port 12.
- A furnace's temperature ceiling is the lowest of three limits (
AlchemyFurnaceDefinition.temperatureLimit): the furnace spec's optional newmax_temperature, the coldest of the 18 wall blocks' newmax_temperature, and what the heating block can reach. Wall materials also gained an optionalqualitytier. - Hold-Shift tooltips show the resolved ceiling and which limit binds (
tooltip.mxt.alchemy.furnace_temperature,tooltip.mxt.alchemy.heat); heat-source blocks show their temperature, speed and state. Jade gained displays forheat_sourceand for the spirit crafting table — each as a data provider plus a component provider sharing one uid. - JEI: new
AlchemyCategorylisting alchemy recipes with their gates (temperature, duration, aura,furnace_quality,input_quality, failure outputs). It deliberately has no click area and no transfer handler — the panels are AUI pages centred in the window, and a batch is judged on summed medicinal properties rather than on which item sits in which slot. - New test-mod fixtures: three heat-source blocks, the
mxt_test:alchemy_heat/fireblock tag, heat-source and furnace-spec entries, andAlchemyGateProbes.
Quality
rarityis gone fromspirit_rootandphysique; both now declare an optionalquality. Themxt.rarity.*translation keys andDefinitionText.rarity(...)were removed, and commands print a tier throughQualityService.displayName(...).- A stack's tier resolves in three layers, only in
QualityService.find: themxt:qualitycomponent → the definition the stack itself carries (a type implementing the newapi.QualityProvider, registered as a carrier inQualityCarriers) → the newmxt:default_qualityregistry. Nine definition types are carriers (technique, alchemy furnace, wall material, spirit root, physique, pill, formation plate, secret-realm token, contract scroll); list-form carriers are absent by design. - New registry
mxt:default_quality:items(matcher entries),quality, optionalpriority. mxt:item_qualitynow reads a full requirement:quality(membership, holder or tag) plus the newmin_quality, resolved through the same order the tooltip and the gate use — so a definition's own default tier counts as the stack's tier.- New matcher entries
mxt:qualityandmxt:ingredient, and a new NeoForge ingredient typemxt:quality(MxtIngredientTypes) so a tier-bearing item can be required anywhere the game takes an ingredient. - Comparing tiers has a single outlet (
QualityLadders.compare): positive means the first is higher, and empty means "not comparable" — cross-ladder, or a tier no walked ladder holds — never "lower". - Alchemy gates that survive at HEAD: the optional
furnace_qualityandinput_qualityfields (each the nestedquality/min_qualityrequirement), refusing withFURNACE_TIER/INPUT_TIERbefore any material is taken; thefurnace_rankformula variable; and batch time divided by the product of the lowest tiered input'salchemy_modifierand the core's. - New
mxt:physiqueitem (PhysiqueItem) with themxt:physiquecomponent and its own lang keys and tooltip appender — a physique can now be granted by using an item, the way the spirit-root stone already worked. - KubeJS gained
MxtQuality.compare(...),satisfiesQualityRequirement(...)andqualityAtLeast(...).
Sword aura
- New entity
mxt:sword_auraand renderer registration, plus the new entity actionmxt:spawn_sword_aurawithspeed,blade_color,aura_color,radial_flame,length,blade_width,thickness,handle_length,guard_width,scale,lifetimeandcollide_action. - Rendering is new work: 9 classes under
render/sword/andrender/sword/flame/, 4 GLSL shader pairs plus 5 includes, a surface reaction/convection fluid simulation with Halton-sampled GPU particles, and a three-step distance LOD. - New client config category
flames: enabled, intensity, wind x/y/z and coefficient, the three LOD distances and particle counts, surface opacity and soft distance. - Test probe
/mxt_test sword_aura [count] [distance], plus/mxt_test sword_aura clear.
AUI migration
- Every page now ships in the jar under
assets/apricityui/apricity/mxt/<name>/: a sharedcommon/theme.css, and pages for alchemy (four views), the wheel and its editor, forging, spirit crafting, the economy screens (two station views, exchange, cheque, trade), the information panel, the structure preview and the talisman workstation. Nothing is written into the game directory —<gameDir>/apricity/remains the player's override layer. - New host layer
screen/aui/:AuiScreen(a page with no menu),AuiContainerScreen(a page over a menu),AuiWrappedScreen(the page contract: warm the stylesheets, bind once the document exists, then write per frame),AuiPages,AuiElements,AuiStyles,AuiScrollList. - Container menus that draw a page extend ApricityUI's
ApricityContainerMenuand declare their layout throughPageSlots; slot geometry, item drawing, hover and click are ApricityUI's slot binder, not the mod's. - The four-line access transformer that made
Slot.x/Slot.ywritable is gone, because nothing in the mod writes them any more. - The item picker moved out of the screen package:
mxt.picker.ItemPickerManager. - The technique panel screen is gone. The information panel carries that content (
screen.mxt.information_panel.tab.info), and its key now toggles the panel open and closed; thekey.mxt.technique_panelkeybind is removed. The wheel ring render-state class and the old alchemy page helper were removed with it.
Breaking changes
- A stack's datapack tier source changed:
spirit_rootandphysiqueno longer readrarity(the key is silently ignored, per the usual codec rule — such a definition simply has no tier). Writequalityinstead. - Built alchemy furnaces must be rebuilt: the structure now requires the middle layer's inner cell to be a wall, and the bottom layer is only anchored at its four corners, so an old hollow-centred furnace no longer forms.
- Heat sources are data-driven: a furnace reads the block in its bottom-centre cell, and that block must either be listed in
mxt:heat_sourceor implementapi.AlchemyHeatSource. The old "exotic fire" tooltip key is gone; the ceiling is the lowest of the three limits above. - The
talisman_inkitem (符墨) is removed. Stacks of it in old saves no longer resolve to an item. - The
key.mxt.technique_panelkeybind is removed; the technique page now lives inside the information panel under its own key. - Renames that affect Java and scripts:
ItemQualityService→QualityService;CostTransaction(+Charge) →CostPayment(+CostDraft,CostDraftManager,ResourceCostDraft,AuraCostDraft).MxtCosts.check/consumenow answer throughCost.test/Cost.commitdirectly. - ApricityUI is required on the client (
apricityui_version1.2.6). UI pages must live underassets/apricityui/apricity/mxt/— ApricityUI lists any namespace'sapricity/folder but resolves content asapricityui:apricity/<path>, so a page under this mod's own namespace is listed and never opens. - Minor JSON additions are safe to ignore:
mxt:item_qualitygainedmin_quality,alchemy_furnacegained an optionalmax_temperature, and wall materials gained an optionalqualityand a requiredmax_temperature.
Fixes
- Quality ladders: name inheritance could loop forever before the cycle check ran; the walk, ranking and cycle diagnosis now share one implementation, and a ladder that cannot be walked is not indexed at all.
- Ability grants: equipping a new item used to revoke the old one's abilities under the new item's source, and a full recalculation used to clear state before re-granting. Granting is now a per-source diff.
- Formations: upkeep used to pre-check the full balance, and two formations sharing one definition cancelled each other's abilities. Supply attribution and grant identity are now per formation instance.
- Payments: costs are loaded, tested and committed before anything happens, several payments can be written as one boundary with reverse-order rollback, and a key-activated ability checks that it can activate before paying.
- Trades: a trade confirmation is now bound to the quote version, and closing a trade no longer depends on the client sending a custom action.
- Secret realms: writing the realm state is no longer detached from the teleport result.
- Server-side write entry points now go through one permission gate, and the duplicate cultivation tick path was removed.
Removals
- The
talisman_inkitem (符墨), its model, texture and lang keys. - The
key.mxt.technique_panelkeybind and the technique panel screen. screen.mxt.alchemy.template_missing/template_invalid(pages are read from the jar, so there is no template to miss), andtooltip.mxt.alchemy.fire.
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include

