@darkirk
First, you should have this open at all times: https://godot.readthedocs.io/en/stable/
Let's work through the logic of problem 1:
So you have some container of data--in Godot's case, you have some kind of scene which defines the properties of the tile you'd like to set down into the world. Assuming you already have a world, a functioning player body with a camera (i.e. some way for the player to point at the world and a way to define their position in space), a controller to manipulate how that player body moves, and some scene you'd like to instance, then you're set to define how the player will place objects. You know that you need to gather Input in order to activate anything, so in your player controller you might want to poll for input: https://godot.readthedocs.io/en/stable/classes/class_input.html
func _ready():
set_process(true)
func _process(delta):
if(Input.is_mouse_button_pressed(BUTTON_LEFT)):
#do the thing
Or you might want to read an input event for when the left mouse click is activated: https://godot.readthedocs.io/en/stable/learning/features/inputs/inputevent.html
func _ready():
set_process_input(true)
func _input(event):
if(event.type == InputEvent.MOUSE_BUTTON):
if(event.button_index == BUTTON_LEFT and event.pressed):
#do the thing
(I explain this bit because the docs don't do a very good job of saying how you can use the event object given by _input.) You might realize that this code will continuously activate every single frame, when you only want it to activate on the first frame the button is pressed; I leave it to you to figure out how to control that.
Then you can instance the scene as described above. But where will you instance it? You would need to be able to point at an object to test if there's some sort of surface to place objects on (assuming that's how you want it to be done, like minecraft or something.) That can be handled with a RayCast, which you can just add to your player as a node and reference via get_node() in your controller: https://godot.readthedocs.io/en/stable/learning/features/physics/ray-casting.html
Assuming you want your ray to point in the direction that you're looking, you can reference your camera's forward vector; this can be accessed via -camera_node_reference.get_transform().basis.z, note that it's negative. (Again, gotta explain this bit; wish Godot had a simple forward Vector3 like Unity3D has, but alas.)
Now you know how to solve problem 2, because you now know how to define how long your raycast can be, ergo how far the player is allowed to place an object before it's too far (you are reading these docs, aren't you?)
For problem 3, you would need to define a grid: this can be done by yourself, just by defining where an object is allowed to exist in space (e.g. const step = 3, then check whether an object exists exactly within multiples of 3, if not then snap it to the nearest spot available), or you can use Godot's built-in GridMap node which will handle the functions of a grid for you: https://godot.readthedocs.io/en/stable/learning/features/3d/using_gridmaps.html In fact it seems perfectly situated for what you're attempting to accomplish.
This is all coming from a person with zero experience making these types of games and only about two weeks worth of experience in Godot; if you step through the logic of how things ought to be done and keep your nose in the docs whenever there's some piece of the engine you're uncertain of, you will probably be able to figure it out. If there's anything specific you need to understand how to do, my best advice is that you read the docs. If for some reason you don't like reading the docs, my second best advice is to find a friend who will handle the programming while you take care of some other aspect of the game like level design or art etc. Tutorials are great but they do a lot of hand-holding and don't teach you how to "fish for yourself". Hopefully I've given you some insight as to how you would solve any future problems; the formula is essentially:
A. Identify the parts involved (nodes)
B. Understand how the parts work if you're uncertain (docs)
C. Glue the parts together with logic (scripting)
Good luck!