Blockbullets

ToolsBlockBullets is a tool texture that should tell the compiler (VBSP) to cause all bullets to be blocked when this texture is used.
However, for all intents and purposes, it is nothing but an invisible wall, solid to everything which also cuts visleafes, just like any regular wall. As a matter of fact, if the brush is too thin, the bullets will simply pass. So it would block everything but bullets in that case.
In some games, it is the exact same as ToolsInvisible, but without the parameter.
ToolsBlockBullets consists of , $translucent and $nodecal. No special Compile Flag to block bullets.
 has its own blockbullets_cs variant that actually does what it is supposed to do, even with a one unit thick wall. However, this branch is no longer actively developed and not used for any other game nowadays. So this tool texture and its code is unusable.
==Actually blocking bullets==
But no despair, there are ways to block bullets, just without tool textures.
As it turns out, physical debris objects possess the ability to "eat" bullets and not let them pass.
===Using Func_physbox===
Create a simple brush that you would want your bullet blocker to be, and turn it into a func_physbox entity using any material using the "default_silent" surfaceprop.
A good contender would be Tools/toolsskybox2D, simply because every game has it, and you're unlikely to ever actually use it. So it stands out from the regular skybox texture.
Do not worry, it won't work as skybox texture, as it will loose all functionality as tool texture when used on an entity. We only want the surfaceprop.
This Func_physbox entity must have the following flags set:
* Start Asleep.
* Ignore +USE for Pickup.
* Debris - Don't collide with the player or other debris.
* Motion Disabled.
* Not affected by rotor wash.
* Physgun is NOT allowed to pick this up.
* Physgun is NOT allowed to punt this object.
* Prevent motion enable on player bump.
* Only Break on Trigger.
* Don't allow bullet penetration.
Depending on game, some of these flags may not exist. for example does not have the rotorwash flag.
You merely need to set all flags to stop it from ever moving. As we're abusing the "Don't allow bullet penetration" flag for our purposes.
To make it easier for you you can use the following spawnflag value if you turn "Smart Edit" mode off:
For 15005697.
For 9750529.
Next, the following keyvalues need to be set:
Rendermode : "Do not render"
Disable Shadows : "Yes"
Disable Receiving Shadows : "Yes"
===Using Prop_physics===
If for whatever reason, func_physbox is not an option for you, you can do the exact same thing with a physics prop. Even prop_physics_override works if you have no physics prop that fits, but a dynamic prop happens to work.
Find or create a model that has the size you need. If your branch allows it, you can upscale any prop to be fitting. Perhaps a Door model, or a garage gate would fit nicely.
This prop_dynamic or prop_dynamic_override entity must have the following flags set:
* Start Asleep.
* Don't take physics damage
* Debris - Don't collide with the player or other debris.
* Motion Disabled.
* Not affected by rotor wash.
* Prevent pickup.
* Prevent motion enable on player bump.
Next, the following keyvalues need to be set:
Rendermode : "Do not render"
Disable Shadows : "Yes"
Disable Receiving Shadows : "Yes"
Breakable by : "Only Tanks" 
==Blocking Projectiles==
Making a projectile deflecting brush is not possible, but you can make a trigger that deletes the projectile, using filters and the <Code>OnStartTouch - !Activator - Kill</Code> outputs.
# Place a or entity for every projectile you want to delete.
# Place a that lists every filter you had just created, with the "Logic Type" set to "OR (any filter must pass)".
# Build a using whatever filter entity you wish.
# Set the Trigger's outputs to<Code>OnStartTouch - !Activator - Kill</Code>
# Set the Trigger's flags to "Everything (not including physics debris)"