mxt-1.0-beta.1.jar
Curse Maven Snippet
What's new
Added
Quality chain and upgrades
- New
mxt:quality_chainregistry:tiers(low → high),default, per-stepupgradeswithcosts+condition, validated at load (registries 34 → 35). - Quality now resolves through one fixed order:
mxt:item_qualitycomponent →mxt:forging_result→ the item's own definition default (artifact.quality/technique.quality) → the binding chain'sdefault→ the herb's declared quality. /quality(/mxt quality) withget/set/clear/upgrade/chain; upgrades pay atomically throughCostTransaction.qualitydefinitions gained an optionalcolor, used for the tinted item name, the "Quality: name" tooltip line,/pickerentries and the blueprint tier table.- Client config
tooltips.tint_item_name(on by default); server command-alias switchesqualityandrealm.
Unified costs
- Eleven "use cost" fields now share one shape,
Cost[]; newmxt:auratype (aura+amount) pays per aura identity, andmxt:item/mxt:jsare usable outsideability.costs. CostTransaction(pay/plan/planDeferred/commit): all-or-nothing per group, per-channel rollback,mxt:jspaid last;CostFailurerecords why a payment failed.- Payer widened from
PlayertoLivingEntitywith explicit channels (RESOURCE_ACCOUNT,PLAYER_INVENTORY,WORLD_AURA,AURA_BANK,SCRIPT); a missing channel is a refusal, not an error. - Formation
maintenance_costscan name a resource account directly, so upkeep still has an account when the owner is offline. - Artifact tooltips list aura costs by name and amount, plus an "other costs" line for item/script costs.
Universal abilities (artifact-only abilities merged in)
mxt:abilitygainedhidden(defaultfalse) anditem_action; the type dispatch is a single flat top-leveltype.Togglable(state/gated/activate) plus one server-side entry point,AbilityActivationService, shared by the wheel, commands and KubeJS.mxt:storage(slots),mxt:upkeep(interval,on_fail,owner_only) and the flight pair below are ordinarymxt:ability_types; a carried ability's owntypedecides whether it takes a wheel cell.- Cooldown renders as a vanilla-style white overlay on the wheel cell instead of a text line.
- KubeJS:
activateAbility(holder, id, carrier).
Flying artifacts
mxt:mount(vehicle data):speed,seats(1..4, driver included),sit,display,width/height,step_height,seat_offsets,mount_action(on_mount/on_dismount/tick, all three running on the driver) andtrail(particle,interval,count,speed,spread,offset_x/offset_y/offset_z,moving_only).mxt:flight_control(the pressed skill):hand(main/off/either) andspeed_multiplier; takes amxt:mountartifact from the main hand, then the off hand.- Multi-seat flight: right-click the mount to board; the artifact leaves the hand, rides inside the mount entity and is returned in full when the flight ends; the driver's logout or death ends the trip for everyone.
- New rebindable key
Xfor descending, so sneaking is vanilla dismount again; new server configflight.follow_look(on) makes forward/back follow the look direction. /flight fill(gamemaster) fills free seats with literal zombies in unbreakable helmets for eyeballing seat offsets.
Creatures and contracts
ContractBehavior+ContractBehaviors(follow / wander / stay / recall): behaviors are classes, extended withregister(...)rather than an enum./contractwithlist/info/bind/break/recall/behavior, backed by the newmxt:bound_beastsworld attachment.mxt:contract_bellcomponent plus a wheel page (WheelSource.CONTRACT/WheelEntryKind.BEHAVIOR): right-click a beast to aim at it, right-click air to open the wheel.
Names, descriptions, documentation plumbing
name/descriptionon the self-naming registries, auto-generated from the entry id;api/NamedDefinition,ContextNameCodec,ContextNameListCodec.realm_stage.minor_stages(explicit list or integer count) and the formula variableminor_stage; the information panel shows the minor stage.- Registry mixins attach the decoding entry's
ResourceKey, which is what makes default text possible at load time.
Changed
- Artifact
abilitiesnow reference ability ids or#tags; ability identity is always the ability's own registry holder. - Translation keys follow
<category>.mxt.<namespace>.<path>(for exampleaura.mxt.mxt.fire,quality.mxt.example.refined). - Registries renamed:
mxt:realm_instance→mxt:secret_realm,mxt:item_quality→mxt:quality(data directories and tag directories follow). - Secret realms: instance and dimension keys
<ns>:realm/…→<ns>:secret_realm/…, template rootmxt_realm/→mxt_secret_realm/,mxt:in_realm_instance→mxt:in_secret_realm,secret_realm_*formula variables, KubeJS event grouprealmInstance→secretRealm. - Quality: binding tables use
quality_chaininstead ofquality_group,technique.gradebecamequality, and the default tier is the chain'sdefault(lowest tier when omitted). - Flight economy: the one-off take-off price belongs to the skill, while the per-tick fuel belongs to the mount's
costs, paid out of the carried artifact's own aura store first and only the remainder by the driver; running dry lands the vehicle and rolls back what was already taken. - Flight state records the ability id and the vehicle separately; geometry, pose and passenger rules are read from
mxt:mount, with entity constants left only as fallbacks; the mountmove()s every tick, so colliding with a block or the ground really lands it. - Storage energy became
double(stored/setEnergy/addEnergy/consumeEnergy), with whole-unit reads usingfloorplus clamping. - Creatures:
follow_actionruns only while the active behavior is follow andcombat_actionruns after damage resolution; the spirit beast bag releases on a block face;CreatureProfile's singlespawn_actionruns once when the profile is written; extra drops go through vanilla loot tables; who can be contracted is decided by the entity implementingContractable. mxt:flightand spirit burst widened from players to anyLivingEntity.- Commands: registry arguments use vanilla
ResourceArgument(withSuggestions.enabledIdskept for nodes that must name disabled or removed entries), server nodes live incommand/server, client nodes incommand/client, and the gamemaster check has one home inServerCommandManager::mayChange. - Attachments read leniently (
lenientOptionalFieldOf) and store registry references asHolder/ResourceKey.
Removed / Renamed
- Inline abilities are gone: artifact
abilitiesno longer accepts ability objects with akey; abilities live indata/<namespace>/mxt/ability/<path>.json. mxt:artifact_ability_typeand its built-ins (mxt:passive,mxt:active, the artifact-only flight/storage/upkeep variants) are gone in favour ofmxt:ability_type.WheelEntryKind.ARTIFACT/ArtifactWheelEntryremoved; old saves read such a cell asability.- Classes removed:
ToggableArtifactAbility,ArtifactToggleService,ArtifactCapability,EmptyArtifactAbility,GrantArtifactAbility,FlightArtifactAbility,StorageArtifactAbility,UpkeepArtifactAbility,MxtArtifactAbilityTypes,ArtifactService.resolveAbilities,CommandManager(split into server/client managers),IdentityCommand,WeightedActionEntry(→Weighted),data/resource/ResourceCostand the olddata/cost/*cost classes (→data/cost/builtin/*). - Java API:
Cost#check(Player)/Cost#consume(Player)→Cost#charge(CostContext);ResourceTransactions.evaluate(...)removed;ResourceLedger.tryConsume(Map<Identifier, Double>);Toggable.key()/displayName()removed;AbilityAttachmentandSkillStageService.damageMultipliertakeIdentifier. CreatureProfile:contract_tags,loot_tableandrealm_stagesremoved,entity_type_tags→entities,inner_coreis a full item stack.ContractType.break_action/penalty_action→release_action/death_action;ContractAttachment.ownerremoved (the entity'sOwnableEntityanswers instead).mxt:weighted_listentries changed from{data, weight}to{value, weight?};mxt:choiceentries fromelementtovalue.SpiritBeastComponentstoresentity_typeplus an id-lessentity; old bags no longer decode.- Commands:
/mxt realm_instance …→/mxt secret_realm …;/mxt identity root|physique …→/mxt spirit_root …//mxt physique …;/talisman givetakes a single id (use themxt:talismancomponent for several). - Config:
commands.identity→commands.spirit_root+commands.physique. Lang keysactionbar.mxt.wheel.no_selection,actionbar.mxt.artifact_skill.*,wheel.mxt.kind.artifact,mxt.registry.item_qualityand the old artifact tooltip keys were replaced.
Fixed
- Cost amounts that do not evaluate to a finite positive number now refuse the payment (
CostFailure.INVALID_AMOUNT) instead of throwing while deducting. - Broken cost entries no longer get silently dropped by the tolerant list codec: they fail the load, and duplicates in one array are a load error (a resource plus the aura measured in it still adds up).
- Command registry arguments now get vanilla parsing, tab completion and "no such entry" errors, and disabled entries are consistently rejected.
- One unreadable field in an attachment no longer discards the whole attachment.
/mxt ability revokeworks for abilities that are currently disabled or whose definition was deleted.- Wheel selection can no longer end up with nothing selected (falls back to the first held entry).
- Out-of-range resource changes are clamped to the bounds; the documentation said they were rejected.
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include

