public GuiStructure(EntityPlayer ep, ChromaResearch r) {
    super(ep, r, 256, 220, false);

    array = page.getStructure().getStructureForDisplay();
    if (page.name().toLowerCase().contains("casting")) {
      array.setBlock(
          array.getMidX(),
          array.getMinY() + 1,
          array.getMidZ(),
          ChromaTiles.TABLE.getBlock(),
          ChromaTiles.TABLE.getBlockMetadata());
    }
    if (page == ChromaResearch.TREE) {
      array.setBlock(
          array.getMinX() + 1,
          array.getMinY() + 12,
          array.getMinZ() + 2,
          ChromaTiles.POWERTREE.getBlock(),
          ChromaTiles.POWERTREE.getBlockMetadata());
    }
    if (page == ChromaResearch.INFUSION) {
      array.setBlock(
          array.getMidX(),
          array.getMinY() + 2,
          array.getMidZ(),
          ChromaTiles.INFUSER.getBlock(),
          ChromaTiles.INFUSER.getBlockMetadata());
    }
    if (page == ChromaResearch.MINIPYLON) {
      array.setBlock(
          array.getMidX(),
          array.getMinY() + 6,
          array.getMidZ(),
          ChromaTiles.PERSONAL.getBlock(),
          ChromaTiles.PERSONAL.getBlockMetadata());
    }
    if (page == ChromaResearch.PYLON) {
      array.setBlock(
          array.getMidX(),
          array.getMinY() + 9,
          array.getMidZ(),
          ChromaTiles.PYLON.getBlock(),
          ChromaTiles.PYLON.getBlockMetadata());
    }
    if (page == ChromaResearch.CLOAKTOWER) {
      array.setBlock(
          array.getMidX(),
          array.getMinY() + 5,
          array.getMidZ(),
          ChromaTiles.CLOAKING.getBlock(),
          ChromaTiles.CLOAKING.getBlockMetadata());
    }
    render = new StructureRenderer(array);
    if (page == ChromaResearch.PYLON) {
      render.addOverride(
          array.getMidX(),
          array.getMinY() + 9,
          array.getMidZ(),
          ChromaTiles.PYLON.getCraftedProduct());
    } else if (page == ChromaResearch.MINIPYLON) {
      render.addOverride(
          array.getMidX(),
          array.getMinY() + 6,
          array.getMidZ(),
          ChromaTiles.PERSONAL.getCraftedProduct());
    } else if (page == ChromaResearch.CLOAKTOWER) {
      render.addOverride(
          array.getMidX(),
          array.getMinY() + 5,
          array.getMidZ(),
          ChromaTiles.CLOAKING.getCraftedProduct());
    } else if (page == ChromaResearch.TREE) {
      render.addOverride(
          array.getMinX() + 1,
          array.getMinY() + 12,
          array.getMinZ() + 2,
          ChromaTiles.POWERTREE.getCraftedProduct());
      render.addBlockHook(ChromaTiles.POWERTREE.getBlock(), new LumenTreeHook()); // Unused
    } else if (page == ChromaResearch.PORTALSTRUCT) {
      render.addBlockHook(Blocks.bedrock, new EnderCrystalHook());

      render.addEntityRender(-5, -1, -9, createCrystalRender());
      render.addEntityRender(-9, -1, -5, createCrystalRender());
      render.addEntityRender(5, -1, -9, createCrystalRender());
      render.addEntityRender(9, -1, -5, createCrystalRender());
      render.addEntityRender(-5, -1, 9, createCrystalRender());
      render.addEntityRender(-9, -1, 5, createCrystalRender());
      render.addEntityRender(5, -1, 9, createCrystalRender());
      render.addEntityRender(9, -1, 5, createCrystalRender());
    }
    render.addBlockHook(ChromaBlocks.RUNE.getBlockInstance(), new RuneRenderHook());
    render.addRenderHook(ChromaTiles.PYLON.getCraftedProduct(), new PylonRenderHook());
  }