ItemEvents.tooltip(tooltip => {
    let holds = (id, slots) => tooltip.add("metalbarrels:" + id + "_barrel", Text.translatable("item.metalbarrels.barrel.tooltip", slots));
    let main_assembly = (id, stage) => tooltip.add(id, Text.translatable("item.kubejs.main_assembly", stage == "4" ? "Finale" : "Chapter " + stage));
    let bonus_assembly = (id, stage) => tooltip.add(id, Text.translatable("item.kubejs.bonus_assembly", "Chapter " + stage));
    let not_consumed = (id) => tooltip.add(id, Text.translatable("item.kubejs.not_consumed_in_assembly"));

    tooltip.add("minecraft:redstone_ore", Text.translatable("item.minecraft.redstone_ore.tooltip"));
    tooltip.add("minecraft:deepslate_redstone_ore", Text.translatable("item.minecraft.deepslate_redstone_ore.tooltip"));
    tooltip.add("supplementaries:ash", Text.translatable("item.supplementaries.ash.tooltip"));
    tooltip.add("functionalstorage:storage_controller", Text.translatable("item.functionalstorage.controller.tooltip"));
    tooltip.add("functionalstorage:controller_extension", Text.translatable("item.functionalstorage.controller_extension.tooltip"));

    holds("copper", 5 * 9);
    holds("iron", 6 * 9);
    holds("silver", 8 * 9);
    holds("gold", 9 * 9);

    main_assembly("kubejs:kinetic_mechanism", "1");
    bonus_assembly("kubejs:sealed_mechanism", "1A");
    bonus_assembly("kubejs:reinforced_mechanism", "1B");
    main_assembly("create:precision_mechanism", "2");
    bonus_assembly("kubejs:infernal_mechanism", "2A");
    bonus_assembly("kubejs:logistic_mechanism", "2B");
    main_assembly("kubejs:inductive_mechanism", "3");
    bonus_assembly("kubejs:abstruse_mechanism", "3A");
    main_assembly("kubejs:calculation_mechanism", "4");

    not_consumed("cb_microblock:stone_saw");
    not_consumed("cb_microblock:iron_saw");
    not_consumed("cb_microblock:diamond_saw");
    not_consumed("projectred-core:screwdriver");
    not_consumed("kubejs:chromatic_resonator");
    not_consumed("kubejs:flash_drive");

    global.substrates[0].forEach(e => tooltip.add(e.id, Text.translatable("item.kubejs.category.igneous")));
    global.substrates[1].forEach(e => tooltip.add(e.id, Text.translatable("item.kubejs.category.herbal")));
    global.substrates[2].forEach(e => tooltip.add(e.id, Text.translatable("item.kubejs.category.volatile")));
    global.substrates[3].forEach(e => tooltip.add(e.id, Text.translatable("item.kubejs.category.crystalline")));
    global.substrates[4].forEach(e => tooltip.add(e.id, Text.translatable("item.kubejs.category.metallurgic")));
    global.substrates[5].forEach(e => tooltip.add(e.id, Text.translatable("item.kubejs.category.gemstone")));
    global.substrates[6].forEach(e => tooltip.add(e.id, Text.translatable("item.kubejs.category.catalyst")));

    tooltip.add("structurescompass:structures_compass", Text.translatable("item.structurescompass.structures_compass.tooltip"));
    tooltip.add("reliquary:alkahestry_tome", Text.translatable("item.reliquary.alkahestry_tome.tooltip"));

    tooltip.add("kubejs:accellerator_redstone", Text.translatable("item.kubejs.accellerator_redstone.tooltip"));
    tooltip.add("kubejs:accellerator_glowstone", Text.translatable("item.kubejs.accellerator_glowstone.tooltip"));

    tooltip.addAdvanced("ftbquests:book", (item, adv, text) => { text.add(2, Text.gray(Text.translatable("ftbquests.book.tooltip"))) })

    for (let i = 0; i < 15; i++) {
        tooltip.add(`kubejs:failed_alchemy_${i}`, Text.translatable("item.kubejs.failed_alchemy.tooltip"));
    }

    const pureore = ["minecraft:raw_iron", "minecraft:raw_copper", "minecraft:raw_gold", "thermal:raw_lead", "thermal:raw_nickel", "create:raw_zinc"];
    pureore.forEach(pureore => {
        tooltip.add(pureore, Text.translatable("item.kubejs.pureore.tooltip"));
    });

    tooltip.addAdvanced(["/^kubejs:.+machine$/", "thermal:machine_frame", "ae2:controller"], (item, adv, text) => {
        if (!tooltip.shift) {
            text.add(1, Text.translatable("item.kubejs.shift.summary"));
        } else {
            text.add(1, Text.translatable("item.kubejs.shift.summary"));
            text.add(2, Text.translatable("item.kubejs.machine.details"));
            text.add(3, Text.translatable("item.kubejs.machine.transformation"));
        }
    });
    tooltip.addAdvanced(["/^kubejs:trial.+$/"], (item, adv, text) => {
        if (!tooltip.shift) {
            text.add(1, Text.translatable("item.kubejs.shift.summary"));
        } else {
            text.add(1, Text.translatable("item.kubejs.shift.summary"));
            text.add(2, Text.translatable("item.kubejs.trial.details"));
            text.add(3, Text.translatable("item.kubejs.trial.special_info"));
        }
    });

    tooltip.addAdvanced(["occultism:spirit_fire"], (item, adv, text) => {
        if (!tooltip.shift) {
            text.add(1, Text.translatable("item.kubejs.shift.summary"));
        } else {
            text.add(1, Text.translatable("item.kubejs.shift.summary"));
            text.add(2, Text.translatable("item.spirit_fire.info"));
            text.add(3, Text.translatable("item.spirit_fire.creation"));
        }
    });

    tooltip.add("trials:crafter", Text.red(Text.translatable("cabin.trials.crafter.deprecation.tooltip")))
});
