Enhanced blocks - best way to code them
I'm currently creating a datapack that allows some specific blocks to be "enhanced", which in short means that I'm placing interaction and display entities on / in them, providing some extra graphical features as well as allowing the player to interact with block that are usually not interactive.
Considering this is a datapack aimed at a survival playstyle, I'm a bit unsure about which of the two following solutions is better to achieve the above, I was hoping to get some insight from you guys:
Replace (as in, destroy) the whole block with a block entity + barrier block + display entity. The pros of this solution is that I have total control over the behaviour and look of the block, but at the same time I lose all the vanilla block behaviours, like flammability, explosion resistance etc..., de facto providing indestructible blocks by means other than the player attack.
Keep the original block, and work around it with display entities to change its appearance and "enclose" the block with a slightly larger interaction entity. This has the advantage of not altering the original block in any way, but has limits in terms of how the appearance can be changed, where item display can be positioned (due to lighting) and if the original block is destroyed by sources other than a player attack or moved I have a bunch of "floating" entities (I can't realistically check all of them constantly to see if the block is not there anymore)
What are your thoughts on this?