@Override
  /** Cycles locked state. */
  protected boolean onHammerRightClick(TEBase TE, EntityPlayer entityPlayer) {
    if (entityPlayer.isSneaking()) {

      boolean locked = !Safe.isLocked(TE);

      Safe.setLocked(TE, locked);

      if (locked) {
        Safe.setAutoPerm(TE, Safe.AUTOMATION_DISABLED);
      } else {
        Safe.setAutoPerm(TE, Safe.AUTOMATION_ALL);
      }

      if (locked) {
        ChatHandler.sendMessageToPlayer("message.safe_lock.name", entityPlayer);
      } else {
        ChatHandler.sendMessageToPlayer("message.safe_unlock.name", entityPlayer);
      }

      return true;
    } else {
      int autoPerm = Safe.getAutoPerm(TE);

      if (++autoPerm > 3) {
        autoPerm = 0;
      }

      Safe.setAutoPerm(TE, autoPerm);

      switch (autoPerm) {
        case Safe.AUTOMATION_ALL:
          ChatHandler.sendMessageToPlayer("message.automation_all.name", entityPlayer);
          break;
        case Safe.AUTOMATION_DISABLED:
          ChatHandler.sendMessageToPlayer("message.automation_disabled.name", entityPlayer);
          break;
        case Safe.AUTOMATION_RECEIVE:
          ChatHandler.sendMessageToPlayer("message.automation_insert.name", entityPlayer);
          break;
        case Safe.AUTOMATION_SEND:
          ChatHandler.sendMessageToPlayer("message.automation_extract.name", entityPlayer);
          break;
      }
    }

    return true;
  }
  @Override
  /** Called upon block activation (right click on the block.) */
  protected void postOnBlockActivated(
      TEBase TE,
      EntityPlayer entityPlayer,
      int side,
      float hitX,
      float hitY,
      float hitZ,
      List<Boolean> altered,
      List<Boolean> decInv) {
    if (!Safe.isOpen(TE) && canPlayerActivate(TE, entityPlayer)) {

      TECarpentersSafe TE_safe = (TECarpentersSafe) TE;
      ItemStack itemStack = entityPlayer.getHeldItem();

      if (itemStack != null && itemStack.getItem().equals(Items.gold_ingot)) {
        if (!TE_safe.hasUpgrade()) {
          if (TE_safe.incSizeInventory()) {
            TE.getWorldObj().markBlockForUpdate(TE.xCoord, TE.yCoord, TE.zCoord);
            decInv.add(true);
            return;
          }
        }
      }

      if (!decInv.contains(true)) {
        entityPlayer.displayGUIChest((TECarpentersSafe) TE);
      }
    } else {
      ChatHandler.sendMessageToPlayer("message.block_lock.name", entityPlayer);
    }

    /*
     * Safe should always return true because it either warns the player
     * that it is locked, or it returns the GUI.
     */
    altered.add(true);
  }