I'm still here I promise.

Been a while since the last time I pushed to the repo, and that is
because, 1: things are slightly crazy with school atm, and 2: I was
working on a fairly significant change to how things work.

The (fairly large) beginnings of a new multi-block structure system. It
is based on a series of 3 base classes, with the addition of a new class
for every multi-block we decide to make. The 3 base classes are:
MultiBlockManager, MultiBlockStructure, and MultiBlockLayer.
MultiBlockManager stores a HashMap of all of the multi-block structures
that have been added (or will in the future if it doesn't already).
MultiBlockStructure and MultiBlockLayer are the classes used to define
the "template" for the multi-block. This "template" works similarly to
how the vanilla crafting system does, using a series of strings,
characters, and blocks to define the "recipe" for the layer. One
instance of MultiBlockStructure contains multiple instances of
MultiBlockLayer, each of which gets added using the system explained
above. MultiBlockLayer stores an ArrayList of all of the blocks that
make up that layer. Members of this List should never be null, instead
any block in the layer that shouldn't be a block should be set to air
(this should be a built-in thing, let me know if it isn't). Layers can
also have block aliases assigned to one or more of the blocks they
contain (this is a bit wonky atm, as the indices of the aliases are
evaluated elsewhere, will most likely fix this in the future). A block
alias is simply a list of blocks that are considered to be "equivalent"
to each other when checking the validity of the structure. These 3
classes combined allow for multi-block structure registering and
checking to be much easier and cleaner. Now, onto the additional class
for each multi-block. MultiBlockTrackFabricator is the class that
registers and checks the 3x3x3 structure for the Track Fabricator, the
first thing it does is registers the structure, adding 3 new layers, and
assigning some aliases and the "master" (the fabricator itself) to the
layers. It also has the checkStructure method, which iterates over the
structure template, and the blocks in the world, compares them, and
returns true if the structure matches the template and false if it
doesn't. The offsets for X and Z are set relative to the position and
facing direction of the master, in this case the fabricator, obviously.
They determine where to look when obtaining the blocks in the world.
After the offsets are determined, checking the structure is simply a
matter of comparing the block in the world, with the block stored in the
structure template. This is complicated slightly when aliases are added,
but will most likely be simplified in the future.

Other changes:
-Tracks now have different bounding boxes, making them easier to walk
on. Horizontal and Corner tracks have the same (if not slightly taller)
bounding box. Slope Up tracks have a bounding box that matches that of
Horizontal/Corner tracks on the actual track block, and 2 bounding boxes
on the dummy portion of the track that essentially makes them into
stairs. Slope tracks are also stairs. Slope Down tracks are, again,
stairs on the sloped portions, and slabs on the flat portions.
-Hammer now renders like a sword when rendering in 3rd person.
-All tracks now render using their block models as items, except Loop
and Roll. The positions are off for all but Horizontal and Corner, but
this will be fixed with the next push.
-Started on adding corner conveyor models, but did not fully implement
them.
-Conveyors now auto-rotate to face the direction of the player when
placed, or, if they have a conveyor facing them when placed, will
auto-rotate to face the same direction. They also should do this for
fabricator output blocks as well.
-Fixed the shift-clicking of items into/out of the Fabricator and Track
Storage containers. I labeled what the various checks do in the
shift-click method to help understand what is happening.
-Hammer Overlay now shows some debug info for conveyors. I want to
implement some sort of method to disable printing of the debug info,
probably via command or config option.
-Track Fabricator now has proper particle effects when broken. This is
done by simply assigning a texture to its blockIcon.
-The bug we had where the game would attempt to place a block when
opening the Fabricator or Storage guis is now fixed. This was done by
simply returning true in the onBlockActivated method, even if the gui
did not open for whatever reason.

If I missed anything, let me know, though I don't think I did. This was
a pretty big improvement to things, and now that the multi-block stuff
is better defined, I need to find another thing to focus on lol. Let me
know what you guys think of the changes here, and leave any suggestions
for further improvements/what I should focus on next! :D