// priority: 0

const UnbreakBlock = [
	'minecraft:oak_log',
	'minecraft:oak_wood',
	'minecraft:stripped_oak_log',
	'minecraft:stripped_oak_wood',
	'minecraft:oak_planks',
	'minecraft:oak_stairs',
	'minecraft:oak_slab',
	'minecraft:oak_fence',
	'minecraft:oak_fence_gate',
	'minecraft:oak_door',
	'minecraft:oak_trapdoor',
	'minecraft:oak_pressure_plate',
	'minecraft:oak_button',

	'minecraft:spruce_log',
	'minecraft:spruce_wood',
	'minecraft:stripped_spruce_log',
	'minecraft:stripped_spruce_wood',
	'minecraft:spruce_planks',
	'minecraft:spruce_stairs',
	'minecraft:spruce_slab',
	'minecraft:spruce_fence',
	'minecraft:spruce_fence_gate',
	'minecraft:spruce_door',
	'minecraft:spruce_trapdoor',
	'minecraft:spruce_pressure_plate',
	'minecraft:spruce_button',
	
	'minecraft:birch_log',
	'minecraft:birch_wood',
	'minecraft:stripped_birch_log',
	'minecraft:stripped_birch_wood',
	'minecraft:birch_planks',
	'minecraft:birch_stairs',
	'minecraft:birch_slab',
	'minecraft:birch_fence',
	'minecraft:birch_fence_gate',
	'minecraft:birch_door',
	'minecraft:birch_trapdoor',
	'minecraft:birch_pressure_plate',
	'minecraft:birch_button',


	'minecraft:jungle_log',
	'minecraft:jungle_wood',
	'minecraft:stripped_jungle_log',
	'minecraft:stripped_jungle_wood',
	'minecraft:jungle_planks',
	'minecraft:jungle_stairs',
	'minecraft:jungle_slab',
	'minecraft:jungle_fence',
	'minecraft:jungle_fence_gate',
	'minecraft:jungle_door',
	'minecraft:jungle_trapdoor',
	'minecraft:jungle_pressure_plate',
	'minecraft:jungle_button',

	'minecraft:acacia_log',
	'minecraft:acacia_wood',
	'minecraft:stripped_acacia_log',
	'minecraft:stripped_acacia_wood',
	'minecraft:acacia_planks',
	'minecraft:acacia_stairs',
	'minecraft:acacia_slab',
	'minecraft:acacia_fence',
	'minecraft:acacia_fence_gate',
	'minecraft:acacia_door',
	'minecraft:acacia_trapdoor',
	'minecraft:acacia_pressure_plate',
	'minecraft:acacia_button',

	'minecraft:dark_oak_log',
	'minecraft:dark_oak_wood',
	'minecraft:stripped_dark_oak_log',
	'minecraft:stripped_dark_oak_wood',
	'minecraft:dark_oak_planks',
	'minecraft:dark_oak_stairs',
	'minecraft:dark_oak_slab',
	'minecraft:dark_oak_fence',
	'minecraft:dark_oak_fence_gate',
	'minecraft:dark_oak_door',
	'minecraft:dark_oak_trapdoor',
	'minecraft:dark_oak_pressure_plate',
	'minecraft:dark_oak_button',

	'minecraft:mangrove_log',
	'minecraft:mangrove_wood',
	'minecraft:stripped_mangrove_log',
	'minecraft:stripped_mangrove_wood',
	'minecraft:mangrove_planks',
	'minecraft:mangrove_stairs',
	'minecraft:mangrove_slab',
	'minecraft:mangrove_fence',
	'minecraft:mangrove_fence_gate',
	'minecraft:mangrove_door',
	'minecraft:mangrove_trapdoor',
	'minecraft:mangrove_pressure_plate',
	'minecraft:mangrove_button',

	'minecraft:cherry_log',
	'minecraft:cherry_wood',
	'minecraft:stripped_cherry_log',
	'minecraft:stripped_cherry_wood',
	'minecraft:cherry_planks',
	'minecraft:cherry_stairs',
	'minecraft:cherry_slab',
	'minecraft:cherry_fence',
	'minecraft:cherry_fence_gate',
	'minecraft:cherry_door',
	'minecraft:cherry_trapdoor',
	'minecraft:cherry_pressure_plate',
	'minecraft:cherry_button',

	'minecraft:crimson_stem',
	'minecraft:crimson_hyphae',
	'minecraft:stripped_crimson_stem',
	'minecraft:stripped_crimson_hyphae',
	'minecraft:crimson_planks',
	'minecraft:crimson_stairs',
	'minecraft:crimson_slab',
	'minecraft:crimson_fence',
	'minecraft:crimson_fence_gate',
	'minecraft:crimson_door',
	'minecraft:crimson_trapdoor',
	'minecraft:crimson_pressure_plate',
	'minecraft:crimson_button',
	
	'minecraft:warped_stem',
	'minecraft:warped_hyphae',
	'minecraft:stripped_warped_stem',
	'minecraft:stripped_warped_hyphae',
	'minecraft:warped_planks',
	'minecraft:warped_stairs',
	'minecraft:warped_slab',
	'minecraft:warped_fence',
	'minecraft:warped_fence_gate',
	'minecraft:warped_door',
	'minecraft:warped_trapdoor',
	'minecraft:warped_pressure_plate',
	'minecraft:warped_button',
	
	'minecraft:stone',
	'minecraft:stone_stairs',
	'minecraft:stone_slab',
	'minecraft:stone_pressure_plate',
	'minecraft:stone_button',
	'minecraft:cobblestone',
	'minecraft:cobblestone_stairs',
	'minecraft:cobblestone_slab',
	'minecraft:cobblestone_wall',
	'minecraft:mossy_cobblestone',
	'minecraft:mossy_cobblestone_stairs',
	'minecraft:mossy_cobblestone_slab',
	'minecraft:mossy_cobblestone_wall',
	'minecraft:smooth_stone',
	'minecraft:smooth_stone_slab',
	'minecraft:stone_bricks',
	'minecraft:stone_brick_stairs',
	'minecraft:stone_brick_slab',
	'minecraft:stone_brick_wall',
	'minecraft:mossy_stone_bricks',
	'minecraft:mossy_stone_brick_stairs',
	'minecraft:mossy_stone_brick_slab',
	'minecraft:mossy_stone_brick_wall',
	'minecraft:chiesled_stone_bricks',
	'minecraft:cracked_stone_bricks',

	'minecraft:granite',
	'minecraft:granite_stairs',
	'minecraft:granite_slab',
	'minecraft:granite_wall',
	'minecraft:polished_granite',
	'minecraft:polished_granite_stairs',
	'minecraft:polished_granite_slab',

	'minecraft:diorite',
	'minecraft:diorite_stairs',
	'minecraft:diorite_slab',
	'minecraft:diorite_wall',
	'minecraft:polished_diorite',
	'minecraft:polished_diorite_stairs',
	'minecraft:polished_diorite_slab',

	'minecraft:andesite',
	'minecraft:andesite_stairs',
	'minecraft:andesite_slab',
	'minecraft:andesite_wall',
	'minecraft:polished_andesite',
	'minecraft:polished_andesite_stairs',
	'minecraft:polished_andesite_slab',

	'minecraft:sandstone',
	'minecraft:sandstone_stairs',
	'minecraft:sandstone_slab',
	'minecraft:sandstone_wall',
	'minecraft:chisled_sandstone',
	'minecraft:smooth_sandstone',
	'minecraft:smooth_sandstone_stairs',
	'minecraft:smooth_sandstone_slab',
	'minecraft:cut_sandstone',
	'minecraft:cut_sandstone_slab',

	'minecraft:red_sandstone',
	'minecraft:red_sandstone_stairs',
	'minecraft:red_sandstone_slab',
	'minecraft:red_sandstone_wall',
	'minecraft:chisled_red_sandstone',
	'minecraft:smooth_red_sandstone',
	'minecraft:smooth_red_sandstone_stairs',
	'minecraft:smooth_red_sandstone_slab',
	'minecraft:cut_red_sandstone',
	'minecraft:cut_red_sandstone_slab',

	'minecraft:sea_lantern',
	'minecraft:prismarine',
	'minecraft:prismarine_stairs',
	'minecraft:prismarine_slab',
	'minecraft:prismarine_wall',
	'minecraft:prismarine_bricks',
	'minecraft:prismarine_bricks_stairs',
	'minecraft:prismarine_bricks_slab',
	'minecraft:dark_prismarine',
	'minecraft:dark_prismarine_stairs',
	'minecraft:dark_prismarine_slab',
]
const HalfUnbreakBlock = [
	'minecraft:spawner',
	'minecraft:nether_bricks',
	'minecraft:nether_brick_stairs',
	'minecraft:nether_brick_slab',
	'minecraft:nether_brick_wall',
	'minecraft:nether_brick_fence',
	'minecraft:cracked_nether_bricks',
	'minecraft:chiseled_nether_bricks',
	'minecraft:red_nether_bricks',
	'minecraft:red_nether_brick_stairs',
	'minecraft:red_nether_brick_slab',
	'minecraft:red_nether_brick_wall',	
	'minecraft:smooth_basalt',
	'minecraft:polished_basalt',	
	'minecraft:blackstone_stairs',
	'minecraft:blackstone_slab',
	'minecraft:blackstone_wall',
	'minecraft:chiseled_polished_blackstone',
	'minecraft:polished_blackstone',
	'minecraft:polished_blackstone_stairs',
	'minecraft:polished_blackstone_slab',
	'minecraft:polished_blackstone_wall',
	'minecraft:polished_blackstone_pressure_plate',
	'minecraft:polished_blackstone_button',
	'minecraft:polished_blackstone_bricks',
	'minecraft:cracked_polished_blackstone_bricks',
	'minecraft:polished_blackstone_brick_stairs',
	'minecraft:polished_blackstone_brick_slab',
	'minecraft:polished_blackstone_brick_wall',
	'minecraft:end_stone',
	'minecraft:end_stone_bricks',
	'minecraft:end_stone_bricks_stairs',
	'minecraft:end_stone_bricks_slab',
	'minecraft:end_stone_bricks_wall',
	'minecraft:purpur_block',
	'minecraft:purpur_pillar',
	'minecraft:purpur_stairs',
	'minecraft:purpur_slab',
	'minecraft:lantern',
	'minecraft:chain',
	'minecraft:cut_copper',
	'minecraft:cut_copper_stairs',
	'minecraft:cut_copper_slab',
	'minecraft:exposed_copper',
	'minecraft:exposed_cut_copper',
	'minecraft:exposed_cut_copper_stairs',
	'minecraft:exposed_cut_copper_slab',
	'minecraft:weathered_copper',
	'minecraft:weathered_cut_copper',
	'minecraft:weathered_cut_copper_stairs',
	'minecraft:weathered_cut_copper_slab',
	'minecraft:oxidized_copper',
	'minecraft:oxidized_cut_copper',
	'minecraft:oxidized_cut_copper_stairs',
	'minecraft:oxidized_cut_copper_slab',
	'minecraft:waxed_copper_block',
	'minecraft:waxed_cut_copper',
	'minecraft:waxed_cut_copper_stairs',
	'minecraft:waxed_cut_copper_slab',
	'minecraft:waxed_exposed_copper',
	'minecraft:waxed_exposed_cut_copper',
	'minecraft:waxed_exposed_cut_copper_stairs',
	'minecraft:waxed_exposed_cut_copper_slab',
	'minecraft:waxed_weathered_copper',
	'minecraft:waxed_weathered_cut_copper',
	'minecraft:waxed_weathered_cut_copper_stairs',
	'minecraft:waxed_weathered_cut_copper_slab',
	'minecraft:waxed_oxidized_copper',
	'minecraft:waxed_oxidized_cut_copper',
	'minecraft:waxed_oxidized_cut_copper_stairs',
	'minecraft:waxed_oxidized_cut_copper_slab',	
]
const pollution_filter_map = {
	'dust': {
		'low': ['htm:plant_fabric'],
		'medium': ['minecraft:paper','tfc:burlap_cloth'],
		'high': ['tfc:silk_cloth','tfc:wool_cloth']
	},
	'carbon': {
		'low': ['minecraft:jungle_leaves', 'minecraft:oak_leaves', 'minecraft:spruce_leaves', 'minecraft:dark_oak_leaves', 'minecraft:acacia_leaves', 'minecraft:birch_leaves', 'minecraft:azalea_leaves', 'minecraft:flowering_azalea_leaves', 'minecraft:mangrove_leaves', 'minecraft:cherry_leaves', 'tfc:wood/leaves/acacia', 'tfc:wood/leaves/ash', 'tfc:wood/leaves/aspen', 'tfc:wood/leaves/birch', 'tfc:wood/leaves/blackwood', 'tfc:wood/leaves/chestnut', 'tfc:wood/leaves/douglas_fir', 'tfc:wood/leaves/hickory', 'tfc:wood/leaves/kapok', 'tfc:wood/leaves/mangrove', 'tfc:wood/leaves/maple', 'tfc:wood/leaves/oak', 'tfc:wood/leaves/palm', 'tfc:wood/leaves/pine', 'tfc:wood/leaves/rosewood', 'tfc:wood/leaves/sequoia', 'tfc:wood/leaves/spruce', 'tfc:wood/leaves/sycamore', 'tfc:wood/leaves/white_cedar', 'tfc:wood/leaves/willow', 'tfc:plant/cherry_leaves', 'tfc:plant/green_apple_leaves', 'tfc:plant/lemon_leaves', 'tfc:plant/olive_leaves', 'tfc:plant/orange_leaves', 'tfc:plant/peach_leaves', 'tfc:plant/plum_leaves', 'tfc:plant/red_apple_leaves', 'ad_astra:glacian_leaves', 'twilightforest:rainbow_oak_leaves', 'twilightforest:twilight_oak_leaves', 'twilightforest:canopy_leaves', 'twilightforest:mangrove_leaves', 'twilightforest:dark_leaves', 'twilightforest:time_leaves', 'twilightforest:transformation_leaves', 'twilightforest:mining_leaves', 'twilightforest:sorting_leaves', 'twilightforest:thorn_leaves', 'twilightforest:beanstalk_leaves', 'beneath:wood/leaves/crimson', 'beneath:wood/leaves/warped', 'vinery:dark_cherry_leaves', 'vinery:grapevine_leaves', 'vinery:apple_leaves'],
		'medium': ['tfc:plant/leafy_kelp','tfc:plant/winged_kelp'],
		'high': ['coralstfc:coral_powder']
	},
	'sulfur': {
		'medium': ['minecraft:charcoal'],
		'high': ['minecraft:white_wool', 'minecraft:orange_wool', 'minecraft:magenta_wool', 'minecraft:light_blue_wool', 'minecraft:yellow_wool', 'minecraft:lime_wool', 'minecraft:pink_wool', 'minecraft:gray_wool', 'minecraft:light_gray_wool', 'minecraft:cyan_wool', 'minecraft:purple_wool', 'minecraft:blue_wool', 'minecraft:brown_wool', 'minecraft:green_wool', 'minecraft:red_wool', 'minecraft:black_wool', 'ad_astra:glacian_fur', 'brewery:patterned_wool']
	}
}
const rock_knapping = [
	"beneath:blackstone_pebble","beneath:nether_pebble",

	"tfc:rock/loose/andesite","tfc:rock/loose/basalt","tfc:rock/loose/chalk","tfc:rock/loose/chert",
	"tfc:rock/loose/claystone","tfc:rock/loose/conglomerate","tfc:rock/loose/dacite","tfc:rock/loose/diorite",
	"tfc:rock/loose/dolomite","tfc:rock/loose/gabbro","tfc:rock/loose/gneiss","tfc:rock/loose/granite",
	"tfc:rock/loose/limestone","tfc:rock/loose/marble","tfc:rock/loose/phyllite","tfc:rock/loose/quartzite",
	"tfc:rock/loose/rhyolite","tfc:rock/loose/schist","tfc:rock/loose/shale","tfc:rock/loose/slate",

	"tfc:rock/mossy_loose/andesite","tfc:rock/mossy_loose/basalt","tfc:rock/mossy_loose/chalk","tfc:rock/mossy_loose/chert",
	"tfc:rock/mossy_loose/claystone","tfc:rock/mossy_loose/conglomerate","tfc:rock/mossy_loose/dacite","tfc:rock/mossy_loose/diorite",
	"tfc:rock/mossy_loose/dolomite","tfc:rock/mossy_loose/gabbro","tfc:rock/mossy_loose/gneiss","tfc:rock/mossy_loose/granite",
	"tfc:rock/mossy_loose/limestone","tfc:rock/mossy_loose/marble","tfc:rock/mossy_loose/phyllite","tfc:rock/mossy_loose/quartzite",
	"tfc:rock/mossy_loose/rhyolite","tfc:rock/mossy_loose/schist","tfc:rock/mossy_loose/shale","tfc:rock/mossy_loose/slate"
]
// item ID dumps generated with '/kubejs list_tag minecraft:item adpother:filters/carbon/low'
//
// v3 had a problem where items would not have descriptions assigned in multiplayer
// if items were called using tags, which is why they are hardcoded by IDs here.
//
// this issue *may* have been fixed by kubejs in 1.20.
// if that is the case, then these ID lists should be replaced with tags

