I wasn't satisfied with how "no tree-punching" was implemented in pretty much any mod. Some weren't very compatible, others not very customizable, some did it in a weird way, others added a bunch of extra features on top of that. So, looking for a mod that satisfied my needs, I came across No Tree Punching by AlcatrazEscape. Compatible, configurable, but also added a lot of other features I didn't necessarily want. Licensed under GNU GPL V3, it allowed modification, so I set out to make some modifications.
The result: Fists of Flesh.
No Tree Punching, and just that! (Except also kind of not just that.)
The main features of this mod, and the primary differences between this and No Tree Punching (v1.0.0+, not v2.0.0+) are:
-No additional content. Only the harvest speed and block drop modifications.
-Massively slows breaking blocks which should need tools to harvest by hand, and stops them from dropping.
-Highly customizable, featuring a more robust whitelist, and configurable harvest time modifiers if using the wrong tool on a block.
-The ability to set it so that any block that is a "shovel type" block which can be harvested without a tool normally still can be, without needing to manually whitelist dirt, sand, gravel, etc. Also lets you make it so harvesting them by hand is slower than normal, to encourage getting a shovel even though it's not necessary for weak blocks.
The biggest change in this mod is probably the whitelist. I've overhauled it quite significantly. Now with property and metadata support, and not only full wildcards but also partial ones.
minecraft:gravel minecraft:sand minecraft:leaves minecraft:grass[snowy=false] -This one would let you break non-snowy grass by hand, but not snowy grass. examplemod:exampleblock[exampleproperty1=value1&exampleproperty2=value2] -This one would let you break exampleblock only if both properties listed match. minecr*:*stone* -This one would whitelist: minecraft:cobblestone minecraft:stone minecraft:stone_bricks minecrexample:stoneexample etc. *amplemod:exampleblo*[LEGACYMETA=1] -This one would allow examplemod:exampleblock or whatever else matches to break by hand as long as it has legacy-type numerical metadata matching 1. examplemod:examplething[stuff=yes|no|maybe&other=yes] -This would allow examplething to break as long as its "stuff" property was set to yes, no, or maybe, and its "other" property was set to yes. You can mix and match these as you see fit. You cannot use & inside properties though: *:*[snowy=true&false] is not valid since it cannot be both at once. You also cannot add use | to seperate properties: *:*[snowy=true|cats=pet] will not work. You need to instead put: *:*[snowy=true] in one entry, and: *:*[cats=pet] in another.
Various people on the Minecraft Forge forums for helping with issues I was having.
And you, for taking the time to consider using this mod!
Under GNU GPL V3, Source Code will be posted in the additional files. I may set up a github later too, if I can figure out how.