// Priority: 1
/**
  ---╔═══╗------------╔═╗--╔═══╗--╔╗-------
  ---║╔═╗║------------║╔╝--║╔══╝-╔╝╚╗------
  ---║║ ║╠══╦══╗--╔══╦╝╚╗--║╚══╦═╩╗╔╬══╗---
  ---║╚═╝║╔╗║║═╣--║╔╗╠╗╔╝--║╔══╣╔╗║║║║═╣---
  ---║╔═╗║╚╝║║═╣--║╚╝║║║---║║--║╔╗║╚╣║═╣---
  ---╚╝ ╚╩═╗╠══╝--╚══╝╚╝---╚╝--╚╝╚╩═╩══╝---
  -------╔═╝║------------------------------
  -------╚══╝------------------------------
*/
/**

  ☻/  * @file Global items modification script
  /▌  * @copyright KnightDexx's Modded Minecraft World
  /\

  PORTED: 1.20.1 → 1.21.1 NeoForge
  CHANGES:
  - setAttackDamage(n) → attackDamage = n  (property, not method)
  - setMaxDamage(n) → maxDamage = n        (property, not method)
  - Ancient Tome NBT strings → minecraft:stored_enchantments component selector
  - Added Platform.isLoaded() guards for all mod-specific item modifications

*/
ItemEvents.modification(event => {

  const colors = [
    'white', 'light_gray', 'gray', 'black', 'red', 'orange', 'yellow',
    'lime', 'green', 'light_blue', 'cyan', 'blue', 'purple', 'magenta',
    'pink', 'brown'
  ]

  const modifyStack = (items, size) => {
    items.forEach(it => event.modify(it, item => item.maxStackSize = size))
  }

  const setMaxStackForColored = (suffix, size) => {
    colors.forEach(color => event.modify(`minecraft:${color}_${suffix}`, item => item.maxStackSize = size))
  }

  const setAttack = (id, dmg) => {
    event.modify(id, m => m.attackDamage = dmg)
  }

  const setDurability = (id, durability) => {
    event.modify(id, m => m.maxDamage = durability)
  }

  // ═══════════════════════════════════════════════════════════
  // VANILLA — always runs
  // ═══════════════════════════════════════════════════════════
  modifyStack([
    'minecraft:ender_pearl', 'minecraft:egg', 'minecraft:cake',
    'minecraft:minecart', 'minecraft:saddle', 'minecraft:shulker_box',
    'minecraft:writable_book', 'minecraft:enchanted_book', 'minecraft:honey_bottle',
    'minecraft:totem_of_undying', 'minecraft:snowball', 'minecraft:armor_stand',
    'minecraft:bucket', 'minecraft:water_bucket', 'minecraft:milk_bucket',
    'minecraft:powder_snow_bucket',
    'minecraft:iron_horse_armor', 'minecraft:golden_horse_armor',
    'minecraft:diamond_horse_armor', 'minecraft:leather_horse_armor',
    'minecraft:mushroom_stew', 'minecraft:rabbit_stew', 'minecraft:beetroot_soup',
    /^minecraft:.*sign.*/,
    /^minecraft:.*boat.*/,
    'minecraft:music_disc_13',      'minecraft:music_disc_cat',
    'minecraft:music_disc_blocks',  'minecraft:music_disc_chirp',
    'minecraft:music_disc_far',     'minecraft:music_disc_mall',
    'minecraft:music_disc_mellohi', 'minecraft:music_disc_stal',
    'minecraft:music_disc_strad',   'minecraft:music_disc_ward',
    'minecraft:music_disc_11',      'minecraft:music_disc_wait',
    'minecraft:music_disc_otherside','minecraft:music_disc_pigstep',
    'minecraft:music_disc_relic',   'minecraft:music_disc_5',
  ], 64)

  setMaxStackForColored('banner',      64)
  setMaxStackForColored('bed',         64)
  setMaxStackForColored('shulker_box', 64)

  // ═══════════════════════════════════════════════════════════
  // INDUSTRIAL FOREGOING
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('industrialforegoing'))
    modifyStack([/^industrialforegoing:.*addon.*/], 64)

  // ═══════════════════════════════════════════════════════════
  // SOPHISTICATED BACKPACKS / STORAGE
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('sophisticatedbackpacks'))
    modifyStack([/^sophisticatedbackpacks:.*upgrade.*/], 64)
  if (Platform.isLoaded('sophisticatedstorage'))
    modifyStack([/^sophisticatedstorage:.*upgrade.*/], 64)

  // ═══════════════════════════════════════════════════════════
  // THERMAL
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('thermal')) {
    modifyStack([/^thermal:.*grenade.*/, 'thermal:hearty_stew', 'thermal:xp_stew'], 64)
    event.modify('thermal:sawdust_block', item => item.burnTime = 1000)
  }

  // ═══════════════════════════════════════════════════════════
  // CYCLIC
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('cyclic'))
    modifyStack(['cyclic:heart', 'cyclic:heart_empty'], 64)

  // ═══════════════════════════════════════════════════════════
  // BLUE SKIES
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('blue_skies'))
    modifyStack([
      'blue_skies:camel_saddle',
      /^blue_skies:.*sign.*/, /^blue_skies:.*boat.*/,
      'blue_skies:blinding_rage', 'blue_skies:defying_starlight',
      'blue_skies:venomous_encounter', 'blue_skies:population',
    ], 64)

  // ═══════════════════════════════════════════════════════════
  // RFTOOLSBASE
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('rftoolsbase'))
    modifyStack(['rftoolsbase:infused_enderpearl', 'rftoolsbase:infused_diamond'], 64)

  // ═══════════════════════════════════════════════════════════
  // FRAMEDBLOCKS
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('framedblocks'))
    modifyStack([/^framedblocks:.*sign.*/], 64)

  // ═══════════════════════════════════════════════════════════
  // TWILIGHT FOREST
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('twilightforest'))
    modifyStack([
      /^twilightforest:.*sign.*/, /^twilightforest:.*boat.*/,
      'twilightforest:music_disc_radiance',     'twilightforest:music_disc_steps',
      'twilightforest:music_disc_superstitious','twilightforest:music_disc_home',
      'twilightforest:music_disc_wayfarer',     'twilightforest:music_disc_findings',
      'twilightforest:music_disc_maker',        'twilightforest:music_disc_thread',
      'twilightforest:music_disc_motion',
    ], 64)

  // ═══════════════════════════════════════════════════════════
  // SECURITY CRAFT
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('securitycraft'))
    modifyStack([/^securitycraft:.*sign.*/, /^securitycraft:.*boat.*/], 64)

  // ═══════════════════════════════════════════════════════════
  // QUARK
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('quark'))
    modifyStack([
      /^quark:.*sign.*/, /^quark:.*boat.*/,
      // Ancient Tomes — apply to all ancient tomes at once.
      // Component-specific matching is not available at startup time (registry
      // not yet accessible), so we set the stack size on the item type itself.
      // This correctly applies to all ancient tome variants.
      'quark:ancient_tome',
      // Music discs
      'quark:music_disc_endermosh', 'quark:music_disc_drips', 'quark:music_disc_ocean',
      'quark:music_disc_rain',      'quark:music_disc_wind',  'quark:music_disc_fire',
      'quark:music_disc_clock',     'quark:music_disc_crickets', 'quark:music_disc_chatter',
    ], 64)

  // ═══════════════════════════════════════════════════════════
  // BIOMES WE'VE GONE
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('biomeswevegone'))
    modifyStack([
      /^biomeswevegone:.*sign.*/, /^biomeswevegone:.*boat.*/,
      'biomeswevegone:music_disc_pixie_club', 'biomeswevegone:music_disc_better_days',
    ], 64)

  // ═══════════════════════════════════════════════════════════
  // DEEPER & DARKER
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('deeperdarker'))
    modifyStack([/^deeperdarker:.*sign.*/, /^deeperdarker:.*boat.*/], 64)

  // ═══════════════════════════════════════════════════════════
  // UNDERGARDEN
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('undergarden'))
    modifyStack([
      /^undergarden:.*sign.*/, /^undergarden:.*boat.*/,
      'undergarden:music_disc_mammoth',       'undergarden:music_disc_limax_maximus',
      'undergarden:music_disc_relict',        'undergarden:music_disc_gloomper_anthem',
    ], 64)

  // ═══════════════════════════════════════════════════════════
  // ALEX'S CAVES
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('alexscaves'))
    modifyStack([
      /^alexscaves:.*sign.*/, /^alexscaves:.*boat.*/,
      'alexscaves:music_disc_fusion', 'alexscaves:music_disc_tasty',
    ], 64)

  // ═══════════════════════════════════════════════════════════
  // FORBIDDEN ARCANUS
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('forbidden_arcanus'))
    modifyStack([/^forbidden_arcanus:.*sign.*/, /^forbidden_arcanus:.*boat.*/], 64)

  // ═══════════════════════════════════════════════════════════
  // FORESTRY
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('forestry'))
    modifyStack([/^forestry:.*sign.*/, /^forestry:.*boat.*/], 64)

  // ═══════════════════════════════════════════════════════════
  // HEXEREI
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('hexerei'))
    modifyStack([/^hexerei:.*sign.*/, /^hexerei:.*boat.*/], 64)

  // ═══════════════════════════════════════════════════════════
  // AETHER
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('aether'))
    modifyStack([/^aether:.*sign.*/], 64)

  // ═══════════════════════════════════════════════════════════
  // MIDNIGHT
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('midnight'))
    modifyStack([/^midnight:.*sign.*/, /^midnight:.*boat.*/], 64)

  // ═══════════════════════════════════════════════════════════
  // TINKERS CONSTRUCT
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('tconstruct'))
    modifyStack([/^tconstruct:.*sign.*/], 64)

  // ═══════════════════════════════════════════════════════════
  // SUPPLEMENTARIES
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('supplementaries'))
    modifyStack([/^supplementaries:.*sign_post.*/, 'supplementaries:music_disc_heave_ho'], 64)

  // ═══════════════════════════════════════════════════════════
  // BOTANIA
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('botania'))
    modifyStack(['botania:record_gaia_1', 'botania:record_gaia_2'], 64)

  // ═══════════════════════════════════════════════════════════
  // ALEX'S MOBS
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('alexsmobs'))
    modifyStack(['alexsmobs:music_disc_thime', 'alexsmobs:music_disc_daze'], 64)

  // ═══════════════════════════════════════════════════════════
  // ARS NOUVEAU
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('ars_nouveau'))
    modifyStack([
      'ars_nouveau:music_disc_aria_biblio',
      'ars_nouveau:music_disc_thistle_the_sound_of_glass',
      'ars_nouveau:music_disc_firel_the_wild_hunt',
    ], 64)

  // ═══════════════════════════════════════════════════════════
  // DOGGY TALENTS
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('doggytalents'))
    modifyStack(['doggytalents:disc_chopin_op64_no1'], 64)

  // ═══════════════════════════════════════════════════════════
  // CATACLYSM
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('cataclysm'))
    modifyStack([
      'cataclysm:music_disc_netherite_monstrosity', 'cataclysm:music_disc_ender_guardian',
      'cataclysm:music_disc_ignis',                 'cataclysm:music_disc_the_harbinger',
      'cataclysm:music_disc_the_leviathan',         'cataclysm:music_disc_ancient_remnant',
      'cataclysm:music_disc_maledictus',            'cataclysm:music_disc_scylla',
      'cataclysm:music_disc_the_cataclysmfarer',
    ], 64)

  // ═══════════════════════════════════════════════════════════
  // ALLTHEMODIUM — attack damage & durability
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('allthemodium')) {
    setAttack('allthemodium:allthemodium_sword', 24)
    setAttack('allthemodium:alloy_sword',        74)
    setAttack('allthemodium:alloy_axe',          84)
    setAttack('allthemodium:alloy_paxel',       104)
    setDurability('allthemodium:alloy_paxel',  17500)
  }

  // ═══════════════════════════════════════════════════════════
  // MYSTICAL AGRICULTURE / AGRADDITIONS / ADAPTATIONS
  // ═══════════════════════════════════════════════════════════
  if (Platform.isLoaded('mysticalagriculture')) {
    setDurability('mysticalagriculture:supremium_axe',          8000)
    setDurability('mysticalagriculture:awakened_supremium_axe', 9000)
  }
  if (Platform.isLoaded('mysticalagradditions')) {
    setDurability('mysticalagradditions:supremium_paxel',          11000)
    setDurability('mysticalagradditions:awakened_supremium_paxel', 13500)
  }
  if (Platform.isLoaded('mysticaladaptations')) {
    setDurability('mysticaladaptations:insanium_axe',   12000)
    setDurability('mysticaladaptations:insanium_paxel', 16000)
  }

})
// Made by KnightDexx, for Age of Fate modpack
// https://legacy.curseforge.com/minecraft/modpacks/age-of-fate