ItemEvents.tooltip(HTFC4 => {
	Object.keys(pollution_filter_map).forEach(pollution_type => {
		Object.keys(pollution_filter_map[pollution_type]).forEach(filter_tier =>  {
			pollution_filter_map[pollution_type][filter_tier].forEach(filter_item => {
				HTFC4.addAdvanced(filter_item, (item, advanced, text) => {
					if (!HTFC4.shift) {
					  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
					} else {
					  text.add(1, [Text.of("This item is a ").gold(), Text.of(`${filter_tier}-tier ${pollution_type} filter`).yellow()])
					  text.add(2, Text.gold("Place inside of a filter frame and route pollution"))
					  text.add(3, Text.gold("using pumps, vents and chimneys"))
					}
	})})})})
	HTFC4.addAdvanced('minecraft:charcoal', (item, advanced, text) => {
		// the "hold shift" tooltip here is commented out as it's added by pollution filter descriptions
		//if (!HTFC4.shift) {
		//	text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		//} else {
		if (HTFC4.shift) {
			text.add(Text.of(''))
			text.add(Text.of('Need charcoal?'))
			text.add([Text.of('Place logs into a hole in a stack with ').gold(), Text.of('Shift + Right Click').yellow()])
			text.add(Text.gold('Use a Fire Starter to burn it and quickly cover with a solid block'))
			text.add(Text.gold('Wait patiently - until there is NO smoke'))
			text.add(Text.gold('Mine with a shovel'))
		}
	})
	//HTFC4.addAdvanced('firmalife:drying_mat', (item, advanced, text) => {
	//	if (!HTFC4.shift) {
	//	  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
	//	} else {
	//	  text.add(1, Text.gold('No longer craftable due to causing lag.'))
	//	  text.add(2, Text.gold('Make solar driers instead!'))
	//	}
	//})
	HTFC4.addAdvanced([//#forge:soap/weak
		'supplementaries:soap'
	], (item, advanced, text) => {
		if (!HTFC4.shift) {
		text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		text.add(1, [Text.gold('Restores '),Text.yellow('5 points'),Text.gold(' (out of 10) of the dirtiness meter.')])
		text.add(2, Text.gold('Two is enough to fully clean yourself.'))
		text.add(3, Text.yellow(''))
		text.add(4, Text.yellow('Right click to use!'))
		}
	})
	HTFC4.addAdvanced([//#forge:soap/strong
		'bodyhygiene:dandelion_soap',
		'bodyhygiene:poppy_soap',
		'bodyhygiene:blue_orchid_soap',
		'bodyhygiene:allium_soap',
		'bodyhygiene:azure_bluet_soap',
		'bodyhygiene:red_tulip_soap',
		'bodyhygiene:orange_tulip_soap',
		'bodyhygiene:white_tulip_soap',
		'bodyhygiene:pink_tulip_soap',
		'bodyhygiene:oxeye_daisy_soap',
		'bodyhygiene:cornflower_soap',
		'bodyhygiene:lily_of_the_valley_soap',
		'bodyhygiene:wither_rose_soap',
		'bodyhygiene:spore_blossom_soap',
		'bodyhygiene:sunflower_soap',
		'bodyhygiene:lilac_soap',
		'bodyhygiene:rose_bush_soap',
		'bodyhygiene:peony_soap'], (item, advanced, text) => {
		if (!HTFC4.shift) {
		text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		text.add(1, [Text.yellow('Completely resets'),Text.gold(' the dirtiness meter.')])
		text.add(2, Text.gold('A newly crafted bar has four uses.'))
		text.add(3, Text.yellow(''))
		text.add(4, Text.yellow('Right click to use!'))
		}
	})
	HTFC4.addAdvanced('compressedcreativity:mesh_splashing', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		  text.add(1, Text.gold('Makes the air blower shoot water particles'))
		  text.add(2, Text.gold('as if there is a block of water in front of it.'))
		  text.add(3, Text.gold(''))
		  text.add(4, Text.red('Only usable on Industrial Air Blowers.'))
		}
	})
	HTFC4.addAdvanced('compressedcreativity:mesh_dense', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		  text.add(1, Text.gold('Drastically lowers the minimal temperature for'))
		  text.add(2, Text.gold('smoking and blasting, but makes heat drain faster.'))
		  text.add(3, [Text.gold('The exact values are '),Text.yellow('55°C+ for smoking ')])
		  text.add(4, [Text.gold('and '),Text.yellow('110°C+ for blasting'),Text.gold('.')])
		  text.add(5, Text.gold(''))
		  text.add(6, Text.red('Only usable on Industrial Air Blowers.'))
		}
	})
	HTFC4.addAdvanced('compressedcreativity:mesh_haunted', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		  text.add(1, Text.gold('Turns passing hot air into soul flame,'))
		  text.add(2, Text.gold('which allows for haunting recipes.'))
		  text.add(3, Text.yellow('Keep in mind that the fan still has to be hot!'))
		  text.add(4, [Text.gold('The exact minimal temperature is '),Text.yellow('110°C'),Text.gold('.')])
		  text.add(5, Text.gold(''))
		  text.add(6, Text.red('Only usable on Industrial Air Blowers.'))
		}
	})
	HTFC4.addAdvanced('compressedcreativity:air_blower', (item, advanced, text) => {
		if (HTFC4.shift) {
		  text.add(2, Text.aqua('Works like a powerful Encased Fan!'))
		  text.add(3, Text.aqua('Powered by PNC air pressure instead of SU.'))
		  text.add(4, Text.aqua('At 4.0+ bar, processing speed reaches double.'))
		}
	})
	HTFC4.addAdvanced('compressedcreativity:industrial_air_blower', (item, advanced, text) => {
		if (HTFC4.shift) {
		  text.add(2, Text.aqua('Works like a VERY powerful Encased Fan!'))
		  text.add(3, Text.aqua('At 9.1+ bar, processing speed reaches quadruple.'))
		  text.add(4, Text.aqua('Accepts meshes: type $blower_mesh in JEI for more info'))
		  text.add(5, Text.gold('Can also be heated by any PNC heat source!'))
		  text.add(6, [Text.gold('Exact minimal temps are '),Text.yellow('110°C+ for smoking ')])
		  text.add(7, [Text.gold('and '),Text.yellow('330°C+ for blasting'),Text.gold('.')])
		}
	})
	HTFC4.addAdvanced('compressedcreativity:rotational_compressor', (item, advanced, text) => {
		if (HTFC4.shift) {
		  text.add(2, Text.aqua('A very primitive air compressor.'))
		  text.add(3, Text.aqua('Generates up to 20ml/t.'))
		  text.add(4, Text.aqua('Doesn\'t support safety or speed upgrades.'))
		}
	})
	HTFC4.addAdvanced('compressedcreativity:compressed_air_engine', (item, advanced, text) => {
		if (HTFC4.shift) {
		  text.add(2, Text.aqua('A cheap motor based on PNC pressure.'))
		  text.add(3, Text.aqua('Produces up to 1024su for 40ml/t.'))
		}
	})
	HTFC4.addAdvanced('compressedcreativity:mechanical_visor_upgrade', (item, advanced, text) => {
		if (HTFC4.shift) {
			text.add(1, Text.aqua('Adds the functionality of Engineer\'s Goggles.'))
			text.add(2, Text.aqua('Alternatively, a similar effect can be accomplished by'))
			text.add(3, Text.aqua('placing a pair of goggles into the curio head slot.'))
		}
	})
	HTFC4.addAdvanced('supplementaries:slingshot', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		  text.add(1, Text.gold('Shoots blocks! Any placeables, in fact.'))
		  text.add(2, Text.gold('Deals no damage and is completely harmless'))
		}
	})
	HTFC4.addAdvanced([
		'immersiveengineering:blastbrick',
		'immersiveengineering:blastbrick_reinforced',
		'immersiveengineering:blastfurnace_preheater',
		'immersiveengineering:blast_furnace',
		'immersiveengineering:advanced_blast_furnace'
	], (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		  text.add(1, Text.red('Decorative use only!'))
		  text.add(2, Text.gold('IE blast furnaces are non-functional'))
		}
	})
	HTFC4.addAdvanced('immersiveengineering:cokebrick', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		  text.add(1, Text.red('Decorative use only!'))
		  text.add(2, Text.gold('Coke ovens are made from fire bricks'))
		}
	})
	HTFC4.addAdvanced('create:vertical_gearbox', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		  text.add(1, Text.gold('Use brass wrench on a normal gearbox'))
		  text.add(2, [Text.gold('Rotate it with '), Text.of('Right click ').yellow(), Text.gold('on a side')])
		}
	})
	HTFC4.addAdvanced('kubejs:feed_vege', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		  text.add(1, Text.gold('fodder that will allow you to tame and'))
		  text.add(2, Text.gold('breed some of the wild Boar and Tortoise'))
		}
	})
	HTFC4.addAdvanced('kubejs:feed_seed', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		  text.add(1, Text.gold('fodder that will allow you to tame and breed'))
		  text.add(2, Text.gold('some of the wild animals - Aardvark, Terror Bird'))
		}
	})
	HTFC4.addAdvanced('kubejs:feed_hay', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		  text.add(1, Text.gold('fodder that will allow you to tame and'))
		  text.add(2, Text.gold('breed some of the cattle - Big Bisons'))
		}
	})
	HTFC4.addAdvanced('kubejs:feed_fruit', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		  text.add(1, Text.gold('fodder that will help you tame and breed some'))
		  text.add(2, Text.gold('of the lizards - Newts, Giant Salamanders, Monitor'))
		}
	})
	HTFC4.addAdvanced('kubejs:feed_meat', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		  text.add(1, Text.gold('fodder that will help you tame and breed'))
		  text.add(2, Text.gold('some of the wilds animals - Opossum'))
		}
	})
	HTFC4.addAdvanced('untamedwilds:chum', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
		  text.add(1, Text.gold('fodder that will help you tame and breed some of the'))
		  text.add(2, Text.gold('wild fishes - sunfish, triggerfish, sawfish, arowana '))
		}
	})
	HTFC4.addAdvanced('kubejs:canoe', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('First boat had to be chiselled and burned from the wood' ))
			text.add(2, Text.red('IMPORTANT - only a few types of wood can be chiseled' ))
			text.add(3, Text.red(' Douglas fir / Pine / Palm / Spruce / Sequoia '))
			text.add(4, Text.red(' Kapok / Mangrove / White cedar / Willow' ))
			text.add(5, [Text.gold('- Place 3 logs of '), Text.of('stripped ').red(), Text.of('wood horizontally on one line' ).gold()])
			text.add(6, Text.gold('- Use a saw with a chisel on all the logs'))
			text.add(7, Text.gold('- Use an axe with a chisel on all logs '))
			text.add(8, Text.gold('- Use a Fire Starter or Flint & Steel and burn the center '))
			text.add(9, Text.gold('- Wait patiently '))
			text.add(10, Text.red('WARNING - you CANNOT break the boat - because you will destroy it '))
		}
	})
	HTFC4.addAdvanced('minecraft:campfire', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('Creating a firepit' ))
			text.add(2, Text.gold('- Put 1 log and 3 sticks together on top of a block' ))
			text.add(3, Text.gold('- Use a Fire Starter or Flint & Steel - burn the top of the block '))
			text.add(4, Text.gold('- Greater chance when you put paper, straw and/or pinecones - optional'))
		}
	})
	HTFC4.addAdvanced('minecraft:glass_bottle', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('It is not only bottle' ))
			text.add(2, Text.gold('Has a small amount of air inside' ))
			text.add(3, Text.gold('Very useful when diving'))
		}
	})
	HTFC4.addAdvanced([//#hordes:infection_cures
		'minecraft:golden_apple',
		'kubejs:silver_carrot',
		'kubejs:silver_apple',
		'minecraft:golden_carrot',
		'farmersdelight:squid_ink_pasta',
		'minecraft:enchanted_golden_apple'
	], (item, advanced, text) => {
		text.add(1, Text.gold('Cures Zombie Infection'))
	})
	HTFC4.addAdvanced([//#forge:space_ores
		'beyond_earth:raw_desh',
		'beyond_earth:raw_ostrum',
		'beyond_earth:raw_calorite'
	], (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('Mineral ores from other planets' ))
			text.add(2, [Text.gold('You will only find them on the '), Text.red('Moon and other planets' )])
		}
	})
	HTFC4.addAdvanced([//#forge:dead_animal
		'butchersdelight:dead_cow',
		'butchersdelight:deadsheep',
		'butchersdelight:deadpig',
		'butchersdelight:deadgoat',
		'butchersdelight:deadhoglin',
		'butchersdelight:deadchiken',
		'butchersdelight:deadrabbitbrown',
		'butchersdelight:deadllama',
		'butchersdelight:deadstrider'
	], (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, [Text.gold('Hang a dead animal on a hook from '), Text.red('ButchersDelight')])
			text.add(2, Text.gold('Small animals (chicken, rabbit) place on ground' ))
			text.add(3, Text.gold('Use any knife and dissect the meat' ))
			//text.add(3, Text.gold('Optionally you can roast them over a campfire but you get less meat ' ))
			//this cannot be done since the vanilla campfire is removed
			//TODO: update if there is another way to bake the whole animal
		}
	})
	HTFC4.addAdvanced([//#tfc:drink_items
		'tfc:ceramic/jug',
		'waterflasks:leather_flask',
		'waterflasks:iron_flask'
	], (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('Use this item to store drinking water' ))
			text.add(2, Text.gold('But be careful, fresh water can sometimes give you poisoning' ))
			text.add(3, Text.gold('Drink only boiled, purified or mineral water' ))
		}
	})
	HTFC4.addAdvanced([//#tfc:lamp_fuel
		'tfc:bucket/tallow',
		'tfc:bucket/olive_oil',
		'immersiveengineering:creosote_bucket'
	], (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('You can use as fuel in a lamp' ))
			text.add(2, Text.gold('It is enough for a long burn time' ))
		}
	})
	HTFC4.addAdvanced('myrtrees:latex', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, [Text.gold('Obtained from tapping into '),Text.yellow('Rubberwood Trees'),Text.gold('.')])
			text.add(2, Text.gold('A rubberwood sapling can be obtained from sieving dirt.'))
			text.add(3, Text.yellow('They can only be planted on dirt that has no grass!'))
			text.add(4, Text.gold(''))
			text.add(5, [Text.gold('Place a '),Text.yellow('"Tree Tap"'),Text.gold(' on a rubberwood tree,')])
			text.add(6, [Text.gold('as well as a '),Text.yellow('"Bucket for Latex"'),Text.gold(' right below.')])
			text.add(7, Text.gold('Latex liquid should then start collecting.'))
			text.add(8, Text.gold('Right click the bucket to see how much is stored.'))
			text.add(9, [Text.yellow('1000mb'),Text.gold(' is equal to '),Text.yellow('one latex.')])
			text.add(10, [Text.gold('Each tree can produce up to '),Text.yellow('10 latex'),Text.gold(' in total.')])
			text.add(11, Text.gold(''))
		}
	})
	HTFC4.addAdvanced('farmersrespite:coffee_berries', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('Coffee fruits can be found exclusively on coffee bushes' ))
			text.add(2, Text.gold('They grow in the Nether in basalt biomes' ))
			text.add(3, Text.gold('The journey can be difficult but rewarding' ))
		}
	})
	HTFC4.addAdvanced('tfc:food/cattail_root', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('Cattails you can find near water' ))
			text.add(2, Text.gold('Look for lakes and reservoirs of water' ))
			text.add(3, Text.gold('Use a knife - Does not always drop' ))
		}
	})
	HTFC4.addAdvanced('adpother:dust', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('Falling onto the ground, degrades it and makes it barren, turning it into gravel' ))
			text.add(2, Text.gold('Dust can be filtered with vacuum cleaners or in chimney filters with paper, cloths and/or fabric' ))
		}
	})
	HTFC4.addAdvanced('adpother:sulfur', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('Pollutes the air to a large extent, causing acid rain and dying plants' ))
			text.add(2, Text.gold('Sulfur can be filtered in chimney filters filled with wool ' ))
		}
	})
	HTFC4.addAdvanced('adpother:carbon', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('Pollutes the air to a large extent, causing excessive grass growth' ))
			text.add(2, Text.gold('Carbon can be filtered in chimney filters filled with leaves or thatch' ))
		}
	})
	HTFC4.addAdvanced('tfc:thatch', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('You can get Thatch blocks by drying green plant fiber block' ))
			text.add(2, Text.gold('Place it on the ground. Wait the appropriate amount of time for the block to dry.' ))
		}
	})
	HTFC4.addAdvanced('map_atlases:atlas', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('you can craft item or find it at the cartographer in the nearest village' ))
		}
	})
	HTFC4.addAdvanced( UnbreakBlock , (item, advanced, text) => {
		text.add(1, Text.gold('This block is very hard almost indestructible' ))
		text.add(2, Text.gold('Remember this before you use it.' ))
	})
	HTFC4.addAdvanced( HalfUnbreakBlock , (item, advanced, text) => {
		text.add(1, Text.gold('This block is very hard' ))
		text.add(2, Text.gold('Remember this before you use it.' ))
	})
	HTFC4.addAdvanced( 'minecraft:heart_of_the_sea' , (item, advanced, text) => {
		text.add(1, Text.gold('item to be found in Burried Treasure' ))
	})
	HTFC4.addAdvanced('artisanal:metal/tin_can', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, [Text.gold('Has to be heated to at least '),Text.yellow('150°C'),Text.gold(' in order to seal!')])
		}
	})
	HTFC4.addAdvanced('artisanal:metal/sealed_tin_can', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('Can be heated up to become sterilized!'))
			text.add(2, [Text.gold('Can be opened with a '),Text.yellow('Can Opener'),Text.gold(', or a '),Text.yellow('Hammer'),Text.gold(' in a pinch!')])
		}
	})
	HTFC4.addAdvanced('artisanal:metal/sterilized_tin_can', (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, Text.gold('Place in crafting grid to remove negative traits.'))
			text.add(2, [Text.gold('Can be opened with a '),Text.yellow('Can Opener'),Text.gold(', or a '),Text.yellow('Hammer'),Text.gold(' in a pinch!')])
		}
	})
	HTFC4.addAdvanced( 'create:blaze_burner' , (item, advanced, text) => {
		text.add(1, Text.gold('Be careful, Blazes cannot be tamed or locked away' ))
		text.add(2, Text.gold('its dangerous - find another heater' ))
	})
	HTFC4.addAdvanced( rock_knapping , (item, advanced, text) => {
		if (!HTFC4.shift) {
		  text.add(1, [Text.of('Hold ').gold(), Text.of('Shift ').yellow(), Text.of('to see more info.').gold()])
		} else {
			text.add(1, [Text.gold('Can be smashed against a '),Text.yellow('Hardened Stone'),Text.gold(' block')])
			text.add(2, Text.gold('to crudely make stone tool heads.'))
			text.add(3, [Text.gold('Later on, a '),Text.yellow('Chisel'),Text.gold(' with a '),Text.yellow('Large Scraped Hide')])
			text.add(4, [Text.gold('or a piece of '),Text.yellow('Leather'),Text.gold(' can be used for precise knapping.')])
		}
	})
})