ASCENDANT EXTENSION TEMPLATE

You do not need to write a registration script. It is already included.
You only edit scripts\lists.js.

1. Copy this entire extension_template folder OUTSIDE the Ascendant addon,
   into your Minecraft behavior_packs folder. Name it My Ascendant Extension.
2. Rename manifest.json.template to manifest.json in your copied folder.
   Leave the original template inside Ascendant unchanged.
3. Open manifest.json. Change its name and description.
   Replace "Your name" in metadata.authors with your author name.
   Replace BOTH uuid values with two different new UUIDs.
   Use a UUID generator in your editor. Do not reuse the sample UUIDs when
   distributing extensions: different extensions must have different UUIDs.
4. Open scripts\lists.js. Change id to your own lowercase ID, such as
   "alex:more_foods". Give it a friendly name. Each extension needs its own ID.
5. Copy an example into the appropriate list and change its values.
   Lines beginning with // are comments and are NOT loaded. Remove // from
   example lines you want to use. Keep commas between entries.
6. Enable your extension Behavior Pack AND each updated Ascendant Behavior
   Pack used by your lists. Keep the matching Ascendant Resource Packs active.
   Leave lists for addons you do not use empty. No specific pack order is needed.
7. Close and reopen the world. Check the content log for "Loaded ... entries".
   Mistakes and missing addons produce readable messages in chat and the log.

MANIFEST AND ACHIEVEMENTS

The template includes metadata.product_type: "addon" and an author field.
Keep product_type unchanged. It identifies this pack as an Add-On; it is
not a switch that guarantees achievements. Use a supported normal Survival
world with cheats off and without experiments that disable achievements.
Check Minecraft's achievement eligibility message on the actual world.
This template does not turn cheats or experiments on, and cannot restore
achievements to a world already marked ineligible.

The UUID dependency is the Ascendant Mastery Behavior Pack. Its version
must match the Mastery pack you use. Do not replace that UUID when changing
your extension's own two UUIDs. After updating Mastery, update this dependency
version to match Mastery's manifest.header.version.
If you also use another addon's list, add its Behavior Pack header UUID and
header version as another object in dependencies. Keep @minecraft/server.
Enable each addon used by your non-empty lists.

The file is JavaScript because Bedrock loads script modules, not arbitrary
JSON configuration files. You do not need to understand the script:
keep "export const extension =" and the brackets from the template.

HOW TO EDIT A LIST

Text goes inside quotes: item: "minecraft:apple"
Numbers do not: level: 10
Yes/no values do not: replace: true
An entry goes inside { }.
A list goes inside [ ].
Put a comma after each entry. A final comma is allowed.
// starts a comment for the rest of the line.

An item ID is the technical ID, not its name shown in the inventory.
This template does not create items, blocks, mobs or textures.
The addon providing custom content must also be enabled.

Changing a default Ascendant entry requires replace: true.
Two different extensions cannot change the same entry. You get an error
instead of a pack-order-dependent result.
Use level: 0 to remove a Mastery requirement from a default entry.

After editing or deleting entries, reload the world. Removing or disabling
an extension restores defaults on the next world load. Nothing is written
into player saves by the extension registry. No unregister command is needed.
Entries load one at a time; if an entry fails, earlier entries in that addon
list stay loaded until reload. The error identifies the entry to fix.

Mastery: item, block, entity, mine, potion or smith (exactly one).
Items, blocks and entities require skill and level.
For multiple skills, use requires instead of skill and level:
{ item: "myaddon:swift_sword", requires: { strength: 10, agility: 5 } }
ALL listed skills must be met. This is AND, not OR.
requires also works for block and entity entries. Put the content ID only
once in the list. Do not combine requires with skill or level.
Empty requires is an error. Each level follows the same 0-to-cap rule.
mine, potion and smith still use their fixed skill and a single level.
mine automatically uses mining; potion uses alchemy; smith uses smithing.
Skills: health, strength, agility, defense, stamina, luck, archery, trade,
smithing, mining, farming, alchemy.
Levels: whole numbers from 0 to the configured cap (normally 20).
Optional: name, description, texture, group, replace.

Examples:
{ item: "myaddon:ruby_sword", skill: "strength", level: 10 }
{ block: "myaddon:workbench", skill: "smithing", level: 6 }
{ entity: "myaddon:merchant", skill: "trade", level: 5 }
{ mine: "myaddon:ruby_ore", level: 8 }
{ smith: "myaddon:ruby_sword", level: 12 }
{ potion: "minecraft:nightvision", level: 4, replace: true }
{ potion: "minecraft:long_nightvision", level: 16, replace: true }
{ potion: "minecraft:strong_healing", level: 20, replace: true }
{ potion: "minecraft:splash_potion", level: 7, replace: true }
{ potion: "minecraft:lingering_potion", level: 17, replace: true }

Potions use effect IDs, not ingredient IDs. The highest effect/delivery/item
requirement wins. This restricts drinking or throwing, not carrying potions.
Use item for custom tools; smith adds a separate Smithing requirement.

Sustenance:
Required: item and name.
Optional: carbohydrates, protein, fat, vitamins, minerals. Omitted values are 0.
Amounts are numbers from 0 to 1000000; fractions are allowed.
Optional category: fruit, vegetables, meat, seafood, baked_goods, meals, other.
Default category is other. Optional description, texture, replace.
Without texture, the food browser uses the apple icon.
Nutrition is added when the food is eaten, not when collected.
This list does not make a non-edible item edible.

{ item: "myaddon:apple_pie", name: "Apple Pie", category: "baked_goods",
  carbohydrates: 6, vitamins: 2, texture: "textures/items/apple_pie" }

Vocation:
Exactly one of break, place or kill. Required: job and xp.
Jobs: lumberjack, miner, farmer, warrior, builder, smith, fisher, brewer.
XP is greater than 0 and at most 1000000. Fractions are allowed.
Optional: name, description, texture, replace.
This changes XP actions for the existing jobs. It does not create new jobs.
Only break/place/kill actions are supported, not crafting/fishing/brewing.
Employment checks and the configured XP multiplier still apply.
One action/content ID can award XP to one job.

{ break: "myaddon:ruby_ore", job: "miner", xp: 5 }
{ place: "myaddon:ruby_block", job: "builder", xp: 2 }
{ kill: "myaddon:forest_monster", job: "warrior", xp: 10 }

TEXTURES

A texture is a Resource Pack path, without .png:
"textures/items/apple"
If you use a custom texture, provide and enable the Resource Pack containing
it. This Behavior Pack template does not include a custom Resource Pack.

OLD EXTENSIONS

The old v1/v2 APIs are removed. Old registrations, events, ownership batches
and query commands are not supported. Recreate old entries using these lists.
Do not copy old registration scripts into this template.

SERVER/REALM USE

Enable the extension on the server's world, not just on a player's device.
Use a Bedrock version supporting @minecraft/server 2.8.0.
Realm/dedicated-server behavior still needs testing on the target world.
