Best Way to Register Blocks/Entities

Wow, it’s been a while since I posted a question.

I finally re wrote my rendering system for my puzzle game that I restarted a while ago and I need a good way to register blocks. Here is what the game looks like so you can get a feel for what I have:

So there are blocks, but I need a way to register the different types. Eg, trampoline block, or normal wall block and so forth. Right now I am just creating a new instance of the class of that block which then registers a Box to jME. I then join all the meshes together at the end of building the current level. So performance isn’t a problem.
What’s the best way to approach it so that I can, in the level creation code, call:


        makeBlock(new Vector3f(3, 40, 40), Block_Wall.class);

Therefore, creating the block of whichever block.class I put in there?
The constructor for the makeBlock is:


    public void makeBlock(Vector3f pos, Class<? extends BlockSuper> block){
        blocks[(int) pos.x][(int) pos.y][(int) pos.z] = new BlockSuper(main, new Vector3f(pos.x, pos.y, pos.z), level);
        blocks[(int) pos.x][(int) pos.y][(int) pos.z].setUpPhysics();
    }

So as you can see I just create a BlockSuper there, which is the superclass for all blocks. I need to take the .class of whatever block I want there and create an instance of it from that. I know about reflection:


        try {
            Class<?> clazz = Class.forName("Engine.Blocks.BlockSuper");
            Constructor<?> constructor = clazz.getConstructor(Main.class, Vector3f.class, Node.class);
            Object instance = constructor.newInstance(main, pos, level);
        } catch(Exception e){
            e.printStackTrace();
        }

However I really don’t know if this is what I should be using, as it is a rather new concept to me.
Thanks for any help.