Custom Block Porting - Timber Forge Tutorial 1.16 porting to 1.21.4

Veil Hunters\Datapacks\veilitems\data\minecraft\tags\function load.json

{
    "values": [
    "veilitem:void_forge/load"
    ]
}

tick.json

{
    "values": [
    "veilitem:void_forge/main"
    ]
}

Veil Hunters\Datapacks\veilitems\data\veilitem\function\void_forge load.mcfunction

give @p item_frame[item_model="veilhunter:void_forge/void_forge",entity_data={id:"minecraft:item_frame",Item:{id:"minecraft:glow_item_frame",count:1},Fixed:1b,Invisible:1b,Silent:1b,Invulnerable:1b,Tags:["void_forge"]}] 1

main.mcfunction

execute as @e[type=minecraft:glow_item_frame,tag=void_forge,tag=!placed] at @s run function veilitem:void_forge/mechanics/place
execute as @e[type=minecraft:glow_item_frame,tag=void_forge,tag=placed] at @s unless block ~ ~ ~ minecraft:dropper run function veilitem:void_forge/mechanics/remove

Veil Hunters\Datapacks\veilitems\data\veilitem\function\veil_forge\mechanics

place.mcfunction
setblock ~ ~ ~ minecraft:dropper
playsound veilhunter:block.void_forge.place block @a[distance=0..3] ~ ~ ~
particle minecraft:soul_fire_flame ~ ~ ~ 0 0 0 1 10
tag @s add placed

remove.mcfunction

summon item ~ ~0.5 ~ {CustomNameVisible:1b,CustomName:'"Void Forge"',Item:{id:"minecraft:glow_item_frame",count:1,components:{"minecraft:entity_data":{id:"minecraft:glow_item_frame",Fixed:1b,Invisible:1b,Silent:1b,Invulnerable:1b,Tags:["void_forge"]},"minecraft:item_model":"veilhunter:void_forge/void_forge"}}}
kill @e[type=item,nbt={Item:{id:"minecraft:dropper"}},distance=0..2,sort=nearest,limit=1]
kill @s
Continue to help post