There are two things in a vanilla server that can make a player completely unable to affect blocks. First, they may be inside the protected area around the current default spawn - since 1.7, the protected area's size can be changed in the server's properties file, and the default spawn area can be moved by the setworldspawn
command. This would cause other non-op players to also not be able to affect the same blocks, though.
The other likely culprit is that their Game Mode may have changed to Adventure mode. One of the main effects of Adventure mode is that player's cannot break blocks without the correct tools.
The player.dat files are, from what I can tell, stored in the same NBT format as almost all other Minecraft data. The format includes some heavy compression, so any damage or corruption would make the file completely unreadable, and Minecraft would most likely just spawn them in as if they were a brand new user.
I know this is an older question but if you have not found a solution to this or a mod implementing this functionality already I am just making a quick glance over the Minecraft source generated by the latest Minecraft Coder Pack (9.03 for Minecraft 1.7.2) and in the BlockSapling class (net.minecraft.block.BlockSapling) I found a list of imports for the tree types that can be grown from saplings
import net.minecraft.world.gen.feature.WorldGenBigTree;
import net.minecraft.world.gen.feature.WorldGenCanopyTree;
import net.minecraft.world.gen.feature.WorldGenForest;
import net.minecraft.world.gen.feature.WorldGenMegaJungle;
import net.minecraft.world.gen.feature.WorldGenMegaPineTree;
import net.minecraft.world.gen.feature.WorldGenSavannaTree;
import net.minecraft.world.gen.feature.WorldGenTaiga2;
import net.minecraft.world.gen.feature.WorldGenTrees;
import net.minecraft.world.gen.feature.WorldGenerator;
In the tree generating classes there are generate methods
public boolean generate(World, Random, int, int, int)
Since these are the main tree generating classes for world generation you could find where they create the logs (Blocks.log and Blocks.log2) and change the generated type.
Keep in mind you will need to change the block leaves look for when they do their random tick (that is if you still want leaves). From what I can see you would change line 134 (as generated by this version of MCP) in net.minecraft.block.BlockLeaves
if (var15 != Blocks.log && var15 != Blocks.log2)
to
if (var15 != Blocks.obsidian)
As for obsidian to logs, you would need to do the following:
In BlockLiquid.java (net.minecraft.block.BlockLiquid) on line 526 (as generated by this version of MCP) you will find
p_149805_1_.setBlock(p_149805_2_, p_149805_3_, p_149805_4_, Blocks.obsidian);
which when deobfuscated would be
par1World.setBlock(xCoord, yCoord, zCoord, Blocks.obsidian);
you would change the Blocks.obsidian to Blocks.log and possibly set a randomized metadata value.
If you also wanted the obsidian in the end to be generated as logs you would edit net.minecraft.world.gen.feature.WorldGenSpikes, on line 55 (also as generated by the current MCP) you would do the same as above.
Now as I have seen in one of the comments, there is the problem of wood being burned by lava before the player can get to it. The solution to this is also the reason it was never a problem. The only time obsidian is created naturally is in The End (the obsidian pillars) and whenever water flows over lava. Since there would not naturally be any air around the obsidian (either being stone, gravel, ores, water, or lava) fire can not be started and cannot destroy the logs.
Edit: If you wanted to change the behavior and block type used by nether portals that might be a bit more complicated, and changing this would cause the possibility of burning portals, since they can be generated near fire or lava in either world.
Best Answer
Go to singleplayer, create a world, name the world (folder) world and generate it. After that exit the world and copy the folder to your server.