In minecraft forge, each loot table pool needs to have a name, otherwise the loot table won't work. This is because forge allows to add and remove pools, so it needs some way to refer to them. Adding "name":"whatever" to your loot table pool should work. Look at https://mcforge.readthedocs.io/en/latest/items/loot_tables/ for more info.
While I respect diesieben07's objection to the common proxy approach, even the actual javadocs written by cpw for the proxy system suggest using a common proxy. So it is understandable that a lot of people have used it that way, and mostly It does works except logically you don't need code that runs on both sides to be in a proxy at all. So the term "common proxy" hurts our brains and I agree it probably further causes unnecessary confusion about the whole concept.
So the more modern recommendation is to have all the common stuff just run directly in your main mod class (or wherever you handle the FML loading events like pre-init and such) and then only call the proxy methods for things that actually differ between client and server. For those, you create an interface (e.g. IProxy) and a client and server class that implement that interface each with their own version of the method.
Override
Block#getBlockLayer
to return
CUTOUT
or
TRANSPARENT
. The Grey Ghost explains each layer here.
Block#isOpaqueCube
is used by
Block#doesSideBlockRendering
/
Block#shouldSideBeRendered
to determine whether the faces of adjacent blocks should be rendered (opaque blocks block rendering, transparent blocks don't).