@Override
  public boolean isValid(BptSlotInfo slot, IBptContext context) {
    BptSlotInfo newSlot = slot.clone();
    slot.blockId = delegateTo;

    if (BlueprintManager.blockBptProps[delegateTo] != null) {
      return BlueprintManager.blockBptProps[delegateTo].isValid(newSlot, context);
    } else {
      return super.isValid(newSlot, context);
    }
  }
  @Override
  public void rotateLeft(BptSlotInfo slot, IBptContext context) {
    BptSlotInfo newSlot = slot.clone();
    slot.blockId = delegateTo;

    if (BlueprintManager.blockBptProps[delegateTo] != null) {
      BlueprintManager.blockBptProps[delegateTo].rotateLeft(newSlot, context);
    } else {
      super.rotateLeft(newSlot, context);
    }
  }
  @Override
  public void addRequirements(
      BptSlotInfo slot, IBptContext context, LinkedList<ItemStack> requirements) {
    BptSlotInfo newSlot = slot.clone();
    slot.blockId = delegateTo;

    if (BlueprintManager.blockBptProps[delegateTo] != null) {
      BlueprintManager.blockBptProps[delegateTo].addRequirements(newSlot, context, requirements);
    } else {
      super.addRequirements(newSlot, context, requirements);
    }
  }
 @Override
 public void rotateLeft(BptSlotInfo slot, IBptContext context) {
   slot.meta = ForgeDirection.values()[slot.meta].getRotation(ForgeDirection.DOWN).ordinal();
 }